Merge "Update strace to 4.19." am: 0d1c7e2b48 am: 726c62dc16
am: 0ae891adc0

Change-Id: Ia7c96d9317df006f714dbc9ca7b5f473f3c162a9
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..0817a1a
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,303 @@
+//
+// Copyright (C) 2006 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+cc_binary {
+
+    srcs: [
+        "access.c",
+        "affinity.c",
+        "aio.c",
+        "basic_filters.c",
+        "bind.c",
+        "bjm.c",
+        "block.c",
+        "bpf.c",
+        "bpf_filter.c",
+        "bpf_seccomp_filter.c",
+        "bpf_sock_filter.c",
+        "btrfs.c",
+        "cacheflush.c",
+        "capability.c",
+        "chdir.c",
+        "chmod.c",
+        "clone.c",
+        "copy_file_range.c",
+        "count.c",
+        "desc.c",
+        "dirent.c",
+        "dirent64.c",
+        "dm.c",
+        "dyxlat.c",
+        "epoll.c",
+        "error_prints.c",
+        "evdev.c",
+        "eventfd.c",
+        "execve.c",
+        "fadvise.c",
+        "fallocate.c",
+        "fanotify.c",
+        "fchownat.c",
+        "fcntl.c",
+        "fetch_bpf_fprog.c",
+        "fetch_struct_flock.c",
+        "fetch_struct_keyctl_kdf_params.c",
+        "fetch_struct_mmsghdr.c",
+        "fetch_struct_msghdr.c",
+        "fetch_struct_stat.c",
+        "fetch_struct_stat64.c",
+        "fetch_struct_statfs.c",
+        "file_handle.c",
+        "file_ioctl.c",
+        "filter_qualify.c",
+        "flock.c",
+        "fstatfs.c",
+        "fstatfs64.c",
+        "fs_x_ioctl.c",
+        "futex.c",
+        "getcpu.c",
+        "getcwd.c",
+        "getrandom.c",
+        "get_robust_list.c",
+        "hdio.c",
+        "hostname.c",
+        "inotify.c",
+        "io.c",
+        "ioctl.c",
+        "ioperm.c",
+        "iopl.c",
+        "ioprio.c",
+        "ipc.c",
+        "ipc_msg.c",
+        "ipc_msgctl.c",
+        "ipc_sem.c",
+        "ipc_shm.c",
+        "ipc_shmctl.c",
+        "kcmp.c",
+        "kexec.c",
+        "keyctl.c",
+        "ldt.c",
+        "link.c",
+        "listen.c",
+        "lookup_dcookie.c",
+        "loop.c",
+        "lseek.c",
+        "mem.c",
+        "membarrier.c",
+        "memfd_create.c",
+        "mknod.c",
+        "mmsghdr.c",
+        "mount.c",
+        "mq.c",
+        "msghdr.c",
+        "mtd.c",
+        "net.c",
+        "netlink.c",
+        "netlink_crypto.c",
+        "netlink_inet_diag.c",
+        "netlink_netlink_diag.c",
+        "netlink_packet_diag.c",
+        "netlink_route.c",
+        "netlink_selinux.c",
+        "netlink_smc_diag.c",
+        "netlink_sock_diag.c",
+        "netlink_unix_diag.c",
+        "nlattr.c",
+        "nsfs.c",
+        "numa.c",
+        "number_set.c",
+        "oldstat.c",
+        "open.c",
+        "pathtrace.c",
+        "perf.c",
+        "personality.c",
+        "pkeys.c",
+        "poll.c",
+        "prctl.c",
+        "print_dev_t.c",
+        "print_group_req.c",
+        "print_ifindex.c",
+        "print_mq_attr.c",
+        "print_msgbuf.c",
+        "print_sigevent.c",
+        "print_sg_req_info.c",
+        "print_statfs.c",
+        "print_struct_stat.c",
+        "print_time.c",
+        "print_timespec.c",
+        "print_timeval.c",
+        "print_timex.c",
+        "printmode.c",
+        "printrusage.c",
+        "printsiginfo.c",
+        "process.c",
+        "process_vm.c",
+        "ptp.c",
+        "quota.c",
+        "readahead.c",
+        "readlink.c",
+        "reboot.c",
+        "renameat.c",
+        "resource.c",
+        "rtc.c",
+        "rtnl_addr.c",
+        "rtnl_addrlabel.c",
+        "rtnl_dcb.c",
+        "rtnl_link.c",
+        "rtnl_mdb.c",
+        "rtnl_neigh.c",
+        "rtnl_neightbl.c",
+        "rtnl_netconf.c",
+        "rtnl_nsid.c",
+        "rtnl_route.c",
+        "rtnl_rule.c",
+        "rtnl_tc.c",
+        "rtnl_tc_action.c",
+        "rt_sigframe.c",
+        "rt_sigreturn.c",
+        "sched.c",
+        "scsi.c",
+        "seccomp.c",
+        "sendfile.c",
+        "sg_io_v3.c",
+        "sg_io_v4.c",
+        "shutdown.c",
+        "sigaltstack.c",
+        "signal.c",
+        "signalfd.c",
+        "sigreturn.c",
+        "sock.c",
+        "sockaddr.c",
+        "socketcall.c",
+        "socketutils.c",
+        "sram_alloc.c",
+        "stat.c",
+        "stat64.c",
+        "statfs.c",
+        "statfs64.c",
+        "statx.c",
+        "strace.c",
+        "string_to_uint.c",
+        "swapon.c",
+        "sync_file_range.c",
+        "sync_file_range2.c",
+        "syscall.c",
+        "sysctl.c",
+        "sysinfo.c",
+        "syslog.c",
+        "sysmips.c",
+        "term.c",
+        "time.c",
+        "times.c",
+        "truncate.c",
+        "ubi.c",
+        "ucopy.c",
+        "uid16.c",
+        "uid.c",
+        "umask.c",
+        "umount.c",
+        "uname.c",
+        "upeek.c",
+        "upoke.c",
+        "userfaultfd.c",
+        "ustat.c",
+        "util.c",
+        "utime.c",
+        "utimes.c",
+        "v4l2.c",
+        "wait.c",
+        "xattr.c",
+        "xlat.c",
+        "xmalloc.c",
+    ],
+
+    // We have "config.h", but since we're using one file for both LP32 and LP64,
+    // we need to set the hard-coded size #defines here instead.
+    cflags: ["-DHAVE_CONFIG_H"] + [
+        "-DSIZEOF_KERNEL_LONG_T=SIZEOF_LONG",
+        "-DSIZEOF_OFF_T=SIZEOF_LONG",
+    ] + [
+        "-Wall",
+        "-Werror",
+        "-Wno-missing-field-initializers",
+        "-Wno-pointer-arith",
+        "-Wno-unused-parameter",
+        "-Wno-sign-compare",
+        "-fno-strict-aliasing",
+    ],
+    multilib: {
+        lib32: {
+            cflags: [
+                "-DSIZEOF_LONG_LONG=8",
+                "-DSIZEOF_LONG=4",
+                "-DSIZEOF_RLIM_T=4",
+                "-DHAVE_STRUCT_STAT64=1",
+            ],
+        },
+        lib64: {
+            cflags: [
+                "-DSIZEOF_LONG_LONG=8",
+                "-DSIZEOF_LONG=8",
+                "-DSIZEOF_RLIM_T=8",
+            ],
+        },
+    },
+
+    arch: {
+        arm: {
+            cflags: ["-DARM=1"] + ["-DHAVE_STRUCT___OLD_KERNEL_STAT=1"],
+
+            local_include_dirs: [
+                "linux/arm",
+                "linux",
+            ],
+        },
+        arm64: {
+            cflags: ["-DAARCH64=1"],
+
+            local_include_dirs: [
+                "linux/aarch64",
+                "linux",
+            ],
+        },
+        mips: {
+            enabled: false,
+        },
+        mips64: {
+            enabled: false,
+        },
+        x86: {
+            cflags: ["-DI386=1"] + ["-DHAVE_STRUCT___OLD_KERNEL_STAT=1"],
+
+            local_include_dirs: [
+                "linux/i386",
+                "linux",
+            ],
+        },
+        x86_64: {
+            cflags: ["-DX86_64=1"],
+
+            local_include_dirs: [
+                "linux/x86_64",
+                "linux",
+            ],
+        },
+    },
+
+    name: "strace",
+
+    tags: ["debug"],
+
+}
diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index b2a8fcf..0000000
--- a/Android.mk
+++ /dev/null
@@ -1,241 +0,0 @@
-#
-# Copyright (C) 2006 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-ifneq ($(strip $(TARGET_ARCH)),mips)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-    access.c \
-    affinity.c \
-    aio.c \
-    bjm.c \
-    block.c \
-    bpf.c \
-    btrfs.c \
-    cacheflush.c \
-    capability.c \
-    chdir.c \
-    chmod.c \
-    clone.c \
-    copy_file_range.c \
-    count.c \
-    desc.c \
-    dirent.c \
-    dirent64.c \
-    dm.c \
-    dyxlat.c \
-    epoll.c \
-    evdev.c \
-    eventfd.c \
-    execve.c \
-    fadvise.c \
-    fallocate.c \
-    fanotify.c \
-    fchownat.c \
-    fcntl.c \
-    fetch_seccomp_fprog.c \
-    fetch_struct_flock.c \
-    fetch_struct_mmsghdr.c \
-    fetch_struct_msghdr.c \
-    fetch_struct_stat.c \
-    fetch_struct_stat64.c \
-    fetch_struct_statfs.c \
-    file_handle.c \
-    file_ioctl.c \
-    flock.c \
-    fstatfs.c \
-    fstatfs64.c \
-    fs_x_ioctl.c \
-    futex.c \
-    getcpu.c \
-    getcwd.c \
-    getrandom.c \
-    get_robust_list.c \
-    hdio.c \
-    hostname.c \
-    inotify.c \
-    io.c \
-    ioctl.c \
-    ioperm.c \
-    iopl.c \
-    ioprio.c \
-    ipc.c \
-    ipc_msg.c \
-    ipc_msgctl.c \
-    ipc_sem.c \
-    ipc_shm.c \
-    ipc_shmctl.c \
-    kcmp.c \
-    kexec.c \
-    keyctl.c \
-    ldt.c \
-    link.c \
-    lookup_dcookie.c \
-    loop.c \
-    lseek.c \
-    mem.c \
-    membarrier.c \
-    memfd_create.c \
-    mknod.c \
-    mmsghdr.c \
-    mount.c \
-    mq.c \
-    msghdr.c \
-    mtd.c \
-    net.c \
-    netlink.c \
-    netlink_sock_diag.c \
-    nlattr.c \
-    nsfs.c \
-    numa.c \
-    oldstat.c \
-    open.c \
-    pathtrace.c \
-    perf.c \
-    personality.c \
-    pkeys.c \
-    poll.c \
-    prctl.c \
-    print_dev_t.c \
-    print_mq_attr.c \
-    print_msgbuf.c \
-    print_sigevent.c \
-    print_sg_req_info.c \
-    print_statfs.c \
-    print_struct_stat.c \
-    print_time.c \
-    print_timespec.c \
-    print_timeval.c \
-    print_timex.c \
-    printmode.c \
-    printrusage.c \
-    printsiginfo.c \
-    process.c \
-    process_vm.c \
-    ptp.c \
-    qualify.c \
-    quota.c \
-    readahead.c \
-    readlink.c \
-    reboot.c \
-    renameat.c \
-    resource.c \
-    rtc.c \
-    rt_sigframe.c \
-    rt_sigreturn.c \
-    sched.c \
-    scsi.c \
-    seccomp.c \
-    sendfile.c \
-    sg_io_v3.c \
-    sg_io_v4.c \
-    sigaltstack.c \
-    signal.c \
-    signalfd.c \
-    sigreturn.c \
-    sock.c \
-    sockaddr.c \
-    socketcall.c \
-    socketutils.c \
-    sram_alloc.c \
-    stat.c \
-    stat64.c \
-    statfs.c \
-    statfs64.c \
-    statx.c \
-    strace.c \
-    swapon.c \
-    sync_file_range.c \
-    sync_file_range2.c \
-    syscall.c \
-    sysctl.c \
-    sysinfo.c \
-    syslog.c \
-    sysmips.c \
-    term.c \
-    time.c \
-    times.c \
-    truncate.c \
-    ubi.c \
-    uid16.c \
-    uid.c \
-    umask.c \
-    umount.c \
-    uname.c \
-    upeek.c \
-    upoke.c \
-    userfaultfd.c \
-    ustat.c \
-    util.c \
-    utime.c \
-    utimes.c \
-    v4l2.c \
-    wait.c \
-    xattr.c \
-    xlat.c \
-    xmalloc.c \
-
-# We have "config.h", but since we're using one file for both LP32 and LP64,
-# we need to set the hard-coded size #defines here instead.
-LOCAL_CFLAGS := -DHAVE_CONFIG_H
-LOCAL_CFLAGS_32 += -DSIZEOF_LONG_LONG=8 -DSIZEOF_LONG=4 -DSIZEOF_RLIM_T=4 -DHAVE_STRUCT_STAT64=1
-LOCAL_CFLAGS_64 += -DSIZEOF_LONG_LONG=8 -DSIZEOF_LONG=8 -DSIZEOF_RLIM_T=8
-LOCAL_CFLAGS += -DSIZEOF_KERNEL_LONG_T=SIZEOF_LONG -DSIZEOF_OFF_T=SIZEOF_LONG
-
-LOCAL_CFLAGS_arm += -DARM=1
-LOCAL_CFLAGS_arm += -DHAVE_STRUCT___OLD_KERNEL_STAT=1
-
-LOCAL_CFLAGS_arm64 += -DAARCH64=1
-
-LOCAL_CFLAGS_mips += -DMIPS=1 -DLINUX_MIPSO32=1
-LOCAL_CFLAGS_mips += -DHAVE_ASM_SYSMIPS_H=1
-
-LOCAL_CFLAGS_mips64 += -DMIPS=1 -DLINUX_MIPSN64=1
-LOCAL_CFLAGS_mips64 += -DHAVE_ASM_SYSMIPS_H=1
-
-LOCAL_CFLAGS_x86 += -DI386=1
-LOCAL_CFLAGS_x86 += -DHAVE_STRUCT___OLD_KERNEL_STAT=1
-
-LOCAL_CFLAGS_x86_64 += -DX86_64=1
-
-LOCAL_CFLAGS += \
-    -Wall \
-    -Werror \
-    -Wno-missing-field-initializers \
-    -Wno-pointer-arith \
-    -Wno-unused-parameter \
-    -Wno-sign-compare \
-    -fno-strict-aliasing \
-
-LOCAL_C_INCLUDES_arm := $(LOCAL_PATH)/linux/arm $(LOCAL_PATH)/linux
-LOCAL_C_INCLUDES_arm64 := $(LOCAL_PATH)/linux/aarch64 $(LOCAL_PATH)/linux
-LOCAL_C_INCLUDES_mips := $(LOCAL_PATH)/linux/mips $(LOCAL_PATH)/linux
-LOCAL_C_INCLUDES_mips64 := $(LOCAL_PATH)/linux/mips $(LOCAL_PATH)/linux
-LOCAL_C_INCLUDES_x86 := $(LOCAL_PATH)/linux/i386 $(LOCAL_PATH)/linux
-LOCAL_C_INCLUDES_x86_64 := $(LOCAL_PATH)/linux/x86_64 $(LOCAL_PATH)/linux
-
-LOCAL_MODULE := strace
-
-LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
-
-LOCAL_MODULE_TAGS := debug
-
-include $(BUILD_EXECUTABLE)
-
-endif
diff --git a/CREDITS b/CREDITS
index a59c8dd..ebad5e7 100644
--- a/CREDITS
+++ b/CREDITS
@@ -50,7 +50,7 @@
 	Douglas Mencken <dougmencken@gmail.com>
 	Dr. David Alan Gilbert <dgilbert@redhat.com>
 	Edgar E. Iglesias <edgar.iglesias@gmail.com>
-	Edgar Kaziahmedov <edos@linux.com>
+	Edgar Kaziakhmedov <edgar.kaziakhmedov@virtuozzo.com>
 	Elliott Hughes <enh@google.com>
 	Elvira Khabirova <lineprinter0@gmail.com>
 	Erik Johansson <erik@ejohansson.se>
@@ -102,6 +102,7 @@
 	Kirill A. Shutemov <kirill@shutemov.name>
 	Kyle McMartin <kyle@mcmartin.ca>
 	Lai JiangShan <laijs@cn.fujitsu.com>
+	Lazar Trsic <Lazar.Trsic@imgtec.com>
 	Leonard N. Zubkoff <lnz@dandelion.com>
 	Linus Torvalds <Linus.Torvalds@cs.helsinki.fi>
 	Lubomir Rintel <lkundrak@v3.sk>
diff --git a/ChangeLog b/ChangeLog
index fed0a30..b649b2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,3047 @@
+2017-09-05  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Prepare for 4.19 release.
+	* NEWS: Update for 4.19 release.
+
+	.mailmap: add canonical name and address of Edgar Kaziakhmedov.
+	* .mailmap: Add canonical name and address of Edgar Kaziakhmedov here
+	to avoid duplications in CREDITS file.
+
+	maint: add gen-tag-message.sh script.
+	* maint/gen-tag-message.sh: New file.
+
+	maint: add gen-contributors-list.sh script.
+	* maint/gen-contributors-list.sh: New file.
+
+2017-09-05  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Update copyright headers.
+	Headers updated automatically with
+
+	    maint/update_copyright_headers.sh -c
+
+2017-09-05  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	update_copyright_years.sh: add ability to automatically commit results.
+	* maint/update_copyright_years.sh (DEFAULT_GIT_COMMIT_MESSAGE,
+	GIT_COMMIT_MESSAGE): New variables.
+	<-c>: New option, implies -a, calls git commit with GIT_COMMIT_TEMPLATE string
+	as a template.
+
+2017-09-04  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	configure.ac: specify minimal GNU Automake version.
+	In order to provide better diagnostics.
+
+	* configure.ac (AM_INIT_AUTOMAKE): Specify minimal GNU Automake version as
+	1.13 due to usage of AM_EXTRA_RECURSIVE_TARGETS macro.
+
+	Closes: https://github.com/strace/strace/issues/11
+
+2017-09-04  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Update NEWS.
+
+2017-09-03  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of IFLA_XDP netlink attribute of ifinfomsg.
+	* tests/nlattr_ifla_xdp.c: New file.
+	* tests/gen_tests.in (nlattr_ifla_xdp): New entry.
+	* tests/pure_executables.list: Add nlattr_ifla_xdp.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of IFLA_PORT_SELF netlink attribute of ifinfomsg.
+	* tests/nlattr_ifla_port.c: New file.
+	* tests/gen_tests.in (nlattr_ifla_port): New entry.
+	* tests/pure_executables.list: Add nlattr_ifla_port.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of more ifinfomsg netlink attributes.
+	* tests/nlattr_ifinfomsg.c (IFLA_LINKINFO, IFLA_VF_PORTS,
+	IFLA_INFO_KIND, IFLA_VF_PORT): New macros.
+	(main): Check decoding of IFLA_LINKINFO and IFLA_VF_PORTS.
+
+	rtnl_link: decode more ifinfomsg netlink attributes.
+	* configure.ac (AC_CHECK_TYPES): Check for struct ifla_port_vsi
+	in <linux/if_link.h>.
+	* rtnl_link.c: Include "xlat/rtnl_ifla_info_attrs.h",
+	"xlat/rtnl_ifla_port_attrs.h", "xlat/rtnl_ifla_port_attrs.h",
+	"xlat/rtnl_ifla_xdp_attrs.h", and "xlat/xdp_flags.h".
+	(decode_ifla_linkinfo, decode_ifla_port_vsi,
+	decode_ifla_port, decode_ifla_vf_ports,
+	decode_ifla_xdp_flags, decode_ifla_xdp): New functions.
+	(ifla_linkinfo_nla_decoders, ifla_port_nla_decoders,
+	ifla_vf_port_nla_decoders, ifla_xdp_nla_decoders): New arrays.
+	(ifinfomsg_nla_decoders) <IFLA_LINKINFO>: Use decode_ifla_linkinfo.
+	<IFLA_VF_PORTS>: Use decode_ifla_vf_ports.
+	<IFLA_PORT_SELF>: Use decode_ifla_port.
+	<IFLA_XDP>: Use decode_ifla_xdp.
+	* xlat/rtnl_ifla_info_attrs.in: New file.
+	* xlat/rtnl_ifla_port_attrs.in: Likewise.
+	* xlat/rtnl_ifla_vf_port_attrs.in: Likewise.
+	* xlat/rtnl_ifla_xdp_attrs.in: Likewise.
+	* xlat/xdp_flags.in: Likewise.
+
+2017-09-02  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	keyctl: add support for KDF parameters decoding in KEYCTL_DH_COMPUTE.
+	* fetch_struct_keyctl_kdf_params.c: New file.
+	* keyctl_kdf_params.h: Likewise.
+	* Makefile.am (strace_SOURCES): Add them.
+	* configure.ac: Add check for struct keyctl_kdf_params presence in
+	<linux/keyctl.h>.
+	* defs.h (struct strace_keyctl_kdf_params): Add forward declaration.
+	* keyctl.c (keyctl_dh_compute): Add new parameter kdf_addr, print it
+	on exiting.
+	(SYS_FUNC(keyctl)) <case KEYCTL_DH_COMPUTE>: Pass arg5 to
+	keyctl_dh_compute.
+	* tests/keyctl.c: Include assert.h.
+	(struct keyctl_kdf_params) [!HAVE_STRUCT_KEYCTL_KDF_PARAMS]: New
+	definition.
+	(STR32): New definition, copied from ioctl_dm.c.
+	(append_str, kckdfp_to_str): New functions.
+	(main): Update expected output, add checks for struct keyctl_kdf_params
+	decoding.
+
+	tests/keyctl: improve readability.
+	* tests/keyctl.c: Since do_keyctl() has so convoluted calling convention
+	and keyctl test is so complex, let's try to improve readability a bit
+	with some conventions regarding do_keyctl() call formatting: arguments
+	representing single keyctl argument should be put on the separate line,
+	continuations of arguments related to the same keyctl argument should
+	have additional indentation and termination 0UL should always be
+	on a separate line.  Also, while we are here, let's add spaces
+	to two type casts that are missing them.
+
+2017-09-01  Gleb Fotengauer-Malinovskiy  <glebfm@altlinux.org>
+
+	s390: update ioctl entries from linux 4.13.
+	* linux/s390/ioctls_arch0.h: Update from linux v4.13-rc7 using ioctls_gen.sh.
+
+2017-09-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	mpers.awk: fix regression introduced by the previous cleanup.
+	* mpers.awk (what_is): Remove returned_size from local variables.
+
+	Fixes: v4.18-308-gfd3447b5 ("mpers.awk: declare local variables consistently")
+
+2017-09-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	rtnl_link: enhance decoding of struct rtnl_link_stats{,64}
+	Enhance runtime detection of struct rtnl_link_stats.rx_nohandler
+	and struct rtnl_link_stats64.rx_nohandler.
+
+	* rtnl_link.c (decode_rtnl_link_stats): Do not accept structure length
+	greater than min_size but less than sizeof(struct rtnl_link_stats).
+	(decode_rtnl_link_stats64): Likewise, so not accept structure length
+	greater than min_size but less than sizeof(struct rtnl_link_stats64).
+
+2017-09-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	rtnl_neightbl: enhance decoding of struct ndt_stats.
+	Add support of kernels that operate with older definition of
+	struct ndt_stats than the definition used to build strace.
+
+	* rtnl_neightbl.c (decode_ndt_stats): Add runtime detection
+	of struct ndt_stats.ndts_table_fulls field, print the field
+	when it is available.
+
+2017-09-01  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of IFLA_PROTINFO netlink attribute of ifinfomsg.
+	* tests/nlattr_ifla_brport.c: New file.
+	* tests/gen_tests.in (nlattr_ifla_brport): New entry.
+	* tests/pure_executables.list: Add nlattr_ifla_brport.
+	* tests/.gitignore: Likewise.
+	* tests/test_nlattr.h (TEST_NESTED_NLATTR_OBJECT): New macro.
+
+	rtnl_link: decode IFLA_PROTINFO netlink attribute of ifinfomsg.
+	* configure.ac (AC_CHECK_TYPES): Check for ifla_bridge_id
+	and rtnl_link_stats64 structures in <linux/if_link.h>.
+	* rtnl_link.c: Include "xlat/rtnl_ifla_brport_attrs.h".
+	(decode_ifla_bridge_id, decode_ifla_protinfo): New functions.
+	(ifla_brport_nla_decoders): New array.
+	(ifinfomsg_nla_decoders) <IFLA_PROTINFO>: Use decode_ifla_protinfo.
+	* xlat/rtnl_ifla_brport_attrs.in: New file.
+
+	tests: check decoding of ndtmsg netlink attributes.
+	* tests/nlattr_ndtmsg.c (NDTA_PARMS, NDTPA_IFINDEX): New macros.
+	(main): Check decoding of NDTA_CONFIG, NDTA_PARMS and NDTA_STATS.
+
+	rtnl_neightbl: decode ndtmsg netlink attributes.
+	* configure.ac (AC_CHECK_TYPES): Check for ndt_config
+	and ndt_stats structures in <linux/neighbour.h>.
+	(AC_CHECK_MEMBERS): Check for ndts_table_fulls field in struct ndt_stats.
+	* rtnl_neightbl.c: Include "xlat/rtnl_neightbl_parms_attrs.h".
+	(decode_ndt_config, decode_ndta_parms, decode_ndta_parms): New functions.
+	(ndt_parms_nla_decoders, ndtmsg_nla_decoders): New arrays.
+	(decode_ndtmsg): Use ndtmsg_nla_decoders.
+	* xlat/rtnl_neightbl_parms_attrs.in: New file.
+
+	tests: check decoding of ifaddrlblmsg netlink attributes.
+	* tests/nlattr_ifaddrlblmsg.c (main): Check decoding of IFAL_ADDRESS.
+
+	rtnl_addrlabel: decode ifaddrlblmsg netlink attributes.
+	* rtnl_addrlabel.c (decode_ifal_address): New function.
+	(ifaddrlblmsg_nla_decoders): New array.
+	(decode_ifaddrlblmsg): Use it.
+
+2017-09-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	alpha: wire up new syscalls.
+	* linux/alpha/syscallent.h [514..522]: New entries.
+
+2017-08-31  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests/.gitignore: add missing files that should be ignored.
+	* tests/.gitignore: Add is_linux_mips_n64.
+
+2017-08-31  Dmitry V. Levin  <ldv@altlinux.org>
+
+	mpers.awk: declare local variables consistently.
+	* mpers.awk (compare_indices): Make c1 and c2 variables local.
+	(enter): Make item variable local.
+	(what_is): Make loc_diff, returned_size, and to_return local.
+
+2017-08-30  Dmitry V. Levin  <ldv@altlinux.org>
+
+	mpers.awk: separate local variables from real parameters by newline.
+	* mpers.awk (array_get, update_upper_bound): Separate local variables
+	from real parameters by newline.
+
+2017-08-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	rtnl_rule: enhance FRA_TABLE decoding.
+	The attribute of FRA_TABLE is not just a 32-bit integer, some constants
+	have well-known symbolic names like RT_TABLE_DEFAULT.
+
+	* rtnl_rule.c (fib_rule_hdr_nla_decoders) <FRA_TABLE>:
+	Use decode_nla_rt_class.
+	* tests/nlattr_fib_rule_hdr.c (FRA_TABLE): New macro.
+	(main): Check FRA_TABLE decoding.
+
+2017-08-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	rtnl_route: enhance RTA_TABLE decoding.
+	The attribute of RTA_TABLE is not just a 32-bit integer, some constants
+	have well-known symbolic names like RT_TABLE_DEFAULT.
+
+	* nlattr.h (decode_nla_rt_class): New prototype.
+	* rtnl_route.c (decode_nla_rt_class): New function.
+	(rtmsg_nla_decoders) <RTA_TABLE>: Use it.
+	* tests/nlattr_rtmsg.c (main): Check RTA_TABLE decoding.
+
+2017-08-29  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	rtnl_nsid: decode rtgenmsg netlink attributes.
+	* rtnl_nsid.c (rtgenmsg_nla_decoders): New array.
+	(decode_rtgenmsg): Use it.
+
+	rtnl_netconf: decode netconfmsg netlink attributes.
+	* rtnl_netconf.c (netconfmsg_nla_decoders): New array.
+	(decode_netconfmsg): Use it.
+
+	tests: check decoding of ndmsg netlink attributes.
+	* tests/nlattr_ndmsg.c: Include <netinet/in.h> and <arpa/inet.h>.
+	(NDA_PORT): New macro.
+	(main): Check decoding of NDA_DST, NDA_CACHEINFO and NDA_PORT.
+
+	rtnl_neigh: decode ndmsg netlink attributes.
+	* nlattr.c: Include <netinet/in.h> and <arpa/inet.h>.
+	(decode_nla_be16): New function.
+	* nlattr.h (decode_nla_be16): New prototype.
+	* rtnl_neigh.c (decode_neigh_addr,
+	decode_nda_cacheinfo): New functions.
+	(ndmsg_nla_decoders): New array.
+	(decode_ndmsg): Use it.
+
+	tests: check decoding of fib_rule_hdr netlink attributes.
+	* tests/nlattr_fib_rule_hdr.c: Include <inttypes.h>.
+	(FRA_TUN_ID, FRA_UID_RANGE): New macros.
+	(main): Check decoding of FRA_DST, FRA_UID_RANGE and FRA_TUN_ID.
+
+	rtnl_rule: decode fib_rule_hdr netlink attributes.
+	* configure.ac (AC_CHECK_FUNCS): Add be64toh.
+	(AC_CHECK_TYPES): Check for struct fib_rule_uid_range
+	in <linux/fib_rules.h>.
+	* nlattr.c: Include <endian.h>.
+	(decode_nla_be64): New function.
+	* nlattr.h (decode_nla_be64): New prototype.
+	* rtnl_rule.c (decode_rule_addr,
+	decode_fib_rule_uid_range): New functions.
+	(fib_rule_hdr_nla_decoders): New array.
+	(decode_fib_rule_hdr): Use it.
+
+	rtnl_neigh: fix ndm_type field decode in struct ndmsg.
+	* defs.h (routing_types): New xlat prototype.
+	* rtnl_neigh.c (decode_ndmsg): Fix ndm_type decode.
+	* xlat/nda_types.in: Remove it.
+	* tests/netlink_route.c (test_rtnl_neigh): Update the test.
+	* tests/nlattr_ndmsg.c (init_ndmsg, print_ndmsg): Likewise.
+
+2017-08-28  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Disallow more than one signal= specification in an injection expression.
+	Specifying several signal= specifications in an injection expressions
+	makes no sense.
+
+	* filter_qualify.c (parse_inject_token): Disallow second
+	signal= specification.
+	* strace.1.in: Document it.
+	* tests/qual_inject-syntax.test: Check it.
+
+2017-08-28  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Add "flags" field to struct inject_data.
+	Introduce "flags" field to struct inject_data and use it instead
+	of magic rval and signo constants.
+	Due to layout of struct inject_data, this new field does not change
+	sizeof(struct inject_data).
+
+	* defs.h (INJECT_F_RETVAL, INJECT_F_SIGNAL): New macros.
+	(INJECT_OPTS_RVAL_DEFAULT): Remove macro.
+	(struct inject_data): Add "flags" field.
+	* filter_qualify.c (parse_inject_token, qualify_inject_common): Check
+	struct inject_data.flags instead of inject_data.rval
+	and inject_data.signo, do not initialize inject_opts.data.
+	* syscall.c (tamper_with_syscall_entering): Check struct
+	inject_data.flags instead of inject_data.rval and inject_data.signo.
+
+2017-08-28  Dmitry V. Levin  <ldv@altlinux.org>
+	    Victor Krapivensky  <krapivenskiy.va@phystech.edu>
+
+	Move inject data of struct inject_opts to inject_data substructure.
+	* defs.h (inject_data): New structure.
+	(struct inject_opts): Replace "signo" and "rval" fields with "data"
+	field of type "struct inject_data".
+	* filter_qualify.c (parse_inject_token, qualify_inject_common): Update
+	for the new layout of struct inject_opts.
+	* syscall.c (tamper_with_syscall_entering, tamper_with_syscall_exiting):
+	Likewise.
+
+2017-08-28  Gleb Fotengauer-Malinovskiy  <glebfm@altlinux.org>
+
+	Update ioctl entries from linux v4.13-rc7.
+	* linux/32/ioctls_inc_align16.h: Update from linux v4.13-rc7 using ioctls_gen.sh.
+	* linux/32/ioctls_inc_align32.h: Likewise.
+	* linux/32/ioctls_inc_align64.h: Likewise.
+	* linux/64/ioctls_inc.h: Likewise.
+	* linux/x32/ioctls_inc0.h: Likewise.
+	* linux/arm/ioctls_arch0.h: Likewise.
+	* linux/i386/ioctls_arch0.h: Likewise.
+	* linux/powerpc/ioctls_arch0.h: Likewise.
+	* linux/s390x/ioctls_arch0.h: Likewise.
+	* linux/x86_64/ioctls_arch0.h: Likewise.
+	* NEWS: Mention this.
+
+2017-08-28  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of ifinfomsg netlink attributes.
+	* tests/nlattr_ifinfomsg.c: Include <stddef.h> and <linux/if_link.h>.
+	(IFLA_LINK_NETNSID): New macro.
+	(main): Check decoding of IFLA_LINK_NETNSID,
+	IFLA_STATS, IFLA_MAP and IFLA_STATS64.
+
+	rtnl_link: decode ifinfomsg netlink attributes.
+	* configure.ac (AC_CHECK_HEADERS): Add linux/if_link.h.
+	(AC_CHECK_TYPES): Check for struct rtnl_link_stats64
+	in <linux/if_link.h>.
+	(AC_CHECK_MEMBERS): Check for rx_nohandler field
+	in struct rtnl_link_stats/rtnl_link_stats64.
+	* rtnl_link.c: Include <linux/if_link.h>.
+	(decode_rtnl_link_stats, decode_rtnl_link_ifmap,
+	decode_rtnl_link_stats64): New functions.
+	(ifinfomsg_nla_decoders): New array.
+	(decode_ifinfomsg): Use it.
+
+2017-08-28  Dmitry V. Levin  <ldv@altlinux.org>
+	    Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Imply RVAL_DECODED when RVAL_IOCTL_PARSED is returned on entering.
+	Also, rename RVAL_IOCTL_PARSED to RVAL_IOCTL_DECODED as the latter
+	is a more suitable name.
+
+	* defs.h (RVAL_IOCTL_PARSED): Rename to RVAL_IOCTL_DECODED.
+	* ioctl.c (ioctl_decode): Update comment.
+	(SYS_FUNC(ioctl)): Replace RVAL_IOCTL_PARSED with RVAL_IOCTL_DECODED,
+	add convertation of RVAL_IOCTL_DECODED to RVAL_DECODED.
+	* block.c (block_ioctl): Replace RVAL_DECODED | RVAL_IOCTL_PARSED
+	with RVAL_IOCTL_DECODED on entering.  Replace RVAL_IOCTL_PARSED
+	with RVAL_IOCTL_DECODED on exiting.
+	* btrfs.c (btrfs_ioctl): Likewise.
+	* evdev.c: Likewise.
+	* file_ioctl.c: Likewise.
+	* fs_x_ioctl.c: Likewise.
+	* hdio.c: Likewise.
+	* loop.c: Likewise.
+	* mtd.c: Likewise.
+	* nsfs.c: Likewise.
+	* print_sg_req_info.c: Likewise.
+	* ptp.c: Likewise.
+	* rtc.c: Likewise.
+	* scsi.c: Likewise.
+	* sg_io_v3.c: Likewise.
+	* sg_io_v4.c: Likewise.
+	* sock.c: Likewise.
+	* term.c: Likewise.
+	* ubi.c: Likewise.
+	* userfaultfd.c: Likewise.
+	* dm.c (dm_known_ioctl): Return RVAL_IOCTL_DECODED on exiting and 0
+	on entering.  Replace RVAL_IOCTL_PARSED with RVAL_IOCTL_DECODED
+	on exiting.
+	* v4l2.c: Likewise.
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Replace return 1 ioctl sub-decoder hack with proper flag.
+	* defs.h (RVAL_IOCTL_PARSED): Introduce new flag for ioctl sub-decoders
+	* to signalise that they have successfully printed argument.
+	* ioctl.c (SYS_FUNC(ioctl)): Check for RVAL_IOCTL_PARSED flag, remove
+	un-set it before returning the value.
+	* block.c: Use RVAL_IOCTL_PARSED instead of 1.
+	* btrfs.c: Likewise.
+	* dm.c: Likewise.
+	* evdev.c: Likewise.
+	* file_ioctl.c: Likewise.
+	* fs_x_ioctl.c: Likewise.
+	* hdio.c: Likewise.
+	* loop.c: Likewise.
+	* mtd.c: Likewise.
+	* nsfs.c: Likewise.
+	* print_sg_req_info.c: Likewise.
+	* ptp.c: Likewise.
+	* rtc.c: Likewise.
+	* scsi.c: Likewise.
+	* sg_io_v3.c: Likewise.
+	* sg_io_v4.c: Likewise.
+	* sock.c: Likewise.
+	* term.c: Likewise.
+	* ubi.c: Likewise.
+	* userfaultfd.c: Likewise.
+	* v4l2.c: Likewise.
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	v4l2: streamline logic.
+	Move exiting path out of if (entering(tcp)) { ... return 0; } else,
+	provide common exit point in v4l2_ioctl handler, use break instead of
+	return in specific command handlers.
+
+	* v4l2.c (print_v4l2_format, print_v4l2_buffer, print_v4l2_standard,
+	print_v4l2_input, print_v4l2_frmivalenum): Move exiting path out of else
+	par of the entering(tcp) condition.
+	(v4l2_ioctl): Add return RVAL_DECODED | 1 at the end of function.
+	(v4l2_ioctl) <case VIDIOC_S_STD, case VIDIOC_S_INPUT>: Replace return
+	with break.
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	v4l2: reorder field printing in order to avoid auxstr usage.
+	Also rework flow a little in order to reduce amount of indentation.
+
+	* v4l2.c (print_v4l2_requestbuffers): Print count as the last field on
+	entering, append it with updated value on exiting.
+	* tests/ioctl_v4l2.c: Update expected output.
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	userfaultfd: streamline logic.
+	Make userfaultfd ioctl handling more in line with other ioctl decoders.
+
+	* userfaultfd.c (uffdio_ioctl): Return RVAL_DECODED | 1, break instead
+	of returning in specific command handlers, return 0 on entering paths,
+	move exiting paths out of else branch of entering(tcp) condition.
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Do not return RVAL_DECODED on exiting path of ioctl decoders.
+	* print_sg_req_info.c (decode_sg_req_info): Return 1 instead of
+	RVAL_DECODED | 1 on exiting path.
+	* scsi.c (decode_sg_scsi_id): Likewise.
+	* sg_io_v3.c (decode_response): Likewise.
+	* sg_io_v4.c (decode_response): Likewise.
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	dm: return RVAL_DECODED instead of 0 if we can't decode command.
+	Return RVAL_DECODED if we can't decode command in order to avoid being
+	called on exiting.
+
+	* dm.c (dm_ioctl): Return RVAL_DECODED instead of 0 if command can't be
+	decoded.
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+	    Dmitry V. Levin  <ldv@altlinux.org>
+
+	Return 0 instead of 1 on entering path of ioctl decoders.
+	As returning 1 (without RVAL_DECODED) on entering makes no sense.
+
+	* block.c (block_ioctl) <case BLKTRACESETUP>: Replace return 1 with
+	return 0 on entering path.
+	* ptp.c (ptp_ioctl) <case PTP_SYS_OFFSET>: Likewise.
+	* sg_io_v3.c (decode_request): Likewise.
+	* sg_io_v4.c (decode_request): Likewise.
+	* sock.c (decode)ifconf, sock_ioctl) <case SIOCGIFMAP>: Likewise.
+	* ubi.c (ubi_ioctl) <case UBI_IOCMKVOL, case UBI_IOCATT>: Likewise.
+	* v4l2.c (print_v4l2_ext_controls): Likewise.
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	ioctl: simplify ioctl_decode handling, document its return value semantics
+	* ioctl.s (SYS_FUNC(ioctl.c)): Unconditionally unset 1, simply print arg
+	when (ret & RVAL_DECODED) && !(ret & 1).
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+	    Dmitry V. Levin  <ldv@altlinux.org>
+
+	syscall.c: define personality names for all multi-personality architectures
+	I see no reason for not having these definitions for SPARC64 and RISC-V.
+	Also, borrow the check template from supported_personalities.h.
+
+	* syscall.c (update_personality) [defined RISCV, defined SPARC64]
+	<PERSONALITY_NAMES>: Define it for these architectures.
+
+2017-08-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	copyright-year-gen: workaround for old git versions.
+	Apply the same treatment to this script as the one in
+	v4.18-278-g295cf32.
+
+	* copyright-year-gen <year>: Change format to format:%cD, remove --date,
+	supply output as a -d option argument to date +%Y.
+
+2017-08-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	ubi: trim overly long lines.
+
+	term: use print_quoted_string.
+	* term.c (decode_termios): Use print_quoted_string for printing c_cc field
+	instead of writing the printing code by hand.
+
+2017-08-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	update_copyright_years.sh: workaround for old git versions.
+	Old git versions (like the one shipped in Debian 8) do not support setting
+	date format with --date, working this around by processing git log output
+	with date +%Y.
+
+	* main/update_copyright_years.sh (process_file) <first_commit_year,
+	last_commit_year>: Change format to format:%aD, remove --date, supply
+	output as a -d option argument to date +%Y.
+
+2017-08-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	syscall: use spaces in tile personality names, de-duplicate definition.
+	As Chris Metcalf, the author of v4.7-40-g0b99a8a, told in private, there
+	is no strong reason for having tile's personality name different from
+	personality names on other architectures, so let's use spaces instead of
+	dashes here. And, while we are here, remove duplication of personality
+	name definitions for various architectures.
+
+	* syscall.c (update_personality) [defined TILE]: Change dashes to spaces
+	in personality names.
+
+2017-08-26  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: check decoding of rtmsg netlink attributes.
+	* tests/nlattr_rtmsg.c: Include <netinet/in.h> and <arpa/inet.h>.
+	(LWTUNNEL_ENCAP_NONE, RTA_ENCAP_TYPE): New macros.
+	(main): Check decoding of RTA_DST, RTA_OIF, RTA_METRICS, RTA_MULTIPATH,
+	RTA_CACHEINFO, RTA_MFC_STATS, RTA_VIA, and RTA_ENCAP_TYPE.
+
+	rtnl_route: decode rtmsg netlink attributes.
+	* configure.ac (AC_CHECK_TYPES): Check for
+	rta_mfc_stats and rtvia structures in <linux/rtnetlink.h>.
+	* nlattr.c (decode_nla_ifindex): New function.
+	* nlattr.h (decode_nla_ifindex): New prototype.
+	* rtnl_route.c (decode_route_addr, decode_rta_metrics,
+	decode_rta_multipath, decode_rta_cacheinfo,
+	decode_rta_mfc_stats, decode_rtvia,
+	decode_rta_encap_type): New functions.
+	(rta_metrics_nla_decoders, rtmsg_nla_decoders): New arrays.
+	(decode_rtmsg): Use rtmsg_nla_decoders.
+	* xlat/lwtunnel_encap_types.in: New file.
+	* xlat/route_nexthop_flags.in: Likewise.
+	* xlat/rtnl_rta_metrics_attrs.in: Likewise.
+
+2017-08-25  Dmitry V. Levin  <ldv@altlinux.org>
+
+	s390: wire up s390_guarded_storage syscall.
+	* linux/s390/syscallent.h [378]: Add s390_guarded_storage entry.
+	* linux/s390x/syscallent.h: Likewise.
+
+	microblaze: wire up statx syscall.
+	* linux/microblaze/syscallent.h [398]: Add statx entry.
+
+2017-08-24  Dmitry V. Levin  <ldv@altlinux.org>
+
+	alloc_number_set_array: add ATTRIBUTE_MALLOC.
+	* number_set.h: Include "gcc_compat.h".
+	(alloc_number_set_array): Add ATTRIBUTE_MALLOC.
+
+2017-08-24  Nikolay Marchuk  <marchuk.nikolay.a@gmail.com>
+
+	Add macros for testing QUAL_* flags.
+	* defs.h (traced, raw, inject): Add macros for testing QUAL_TRACE,
+	QUAL_RAW, and QUAL_INJECT flags.
+	* syscall.c (syscall_entering_trace, syscall_exiting_trace): Use them.
+
+2017-08-24  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Remove QUAL_SIGNAL, QUAL_READ and QUAL_WRITE.
+	Remove these flags that are unused since commit v4.15~26.
+	They might be introduced later with a different meaning.
+
+	* defs.h (QUAL_SIGNAL, QUAL_READ, QUAL_WRITE): Remove.
+
+2017-08-24  Eugene Syromiatnikov  <evgsyr@gmail.com>
+
+	xstrdup, xtrndup: allow NULL argument.
+	Accept NULL argument in xstrdup and xtrndup functions to allow use
+	of "xstrdup(str)" instead of "str ? xstrdup(str) : NULL".
+
+	* xmalloc.c (xstrdup, xstrndup): Handle NULL argument.
+	* xmalloc.h: Add comment regarding this deviation from the behaviour
+	of the POSIX counterparts of these functions.
+
+2017-08-23  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: really skip mips o32 scno tampering tests on mips n64.
+	* tests/is_linux_mips_n64.c: New file.
+	* tests/Makefile.am (check_PROGRAMS): Add it.
+	* tests/scno_tampering.sh <$STRACE_ARCH == mips>:
+	In case of mips o32 abi, skip the test if is_linux_mips_n64 says
+	that the kernel is mips n64, even if "uname -m" claims it's mips.
+
+2017-08-22  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Hide struct number_set implementation details from users.
+	* number_set.h (number_slot_t, struct number_set): Move to number_set.c.
+	(struct number_set): Add forward declaration.
+	(read_set, write_set, signal_set): Change prototypes from objects
+	to pointers.
+	* filter_qualify.c (read_set, write_set, signal_set): Change definitions
+	from objects to pointers.
+	(abbrev_set, inject_set, raw_set, trace_set, verbose_set): Change
+	definitions from arrays to pointers.
+	(qualify_read): Initialize read_set before first use.
+	(qualify_write): Initialize write_set before first use.
+	(qualify_signals): Initialize signal_set before first use.
+	(qualify_trace): Initialize trace_set before first use.
+	(qualify_abbrev): Initialize abbrev_set before first use.
+	(qualify_verbose): Initialize verbose_set before first use.
+	(qualify_raw): Initialize raw_set before first use.
+	(qualify_inject_common): Initialize inject_set before first use.
+	* strace.c (print_signalled, print_stopped): Update signal_set usage.
+	* syscall.c (dumpio): Update usage of read_set and write_set.
+
+	Extend number_set interface.
+	* number_set.h (number_set_array_is_empty, is_number_in_set_array,
+	add_number_to_set_array, clear_number_set_array,
+	invert_number_set_array, alloc_number_set_array, free_number_set_array):
+	New function prototypes.
+	* number_set.c (number_set_array_is_empty, is_number_in_set_array,
+	add_number_to_set_array, clear_number_set_array,
+	invert_number_set_array, alloc_number_set_array, free_number_set_array):
+	New functions.
+	* basic_filters.c (qualify_syscall_number, qualify_syscall_regex,
+	qualify_syscall_class, qualify_syscall_name): Use
+	add_number_to_set_array.
+	(qualify_syscall_tokens, qualify_tokens): Use
+	clear_number_set_array and invert_number_set_array.
+	* filter_qualify.c (qualify_inject_common): Use alloc_number_set_array,
+	number_set_array_is_empty, is_number_in_set_array,
+	add_number_to_set_array, and free_number_set_array.
+	(qual_flags): Use is_number_in_set_array.
+
+	Move number_set interface to separate files.
+	* number_set.c: New file.
+	* number_set.h: Likewise.
+	* Makefile.am (strace_SOURCES): Add them.
+	* basic_filters.c: Include "number_set.h".
+	(number_slot_t, struct number_set): Move to number_set.h.
+	(BITS_PER_SLOT, number_setbit, number_isset, reallocate_number_set,
+	add_number_to_set, is_number_in_set): Move to number_set.c.
+	* defs.h (struct number_set): Remove forward declaration.
+	(read_set, write_set, signal_set, is_number_in_set): Move to number_set.h.
+	* filter.h (add_number_to_set): Move to number_set.h.
+	* filter_qualify.c: Include "number_set.h".
+	(number_slot_t, struct number_set): Remove.
+	* strace.c: Include "number_set.h".
+	* syscall.c: Likewise.
+
+2017-08-22  Edgar Kaziakhmedov  <edgar.kaziakhmedov@virtuozzo.com>
+
+	Move SUPPORTED_PERSONALITIES to a separate file.
+	Since the defs.h contains unrelated declarations which are
+	redundant (and sometimes conflicting) for other binaries included
+	in the strace package, move SUPPORTED_PERSONALITIES defintions
+	to a separate file.
+
+	* defs.h: Include "supported_personalities.h".
+	(SUPPORTED_PERSONALITIES): Move ...
+	* supported_personalities.h: ... to the new file.
+	* Makefile.am (strace_SOURCES): Add it.
+
+2017-08-22  Edgar Kaziakhmedov  <edgar.kaziakhmedov@virtuozzo.com>
+
+	Move string_to_uint* functions to a separate file.
+	Make string_to_uint* functions available to other binaries
+	included in the strace package.
+
+	* string_to_uint.h: New file.
+	* defs.h: Include it.
+	(string_to_uint_ex, string_to_uint_upto, string_to_uint): Move
+	to string_to_uint.h.
+	* util.c (string_to_uint_ex, string_to_uint): Move ...
+	* string_to_uint.c: ... to the new file.
+	* Makefile.am (strace_SOURCES): Add string_to_uint.h and string_to_uint.c.
+
+2017-08-22  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of ifaddrmsg netlink attributes.
+	* tests/nlattr_ifaddrmsg.c: Include <arpa/inet.h>.
+	(IFA_FLAGS, SET_IFA_FAMILY): New macros.
+	(init_ifaddrmsg): Set ifaddrmsg.ifa_family field from ifa_family.
+	(print_ifaddrmsg): Print ifaddrmsg.ifa_family field using ifa_family_str.
+	(main): Check decoding of IFA_ADDRESS, IFA_CACHEINFO, and IFA_FLAGS.
+
+	rtnl_addr: decode ifaddrmsg netlink attributes.
+	* rtnl_addr.c (decode_ifa_address,
+	decode_ifa_cacheinfo, decode_ifa_flags): New functions.
+	(ifaddrmsg_nla_decoders): New array.
+	(decode_ifaddrmsg): Use it.
+
+2017-08-22  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Export decode_inet_addr.
+	* defs.h (decode_inet_addr): New prototype.
+	* netlink_inet_diag.c (decode_inet_addr): Remove static keyword, move ...
+	* sockaddr.c: ... here.
+
+	netlink_inet_diag: prepare decode_inet_addr for export.
+	* netlink_inet_diag.c (decode_inet_addr): Change return type to bool,
+	parametrize field name using new var_name argument.
+	(decode_inet_diag_hostcond): Specify "addr" field name
+	to decode_inet_addr.
+
+2017-08-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+	print_inet_addr: add support of invocations without field name.
+	Prepare print_inet_addr for use in structureless contexts where
+	no structure field name is available.
+
+	* sockaddr.c (print_inet_addr): Handle var_name == NULL.
+
+2017-08-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	print_inet_addr: print address of unsupported family in hex.
+	* sockaddr.c (print_inet_addr): Specify QUOTE_FORCE_HEX
+	to print_quoted_string.
+
+2017-08-18  Dmitry V. Levin  <ldv@altlinux.org>
+
+	mips o32: do not bail out in get_syscall_args if umoven fails.
+	If the kernel contains commit 84d77d3f06e7e8dea057d10e8ec77ad71f721be3,
+	both PTRACE_PEEKDATA and process_vm_readv become unavailable when the
+	process dumpable flag is cleared.  As the first 4 syscall arguments are
+	still available via registers, do not treat this as get_syscall_args
+	error.
+
+	This condition is triggered and therefore tested by prctl-dumpable test.
+
+	* linux/mips/get_syscall_args.c (get_syscall_args) [LINUX_MIPSO32]:
+	Do not bail out if umoven fails.
+
+2017-08-17  Dmitry V. Levin  <ldv@altlinux.org>
+
+	configure: cleanup struct statfs/statfs64 member checks.
+	* configure.ac <AC_CHECK_TYPES([struct statfs])>: Merge several
+	AC_CHECK_MEMBERS checks of struct statfs members into a single check.
+	<AC_CHECK_TYPES([struct statfs64])>: Likewise, for checks
+	of struct statfs64 members.
+
+2017-08-16  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: fix a few harmless -Woverflow compilation warnings.
+	Fix the following compilation warnings on platforms where
+	sizeof(struct timeval.tv_usec) < sizeof(long):
+
+	xettimeofday.c: In function ‘main’:
+	xettimeofday.c:76:16: warning: overflow in implicit constant conversion [-Woverflow]
+	  tv->tv_usec = (long) 0xbadc0dedfacefeedLL;
+	xetitimer.c: In function ‘main’:
+	xetitimer.c:170:28: warning: overflow in implicit constant conversion [-Woverflow]
+	  p_new->it_value.tv_usec = (long) 0xbadc0dedfacefeedLL;
+	In file included from utimes.c:38:0:
+	xutimes.c: In function ‘main’:
+	xutimes.c:110:18: warning: overflow in implicit constant conversion [-Woverflow]
+	  tv[1].tv_usec = (long) 0xbadc0dedfacefeedLL;
+	futimesat.c: In function ‘main’:
+	futimesat.c:121:18: warning: overflow in implicit constant conversion [-Woverflow]
+	  tv[1].tv_usec = (long) 0xbadc0dedfacefeedLL;
+	In file included from _newselect.c:35:0:
+	xselect.c: In function ‘main’:
+	xselect.c:94:16: warning: overflow in implicit constant conversion [-Woverflow]
+	  tv->tv_usec = (long) 0xbadc0dedfacefeedLL;
+	                ^
+	* tests/futimesat.c (main): In initialization of struct timeval.tv_usec,
+	change explicit cast from (long) to (suseconds_t).
+	* tests/xetitimer.c: Likewise.
+	* tests/xettimeofday.c: Likewise.
+	* tests/xselect.c: Likewise.
+	* tests/xutimes.c: Likewise.
+
+	Reported-by: Anatoly Pugachev <matorola@gmail.com>
+
+2017-08-16  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: fix sigaction.test on sparc.
+	On sparc, the first argument of old sigaction syscall has negated
+	semantics, compared to other architectures.  While sigaction.test
+	was aware about this arch-specific detail from the beginning, in one
+	of many sigaction syscall invocations a non-negative signal number
+	was erroneously passed on sparc.
+
+	* tests/sigaction.c (ADDR_INT, SIGNO_INT): New arch-specific macros.
+	(signo, addr): Use them.
+
+2017-08-16  Dmitry V. Levin  <ldv@altlinux.org>
+
+	nlattr: fix printing of unrecognized attribute data.
+	Do not print more than "nlattr.nla_len - NLA_HDRLEN" bytes
+	of unrecognized attribute data.
+
+	* nlattr.c (decode_nlattr_with_data): Specify "nla_len - NLA_HDRLEN"
+	instead of "len - NLA_HDRLEN" as the size of unrecognized attribute
+	data.
+	* tests/nlattr.c (test_nlattr): Check it.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE rtgenmsg attributes.
+	* tests/nlattr_rtgenmsg.c: New file.
+	* tests/gen_tests.in (nlattr_rtgenmsg): New entry.
+	* tests/pure_executables.list: Add nlattr_rtgenmsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE rtgenmsg attributes.
+	* rtnl_nsid.c: Include "nlattr.h" and "xlat/rtnl_nsid_attrs.h".
+	(decode_rtgenmsg): Call decode_nlattr.
+	* xlat/rtnl_nsid_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE br_port_msg attributes.
+	* tests/nlattr_br_port_msg.c: New file.
+	* tests/gen_tests.in (nlattr_br_port_msg): New entry.
+	* tests/pure_executables.list: Add nlattr_br_port_msg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE br_port_msg attributes.
+	* rtnl_mdb.c: Include "netlink.h", "nlattr.h".
+	and "xlat/rtnl_mdb_attrs.h".
+	(decode_br_port_msg): Call decode_nlattr.
+	* xlat/rtnl_mdb_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE netconfmsg attributes.
+	* tests/nlattr_netconfmsg.c: New file.
+	* tests/gen_tests.in (nlattr_netconfmsg): New entry.
+	* tests/pure_executables.list: Add nlattr_netconfmsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE netconfmsg attributes.
+	* rtnl_netconf.c: Include "netlink.h", "nlattr.h",
+	and "xlat/rtnl_netconf_attrs.h".
+	(decode_netconfmsg): Call decode_nlattr.
+	* xlat/rtnl_netconf_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE dcbmsg attributes.
+	* tests/nlattr_dcbmsg.c: New file.
+	* tests/gen_tests.in (nlattr_dcbmsg): New entry.
+	* tests/pure_executables.list: Add nlattr_dcbmsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE dcbmsg attributes.
+	* rtnl_dcb.c: Include "netlink.h", "nlattr.h",
+	and "xlat/rtnl_dcb_attrs.h".
+	(decode_dcbmsg): Call decode_nlattr.
+	* xlat/rtnl_dcb_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE ifaddrlblmsg attributes.
+	* tests/nlattr_ifaddrlblmsg.c: New file.
+	* tests/gen_tests.in (nlattr_ifaddrlblmsg): New entry.
+	* tests/pure_executables.list: Add nlattr_ifaddrlblmsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE ifaddrlblmsg attributes.
+	* rtnl_addrlabel.c: Include "netlink.h", "nlattr.h",
+	and "xlat/rtnl_addrlabel_attrs.h".
+	(decode_ifaddrlblmsg): Call decode_nlattr.
+	* xlat/rtnl_addrlabel_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE tcamsg attributes.
+	* tests/nlattr_tcamsg.c: New file.
+	* tests/gen_tests.in (nlattr_tcamsg): New entry.
+	* tests/pure_executables.list: Add nlattr_tcamsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE tcamsg attributes.
+	* rtnl_tc_action.c: Include "nlattr.h" and "xlat/rtnl_tc_action_attrs.h".
+	(decode_tcamsg): Call decode_nlattr.
+	* xlat/rtnl_tc_action_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE tcmsg attributes.
+	* tests/nlattr_tcmsg.c: New file.
+	* tests/gen_tests.in (nlattr_tcmsg): New entry.
+	* tests/pure_executables.list: Add nlattr_tcmsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE tcmsg attributes.
+	* rtnl_tc.c: Include "nlattr.h" and "xlat/rtnl_tc_attrs.h".
+	(decode_tcmsg): Call decode_nlattr.
+	* xlat/rtnl_tc_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE ndtmsg attributes.
+	* tests/nlattr_ndtmsg.c: New file.
+	* tests/gen_tests.in (nlattr_ndtmsg): New entry.
+	* tests/pure_executables.list: Add nlattr_ndtmsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE ndtmsg attributes.
+	* rtnl_neightbl.c: Include "nlattr.h" and "xlat/rtnl_neightbl_attrs.h".
+	(decode_ndtmsg): Call decode_nlattr.
+	* xlat/rtnl_neightbl_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE ndmsg attributes.
+	* tests/nlattr_ndmsg.c: New file.
+	* tests/gen_tests.in (nlattr_ndmsg): New entry.
+	* tests/pure_executables.list: Add nlattr_ndmsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE ndmsg attributes.
+	* rtnl_neigh.c: Include "nlattr.h" and "xlat/rtnl_neigh_attrs.h".
+	(decode_ndmsg): Call decode_nlattr.
+	* xlat/rtnl_neigh_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE fib_rule_hdr attributes.
+	* tests/nlattr_fib_rule_hdr.c: New file.
+	* tests/gen_tests.in (nlattr_fib_rule_hdr): New entry.
+	* tests/pure_executables.list: Add nlattr_fib_rule_hdr.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE fib_rule_hdr attributes.
+	* rtnl_rule.c: Include "nlattr.h" and "xlat/rtnl_rule_attrs.h".
+	(decode_fib_rule_hdr): Call decode_nlattr.
+	* xlat/rtnl_rule_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE rtmsg attributes.
+	* tests/nlattr_rtmsg.c: New file.
+	* tests/gen_tests.in (nlattr_rtmsg): New entry.
+	* tests/pure_executables.list: Add nlattr_rtmsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE rtmsg attributes.
+	* rtnl_route.c: Include "nlattr.h" and "xlat/rtnl_route_attrs.h".
+	(decode_rtmsg): Call decode_nlattr.
+	* xlat/rtnl_route_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE ifaddrmsg attributes.
+	* tests/nlattr_ifaddrmsg.c: New file.
+	* tests/gen_tests.in (nlattr_ifaddrmsg): New entry.
+	* tests/pure_executables.list: Add nlattr_ifaddrmsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE ifaddrmsg attributes.
+	* rtnl_addr.c: Include "nlattr.h" and "xlat/rtnl_addr_attrs.h".
+	(decode_ifaddrmsg): Call decode_nlattr.
+	* xlat/rtnl_addr_attrs.in: New file.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_ROUTE ifinfomsg attributes.
+	* tests/nlattr_ifinfomsg.c: New file.
+	* tests/gen_tests.in (nlattr_ifinfomsg): New entry.
+	* tests/pure_executables.list: Add nlattr_ifinfomsg.
+	* tests/.gitignore: Likewise.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add basic decoding of NETLINK_ROUTE ifinfomsg attributes.
+	* rtnl_link.c: Include "nlattr.h" and "xlat/rtnl_link_attrs.h".
+	(decode_ifinfomsg): Call decode_nlattr.
+	* xlat/rtnl_link_attrs.in: New file.
+
+2017-08-15  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests/test_nlattr.h: include <stdint.h>
+	* tests/test_nlattr.h: Include <stdint.h> for definition of uint16_t
+	used by init_nlattr.
+
+	tests: use ifindex_lo and IFINDEX_LO_STR.
+	* tests/netlink_route.c: Do not check for HAVE_IF_INDEXTONAME.
+	(if_nametoindex, IFINDEX_LO): Remove.
+	(test_rtnl_link, test_rtnl_addr, test_rtnl_neigh, test_rtnl_tc,
+	test_rtnl_addrlabel, test_rtnl_mdb): Use ifindex_lo instead
+	of if_nametoindex, use IFINDEX_LO_STR instead of hardcoded string.
+	* tests/netlink_sock_diag.c: Do not check for HAVE_IF_INDEXTONAME.
+	(if_nametoindex, IFINDEX_LO): Remove.
+	(test_inet_diag_sockid, test_inet_diag_req, test_inet_diag_req_v2,
+	test_inet_diag_msg, test_smc_diag_req): Use ifindex_lo instead
+	of if_nametoindex, use IFINDEX_LO_STR instead of hardcoded string.
+	* tests/nlattr_inet_diag_msg.c: Do not check for HAVE_IF_INDEXTONAME.
+	(if_nametoindex, IFINDEX_LO): Remove.
+	(init_inet_diag_msg): Use ifindex_lo instead of if_nametoindex.
+	(print_inet_diag_msg): Use IFINDEX_LO_STR instead of hardcoded string.
+	* tests/nlattr_inet_diag_req_compat.c: Do not check
+	for HAVE_IF_INDEXTONAME.
+	(if_nametoindex, IFINDEX_LO): Remove.
+	(init_inet_diag_req): Use ifindex_lo instead of if_nametoindex.
+	(print_inet_diag_req): Use IFINDEX_LO_STR instead of hardcoded string.
+	* tests/nlattr_inet_diag_req_v2.c: Do not check for HAVE_IF_INDEXTONAME.
+	(if_nametoindex, IFINDEX_LO): Remove.
+	(init_inet_diag_req_v2, print_inet_diag_req_v2,
+	test_inet_diag_bc_dev_cond): Use ifindex_lo instead of if_nametoindex,
+	use IFINDEX_LO_STR instead of hardcoded string.
+	* tests/nlattr_packet_diag_msg.c: Do not check for HAVE_IF_INDEXTONAME.
+	(if_nametoindex, IFINDEX_LO): Remove.
+	(main): Use ifindex_lo instead of if_nametoindex.
+	(print_packet_diag_mclist): Use IFINDEX_LO_STR instead of hardcoded
+	string.
+
+	tests/net-sockaddr: use ifindex_lo and IFINDEX_LO_STR.
+	* tests/net-sockaddr.c (if_nametoindex): Remove declaration.
+	(check_in6_linklocal, check_ll): Remove HAVE_IF_INDEXTONAME checks,
+	Use ifindex_lo instead of if_nametoindex, use IFINDEX_LO_STR instead
+	of hardcoded string.
+
+	tests/msg_control: use ifindex_lo and IFINDEX_LO_STR.
+	* tests/msg_control.c (test_ip_pktinfo): Use ifindex_lo instead
+	of if_nametoindex, use IFINDEX_LO_STR instead of hardcoded string.
+
+	tests/inet-cmsg: use IFINDEX_LO_STR.
+	* tests/inet-cmsg.c (print_pktinfo): Use IFINDEX_LO_STR instead
+	of hardcoded string.
+
+	tests/ip_mreq: use ifindex_lo and IFINDEX_LO_STR.
+	* tests/ip_mreq.c: Do not check for HAVE_IF_INDEXTONAME.
+	(main): Use ifindex_lo instead of if_nametoindex, use IFINDEX_LO_STR
+	instead of hardcoded string.
+
+	tests/group_req: use ifindex_lo and IFINDEX_LO_STR.
+	* tests/group_req.c: Do not check for HAVE_IF_INDEXTONAME.
+	(main): Use ifindex_lo instead of if_nametoindex, use IFINDEX_LO_STR
+	instead of hardcoded string.
+
+	tests: add ifindex_lo function and IFINDEX_LO_STR macro to libtests.
+	* tests/ifindex.c: New file.
+	* tests/Makefile.am (libtests_a_SOURCES): Add it.
+	* tests/tests.h (ifindex_lo): New prototype.
+	(IFINDEX_LO_STR): New macro.
+
+2017-08-15  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	configure.ac: remove redundant linux/dcbnl.h header check.
+	* configure.ac (AC_CHECK_HEADERS): Remove linux/dcbnl.h.
+	* rtnl_dcb.c: Replace HAVE_LINUX_DCBNL_H with HAVE_STRUCT_DCBMSG.
+	* tests/netlink_route.c: Likewise.
+
+2017-08-14  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	pathtrace: fix typo in comment.
+
+	pathtrace: limit amount of checked poll fds similarly to select limit.
+	* pathtrace.c (pathtrace_match_set): Limit the maximum descriptor number
+	checked for fd match in poll family syscalls to 1024 * 1024.
+
+	pathtrace: fail poll path match on first failed umove.
+	* pathtrace.c (pathtrace_match_set): When checking descriptors of poll
+	family syscalls for fd match, break the loop on first failed umove call.
+
+2017-08-14  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	Update NEWS.
+
+2017-08-14  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	tests: check decoding of rtnetlink nsid messages.
+	* tests/netlink_route.c (test_rtnl_nsid): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of nsid messages.
+	* rtnl_nsid.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_rtgenmsg): New prototype.
+	* netlink_route.c (route_decoders): Add RTM_DELNSID, RTM_GETNSID,
+	and RTM_NEWNSID.
+
+	tests: check decoding of rtnetlink mdb messages.
+	* tests/netlink_route.c: Include <netinet/in.h>
+	and <linux/if_bridge.h>.
+	(test_rtnl_mdb): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of mdb messages.
+	* rtnl_mdb.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_br_port_msg): New prototype.
+	* configure.ac (AC_CHECK_TYPES): Check for struct br_port_msg
+	in <linux/if_bridge.h>.
+	* netlink_route.c (route_decoders): Add RTM_DELMDB, RTM_GETMDB,
+	and RTM_NEWMDB.
+
+	tests: check decoding of rtnetlink netconf messages.
+	* tests/netlink_route.c: Include <linux/netconf.h>.
+	(test_rtnl_netconf): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of netconf messages.
+	* rtnl_netconf.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_netconfmsg): New prototype.
+	* configure.ac (AC_CHECK_TYPES): Check for struct netconfmsg
+	in <linux/netconf.h>.
+	* netlink_route.c (route_decoders): Add RTM_GETNETCONF
+	and RTM_NEWNETCONF.
+
+	tests: check decoding of rtnetlink dcb messages.
+	* tests/netlink_route.c: Include <linux/dcbnl.h>.
+	(test_rtnl_dcb): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of dcb messages.
+	* rtnl_dcb.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_dcbmsg): New prototype.
+	* configure.ac (AC_CHECK_HEADERS): Add linux/dcbnl.h.
+	(AC_CHECK_TYPES): Check for struct dcbmsg in <linux/dcbnl.h>.
+	* netlink_route.c (route_decoders): Add RTM_GETDCB and RTM_SETDCB.
+	* xlat/dcb_commands.in: New file.
+
+	tests: check decoding of rtnetlink addrlabel messages.
+	* tests/netlink_route.c: Include <linux/if_addrlabel.h>.
+	(test_rtnl_addrlabel): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of addrlabel messages.
+	* rtnl_addrlabel.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_ifaddrlblmsg): New prototype.
+	* configure.ac (AC_CHECK_TYPES): Check for struct ifaddrlblmsg
+	in <linux/if_addrlabel.h>.
+	* netlink_route.c (route_decoders): Add RTM_DELADDRLABEL,
+	RTM_GETADDRLABEL, and RTM_NEWADDRLABEL.
+
+	tests: check decoding of rtnetlink tc action messages.
+	* tests/netlink_route.c (test_rtnl_tca): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of tc action messages.
+	* rtnl_tc_action.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_tcamsg): New prototype.
+	* netlink_route.c (route_decoders): Add RTM_DELACTION, RTM_GETACTION,
+	and RTM_NEWACTION.
+
+	tests: check decoding of rtnetlink tc messages.
+	* tests/netlink_route.c (test_rtnl_tc): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of tc messages.
+	* rtnl_tc.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_tcmsg): New prototype.
+	* netlink_route.c (route_decoders): Add RTM_DELQDISC,
+	RTM_GETQDISC, RTM_NEWQDISC, RTM_DELTCLASS, RTM_GETTCLASS,
+	RTM_NEWTCLASS, RTM_DELTFILTER, RTM_GETTFILTER, and RTM_NEWTFILTER.
+
+	tests: check decoding of rtnetlink neightbl messages.
+	* tests/netlink_route.c (test_rtnl_neightbl): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of neightbl messages.
+	* rtnl_neightbl.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_ndtmsg): New prototype.
+	* netlink_route.c (route_decoders): Add RTM_GETNEIGHTBL,
+	RTM_NEWNEIGHTBL, and RTM_SETNEIGHTBL.
+
+	tests: check decoding of rtnetlink neigh messages.
+	* tests/netlink_route.c: Include <linux/neighbour.h>.
+	(test_rtnl_neigh): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of neigh messages.
+	* rtnl_neigh.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_ndmsg, decode_rtm_getneigh): New prototypes.
+	* configure.ac (AC_CHECK_HEADERS): Add linux/neighbour.h.
+	* netlink_route.c (route_decoders): Add RTM_DELNEIGH, RTM_DELNEIGH,
+	and RTM_NEWNEIGH.
+	* xlat/nda_types.in: New file.
+	* xlat/neighbor_cache_entry_flags.in: Likewise.
+	* xlat/neighbor_cache_entry_states.in: Likewise.
+
+	tests: check decoding of rtnetlink rule messages.
+	* tests/netlink_route.c: Include <linux/fib_rules.h>.
+	(test_rtnl_rule): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of rule messages.
+	* defs.h (routing_table_ids): New xlat prototype.
+	* rtnl_rule.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* defs.h (ip_type_of_services, routing_table_ids): New xlat prototypes.
+	* netlink_route.h (decode_fib_rule_hdr): New prototype.
+	* configure.ac (AC_CHECK_HEADERS): Add linux/fib_rules.h.
+	* netlink_route.c (route_decoders): Add RTM_DELRULE, RTM_GETRULE,
+	and RTM_NEWRULE.
+	* xlat/fib_rule_actions.in: New file.
+	* xlat/fib_rule_flags.in: Likewise.
+
+	tests: check decoding of rtnetlink route messages.
+	* tests/netlink_route.c: Include <linux/ip.h>.
+	(test_rtnl_route): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of route messages.
+	* defs.h (routing_scopes): New xlat prototype.
+	* rtnl_route.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* netlink_route.h (decode_rtmsg): New prototype.
+	* netlink_route.c (route_decoders): Add RTM_DELROUTE, RTM_GETROUTE,
+	and RTM_NEWROUTE.
+	* xlat/ip_type_of_services.in: New file.
+	* xlat/routing_flags.in: Likewise.
+	* xlat/routing_protocols.in: Likewise.
+	* xlat/routing_table_ids.in: Likewise.
+	* xlat/routing_types.in: Likewise.
+
+	tests: check decoding of rtnetlink addr messages.
+	* tests/netlink_route.c: Include <linux/if_addr.h>.
+	(test_rtnl_addr): New function.
+	(main): Use it.
+
+2017-08-13  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	netlink: add a basic rtnetlink parser of addr messages.
+	* rtnl_addr.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* configure.ac (AC_CHECK_HEADERS): Add linux/if_addr.h.
+	* netlink_route.h (decode_ifaddrmsg): New prototype.
+	* netlink_route.c (route_decoders): Add RTM_DELADDR,
+	RTM_GETADDR, RTM_GETANYCAST, RTM_GETMULTICAST, and RTM_NEWADDR.
+	* xlat/ifaddrflags.in: New file.
+	* xlat/routing_scopes.in: Likewise.
+
+2017-08-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Make description of discrepancies between libc and kernel APIs more relevant
+	Looks like this part was untouched since the days strace supported OSes
+	other than Linux. Well, it's time to make it more contemporary.
+
+	* strace.1.in (.SH NOTES): Use faccessat(2) and setrlimit(2)/prlimit(2)
+	instead of time(2) and stat(2)/xstat(2) as examples of libc/kernel API
+	discrepancies.
+
+2017-08-11  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NLMSG_DONE messages of NETLINK_ROUTE.
+	* tests/netlink_route.c (test_nlmsg_done): New function.
+	(main): Use it.
+
+2017-08-11  Nikolay Marchuk  <marchuk.nikolay.a@gmail.com>
+
+	Add TF flag to inotify_add_watch syscall entries.
+	The second argument of the inotify_add_watch syscall is a file name,
+	but inotify_add_watch has no TF flag set.
+
+	* linux/32/syscallent.h (inotify_add_watch): Add TF flag.
+	* linux/64/syscallent.h: Likewise.
+	* linux/alpha/syscallent.h: Likewise.
+	* linux/arm/syscallent.h: Likewise.
+	* linux/avr32/syscallent.h: Likewise.
+	* linux/bfin/syscallent.h: Likewise.
+	* linux/crisv10/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/i386/syscallent.h: Likewise.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/m68k/syscallent.h: Likewise.
+	* linux/microblaze/syscallent.h: Likewise.
+	* linux/mips/syscallent-n32.h: Likewise.
+	* linux/mips/syscallent-n64.h: Likewise.
+	* linux/mips/syscallent-o32.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/powerpc64/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+	* linux/x32/syscallent.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+	* linux/xtensa/syscallent.h: Likewise.
+
+2017-08-11  Nikolay Marchuk  <marchuk.nikolay.a@gmail.com>
+
+	pathtrace: fix matching of execveat syscall.
+	* pathtrace.c (pathtrace_match_set): Add testing of SEN_execveat.
+
+2017-08-10  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1: add indentation to examples.
+	* strace.1 (.de CW): Add .in +4n.
+	(.de CE): Add .in.
+
+	Generate date for the man page.
+	* Makefile.am (dist-hook): Add .strace.1.in.date generation.
+	* strace.spec.in (%setup): Likewise.
+	* configure.ac (manpage_date): New m4 define.
+	(MANPAGE_DATE): New define/subst.
+	* strace.1 (.TH): Add manpage date and strace's version.
+
+	Add script for generating date of the last commit for specific file.
+	* file-date-gen: New auxiliary script.
+
+	Make strace.1 generated.
+	* .gitignore (/strace.1): New entry.
+	* configure.ac (AC_CONFIG_FILES): Add strace.1.
+	* strace.1.in: Rename from strace.1.
+
+2017-08-10  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1: format synopsis using .SY/.OP macros.
+	Also, add .OM and .OR macros and use { ... | ... } syntax for indicating
+	possible options regarding mandatory arguments.
+
+	* strace.1 (.OM, .OR): New macro definitions, based on .OP
+	(.SH SYNOPSYS): Format using .SY/.OP/.OM/.OR. Put -p/command inside
+	{ ... | ... } block.
+
+2017-08-10  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1: remove date from .TH, as it is no longer relevant.
+	* strace.1 (.TH): Remove date.
+
+2017-08-10  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1: remove .IX definition.
+	It is present in groff macros nowadays.
+
+	* strace.1 (.de IX): Remove.
+
+2017-08-10  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1: replace .TP with .TQ between command-line option variants.
+	In order to eliminate unneeded space between them.
+
+	* strace.1 (Filtering): Replace .TP with .TQ between different variants
+	of the same option.
+
+2017-08-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	rtnl_link: include "netlink.h" before <linux/rtnetlink.h>
+	<sys/socket.h> has to be included before <linux/netlink.h> because
+	the latter used to be incomplete in older kernel headers.
+
+	As a local wrapper file called netlink.h was introduced earlier
+	to workaround this and related portability issues, include it before
+	<linux/rtnetlink.h> that in turn includes <linux/netlink.h>.
+
+	This fixes build on systems with older kernel headers.
+
+	* rtnl_link.c: Include "netlink.h" before <linux/rtnetlink.h>.
+
+2017-08-09  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	tests: check decoding of rtnetlink link messages.
+	* tests/netlink_route.c: Include <linux/if_arp.h>.
+	(TEST_NL_ROUTE): New macro.
+	(test_rtnl_link): New function.
+	(main): Use it.
+
+	netlink: add a basic rtnetlink parser of link messages.
+	* netlink_route.h: New file.
+	* rtnl_link.c: Likewise.
+	* Makefile.am (strace_SOURCES): Add them.
+	* defs.h (arp_hardware_types, iffflags): New xlat prototypes.
+	* netlink_route.c: Include "netlink_route.h"
+	and <linux/rtnetlink.h>.
+	(netlink_route_decoder_t): New typedef.
+	(route_decoders): New array.
+	(decode_netlink_route): Use it.
+
+2017-08-09  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	Move nl_route_types definition from netlink.c to netlink_route.c.
+	The side effect of #include "xlat/nl_route_types.h" is
+	RTM_* constants properly defined in that header file.
+	While netlink.c does not use these constants itself,
+	netlink_route.c is going to need them soon.
+
+	* defs.h (nl_route_types): New xlat prototype.
+	* netlink.c: Move inclusion of "xlat/nl_route_types.h" ...
+	* netlink_route.c: ... here.
+
+2017-08-09  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Fabien Siron  <fabien.siron@epita.fr>
+
+	tests: check netlink family specific decoder of NETLINK_ROUTE.
+	* tests/netlink_route.c: Include <stdint.h>,
+	include "test_netlink.h" instead of "netlink.h".
+	(test_rtnl_unspec): New function.
+	(main): Use it.
+
+	netlink: introduce family specific decoder of NETLINK_ROUTE.
+	* netlink_route.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* defs.h (decode_netlink_route): New prototype.
+	* netlink.c (netlink_decoders): Add NETLINK_ROUTE.
+
+2017-08-08  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: check decoding of NETLINK_KOBJECT_UEVENT messages.
+	* tests/netlink_kobject_uevent.c: New file.
+	* tests/gen_tests.in (netlink_kobject_uevent): New entry.
+	* tests/pure_executables.list: Add netlink_kobject_uevent.
+	* tests/.gitignore: Likewise.
+
+2017-08-08  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink: add decoding of NETLINK_KOBJECT_UEVENT messages.
+	* netlink.c (decode_netlink): Print NETLINK_KOBJECT_UEVENT messages
+	as a string using printstrn.
+
+2017-08-08  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink: call get_fd_nl_family before nlmsghdr decoding.
+	Prepare for decoding of NETLINK_KOBJECT_UEVENT.  Messages of the latter,
+	unlike traditional netlink families, don't contain a header at all.
+
+	* netlink.c (NL_FAMILY_*): Remove enum.
+	(get_fd_nl_family): Replace NL_FAMILY_ERROR with -1.
+	(decode_nlmsg_type): Update the comment.
+	Skip family specific type decoders for type < NLMSG_MIN_TYPE.
+	(decode_nlmsghdr_with_payload): Skip family specific decoders
+	for type < NLMSG_MIN_TYPE && type != NLMSG_DONE.
+	(print_nlmsghdr): Move get_fd_nl_family invocation ...
+	(decode_nlmsghdr_with_payload): ... here.
+
+2017-08-07  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Make sysent_shorthand_defs.h suitable for tests.
+	* sysent_shorthand_defs.h [STRACE_TESTS_H]: Add shorthand notations from
+	tests/ksysent.c and tests/nsyscalls.c.
+	* tests/ksysent.c: Remove shorthand notations.
+	* tests/nsyscalls.c: Likewise.
+
+2017-08-07  Edgar Kaziakhmedov  <edgar.kaziakhmedov@virtuozzo.com>
+
+	Move sysent shorthand notations to separate files.
+	Avoid proliferation of exactly the same definitions of shorthand
+	notations for macros defined in sysent.h by moving definitions
+	and undefs of these shorthand notations to separate files.
+
+	* sysent_shorthand_defs.h: New file.
+	* sysent_shorthand_undefs.h: Likewise.
+	* Makefile.am (strace_SOURCES): Add them.
+	* syscall.c: Use them.
+
+2017-08-07  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink.c: fix indentation.
+	* netlink.c (print_cookie): Fix indentation.
+
+2017-08-07  Edgar Kaziakhmedov  <edgar.kaziakhmedov@virtuozzo.com>
+
+	Move err/mem subroutines to separate files.
+	In order to allow usage of utility functions by other binaries
+	included in the strace package (like the upcoming asinfo utility),
+	these functions should be moved to separate files.
+
+	* error_prints.h: New file.
+	* xmalloc.h: Likewise.
+	* defs.h: Include "xmalloc.h" and "error_prints.h".
+	(error_msg, error_msg_and_die, error_msg_and_help, perror_msg,
+	perror_msg_and_die): Move to error_prints.h.
+	(xcalloc, xmalloc, xreallocarray, xstrdup, xstrndup): Move to xmalloc.h.
+	* strace.c (die): Remove static quialifier to make visible
+	by error_prints.c.
+	(error_msg, error_msg_and_die, error_msg_and_help, perror_msg,
+	perror_msg_and_die, verror_msg): Move ...
+	* error_prints.c: ... to the new file.
+	* xmalloc.c: Include "config.h", <stdlib.h>, <string.h>,
+	"error_prints.h", and "xmalloc.h" instead of "defs.h".
+	Use int instead of bool.  Fix codestyle.
+	* Makefile.am (strace_SOURCES): Add error_prints.c, error_prints.h,
+	and xmalloc.h.
+
+2017-08-07  Nikolay Marchuk  <marchuk.nikolay.a@gmail.com>
+
+	tests: move check_* functions from options-syntax.test to separate file.
+	* tests/options-syntax.test: Move check_* functions to ...
+	* tests/syntax.sh: ... new file.
+	* tests/Makefile.am (EXTRA_DIST): Add syntax.sh.
+
+2017-08-07  Nikolay Marchuk  <marchuk.nikolay.a@gmail.com>
+
+	Split qualify.c into basic_filters.c and filter_qualify.c.
+	This change also exports add_number_to_set, qualify_tokens,
+	and qualify_syscall_tokens.
+
+	* basic_filters.c: New file, part of qualify.c.
+	* filter_qualify.c: Likewise.
+	* filter.h: New file.
+	* qualify.c: Remove.
+	* Makefile.am (strace_SOURCES): Add new files, remove qualify.c.
+
+2017-08-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Simplify handling of unexpected tracees.
+	* strace.c (maybe_allocate_tcb) <WIFSTOPPED(status) && !followfork>:
+	Remove the dance around possible re-injection of WSTOPSIG(status)
+	as the only observable stop here is the initial ptrace-stop.
+
+	Fix handling of unexpected tracees when PTRACE_SEIZE is not in use.
+	* strace.c (maybe_allocate_tcb) <WIFSTOPPED(status) && !followfork>:
+	The expected ptrace stop signal in case of !use seize is not
+	syscall_trap_sig but SIGSTOP.  An idea of using PTRACE_GETSIGINFO to
+	distinguish signal stops that should be re-injected from other kinds
+	of stops didn't work out due to kernel implementation peculiarities
+	of initial ptrace-stop.
+
+	pathtrace: fix matching of symlinkat syscall.
+	* pathtrace.c (pathtrace_match_set) <SEN_symlinkat>: The first argument
+	of symlinkat syscall is not a path but an arbitrary string, ignore it.
+
+2017-08-06  Nikolay Marchuk  <marchuk.nikolay.a@gmail.com>
+
+	pathtrace: fix missing syscalls.
+	* pathtrace.c (pathtrace_match_set): Fix symlink decoding,
+	disable pathtracing for inotify_init.
+
+2017-08-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Enhance fflush error diagnostics.
+	* strace.c (flush_tcp_output): New function.
+	(line_ended, droptcb, print_event_exit): Use it to flush tcp->outf.
+	* tests/fflush.c: New file.
+	* tests/fflush.test: New test.
+	* tests/Makefile.am (MISC_TESTS): Add it.
+	* tests/.gitignore: Add fflush.
+	* tests/pure_executables.list: Likewise.
+
+	tests: check handling of CLONE_PARENT'ed and CLONE_PTRACE'ed processes.
+	* tests/clone_parent.c: New file.
+	* tests/clone_ptrace.c: Likewise.
+	* tests/clone_parent.test: New test.
+	* tests/clone_ptrace.test: Likewise.
+	* tests/.gitignore: Add clone_parent and clone_ptrace.
+	* tests/Makefile.am (check_PROGRAMS): Likewise.
+	(MISC_TESTS): Add clone_parent.test and clone_ptrace.test.
+
+	tests: export a path to the trace executable to check_PROGRAMS.
+	* tests/init.sh (STRACE_EXE): Initialize from $STRACE and export.
+
+2017-08-05  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Makefile.am: build top directory first.
+	This solves potential issues when tests run first and strace is rebuilt
+	only after they have finished.  As noted in [1], providing the current
+	directory explicitly should help.
+
+	[1] https://www.gnu.org/software/automake/manual/html_node/Subdirectories.html
+
+	* Makefile.am (SUBDIRS): Prepend the current directory.
+
+2017-08-05  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Improve handling of unexpected tracees.
+	When receiving a ptrace stop of an unexpected child, handle it
+	in the most transparent way possible:
+	- detach it instead of PTRACE_CONT'ing;
+	- send it the signal with which it has been stopped.
+	This should hopefully help to deal with processes that have been created
+	with misused CLONE_PTRACE flag set.
+
+	* strace.c (maybe_allocate_tcb) <WIFSTOPPED(status) && !followfork>:
+	Calculate the signal similarly to the way next_event does,
+	forward it to the unexpected tracee, and detach the tracee.
+
+2017-08-04  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: fix unaligned access in nlattr.test.
+	* tests/nlattr.c (test_nlattr): Use SET_STRUCT
+	to initialize potentially unaligned struct nlattr.
+
+	tests: fix unaligned access in nlattr_packet_diag_msg.test.
+	* tests/nlattr_packet_diag_msg.c (init_packet_diag_msg): Use SET_STRUCT
+	to initialize potentially unaligned struct packet_diag_msg.
+
+2017-08-04  Dmitry V. Levin  <ldv@altlinux.org>
+
+	sparc64: do not bail out in get_scno if PTRACE_PEEKTEXT fails.
+	If the kernel contains commit 84d77d3f06e7e8dea057d10e8ec77ad71f721be3,
+	PTRACE_PEEKTEXT becames unavailable when the process dumpable flag is
+	cleared.  As this is not a fatal condition for get_scno, do not bail out
+	if PTRACE_PEEKTEXT fails.
+
+	This condition is triggered and therefore tested by prctl-dumpable test.
+
+	* linux/sparc64/get_scno.c (arch_get_scno): Do not bail out
+	if PTRACE_PEEKTEXT fails.
+
+2017-08-02  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: enhance test coverage of printstrn and umoven.
+	* tests/printstrn-umoven.c: New file.
+	* tests/printstrn-umoven-peekdata.c: Likewise.
+	* tests/printstrn-umoven-undumpable.c: Likewise.
+	* tests/printstrn-umoven-legacy.test: New test.
+	* tests/Makefile.am (MISC_TESTS): Add printstrn-umoven-legacy.test.
+	* tests/gen_tests.in (printstrn-umoven, printstrn-umoven-peekdata,
+	printstrn-umoven-undumpable): New entries.
+	* tests/pure_executables.list: Add printstrn-umoven,
+	printstrn-umoven-peekdata, and printstrn-umoven-undumpable.
+	* tests/.gitignore: Likewise.
+
+	tests: add test_printstrn function to libtests.
+	* tests/test_ucopy.h (test_printstrn): New prototype.
+	* tests/test_printstrn.c: New file.
+	* tests/Makefile.am (libtests_a_SOURCES): Add it.
+
+2017-08-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: enhance test coverage of printpath and umovestr.
+	* tests/init.sh (TIMEOUT_DURATION): Raise from 300 to 600.
+	* tests/printpath-umovestr.c: New file.
+	* tests/printpath-umovestr-peekdata.c: Likewise.
+	* tests/printpath-umovestr-undumpable.c: Likewise.
+	* tests/printpath-umovestr-legacy.test: New test.
+	* tests/Makefile.am (MISC_TESTS): Add printpath-umovestr-legacy.test.
+	* tests/gen_tests.in (printpath-umovestr, printpath-umovestr-peekdata,
+	printpath-umovestr-undumpable): New entries.
+	* tests/pure_executables.list: Add printpath-umovestr,
+	printpath-umovestr-peekdata, and printpath-umovestr-undumpable.
+	* tests/.gitignore: Likewise.
+
+	tests: add test_printpath function to libtests.
+	* tests/test_ucopy.h (test_printpath): New prototype.
+	* tests/test_printpath.c: New file.
+	* tests/Makefile.am (libtests_a_SOURCES): Add it.
+
+	tests: add test_process_vm_readv and test_ptrace_peekdata to libtests.
+	* tests/test_ucopy.c: New file.
+	* tests/test_ucopy.h: Likewise.
+	* tests/Makefile.am (libtests_a_SOURCES): Add them.
+
+2017-08-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	printpath: do not fetch more than PATH_MAX bytes from tracee's memory.
+	The kernel does not copy more than PATH_MAX bytes from userspace
+	pathnames, treating non-NUL-terminated pathnames as ENAMETOOLONG.
+
+	* util.c (printpathn): Decrease buffer size to PATH_MAX.
+	(printpath): Specify PATH_MAX - 1 as the maximum pathname length
+	to match the kernel behaviour.  The underlying umovestr call will fetch
+	up to PATH_MAX bytes from tracee's memory, but no more than first
+	PATH_MAX - 1 bytes will be printed.
+
+2017-07-31  Dmitry V. Levin  <ldv@altlinux.org>
+
+	ucopy: cleanup umoven_peekdata and umovestr_peekdata.
+	* ucopy.c (umoven_peekdata, umovestr_peekdata): Merge aligned
+	and unaligned tracee address cases.
+
+2017-07-31  Dmitry V. Levin  <ldv@altlinux.org>
+
+	ucopy: move legacy fallbacks of umoven and umovestr to separate functions
+	Move legacy PTRACE_PEEKDATA-based support to separate functions.
+
+	* ucopy.c (umoven_peekdata, umovestr_peekdata): New functions.
+	(umoven, umovestr): Use them.
+
+2017-07-31  Dmitry V. Levin  <ldv@altlinux.org>
+
+	ucopy: move process_vm_readv ENOSYS check to vm_read_mem.
+	* ucopy.c (vm_read_mem): Set process_vm_readv_not_supported in case
+	of ENOSYS.
+	* ucopy.c (umoven, umovestr): Do not set process_vm_readv_not_supported.
+
+2017-07-31  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Print enabled optional features in strace version output.
+	In order to provide information to user what optionally built features
+	are available.
+
+	* strace.c (print_version): New variable "features".  Print features string
+	after non-liability disclaimer (or "(none)" in case it is empty).
+	(print_version) [USE_LIBUNWIND]: Concatenate "stack-unwind" into features
+	string.
+	* tests/strace-V.tests (getoption): New function.
+	Update check in accordance with updated output.
+
+2017-07-31  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/strace-V.test: rename getval to getstr.
+	As this name is more suitable.
+
+	* tests/strace-V (getval): Rename to getstr, update all call sites.
+
+2017-07-30  Dmitry V. Levin  <ldv@altlinux.org>
+
+	ucopy: refactor the check for invalid tracee addresses.
+	* ucopy.c (tracee_addr_is_invalid): New function.
+	* ucopy.c (umoven, umovestr): Use it.
+
+	ucopy: enhance vm_read_mem error diagnostics.
+	* ucopy.c (umoven, umovestr): Enhance vm_read_mem error diagnostics
+	to match PTRACE_PEEKDATA case.
+
+2017-07-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	ucopy: skip redundant tracee address truncation check.
+	* ucopy.c (vm_read_mem): Skip raddr != truncated_raddr check
+	if these variables have the same data size.
+
+2017-07-28  Dmitry V. Levin  <ldv@altlinux.org>
+
+	util: move umoven and umovestr to a separate file.
+	These functions are more kernel-specific compared to all other functions
+	defined in util.c.
+
+	* ucopy.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* util.c (umoven, umovestr): Move to ucopy.c.
+
+2017-07-27  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: enhance decoding of BPF_MAP_LOOKUP_ELEM and BPF_MAP_GET_NEXT_KEY.
+	Print union bpf_attr.value field of BPF_MAP_LOOKUP_ELEM command
+	and union bpf_attr.next_key field of BPF_MAP_GET_NEXT_KEY command
+	on entering syscall.  These fields are addresses specified to the
+	kernel from userspace.  The amount of data written by the kernel
+	to these addresses is specified at the map creation time
+	by BPF_MAP_CREATE command and is not available at this point.
+
+	* bpf.c (decode_BPF_MAP_LOOKUP_ELEM): Print union bpf_attr.value
+	on entering syscall.
+	(decode_BPF_MAP_GET_NEXT_KEY): Print union bpf_attr.next_key
+	on entering syscall.
+	(bpf_map_io): Remove.
+	* tests/bpf.c (print_BPF_MAP_DELETE_ELEM_first,
+	print_BPF_MAP_DELETE_ELEM_attr, print_BPF_MAP_GET_NEXT_KEY_first,
+	print_BPF_MAP_GET_NEXT_KEY_attr): Replace macro redirects with
+	new functions.
+	(print_BPF_MAP_LOOKUP_ELEM_first, print_BPF_MAP_LOOKUP_ELEM_attr,
+
+2017-07-27  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: update BPF_MAP_CREATE decoding.
+	Implement decoding of map_flags and inner_map_fd fields of union bpf_attr
+	for BPF_MAP_CREATE command introduced by linux kernel commits
+	v4.6-rc1~91^2~108^2~6 and v4.12-rc1~64^3~373^2~2, respectively.
+
+	* configure.ac: Check for inner_map_fd member of union bpf_attr
+	instead of max_entries.
+	* xlat/bpf_map_flags.in: New file.
+	* bpf.c: Include "xlat/bpf_map_flags.h".
+	(decode_BPF_MAP_CREATE): Add map_flags and inner_map_fd fields
+	to the structure, print them.
+	* tests/bpf.c: Update macro guards of BPF_MAP_CREATE decoder test.
+	(init_BPF_MAP_CREATE_first, print_BPF_MAP_CREATE_attr): Update expected
+	output.
+	(init_BPF_MAP_CREATE_attr): Initialize map_flags and inner_map_fd
+	fields, update offset.
+
+2017-07-27  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: update BPF_PROG_LOAD decoding.
+	Implement decoding of union bpf_attr.prog_flags field for BPF_PROG_LOAD
+	command introduced by linux kernel commit v4.12-rc2~34^2~29^2~2.
+
+	* configure.ac: Check for prog_flags member of union bpf_attr
+	instead of kern_version.
+	* xlat/bpf_prog_flags.in: New file.
+	* bpf.c: Include "xlat/bpf_prog_flags.h".
+	(decode_BPF_PROG_LOAD): Add prog_flags field to the structure, print it.
+	* tests/bpf.c: Update macro guards of BPF_PROG_LOAD decoder test.
+	(init_BPF_PROG_LOAD_first, print_BPF_PROG_LOAD_attr): Update expected
+	output.
+	(init_BPF_PROG_LOAD_attr): Initialize prog_flags field, update offset.
+
+2017-07-26  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: enhance test coverage of bpf syscall parser.
+	* configure.ac: Update union bpf_attr member checks.
+	* tests/bpf.c: Rewrite.
+	* tests/bpf-v.c: New file.
+	* tests/gen_tests.in (bpf-v): New entry.
+	* tests/pure_executables.list: Add bpf-v.
+	* tests/.gitignore: Likewise.
+
+	m4: macroize union bpf_attr field checks.
+	* m4/st_bpf.m4: New file.
+	* configure.ac: Use st_CHECK_UNION_BPF_ATTR.
+
+	Move offsetofend from defs.h to macros.h.
+	* defs.h (offsetofend): Move ...
+	* macros.h: ... here.
+
+2017-07-26  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: print unused fields of union bpf_attr if one of them is non-zero.
+	When the size argument specifies more data than necessary for the given
+	command, kernel checks that all unused fields of union bpf_attr are
+	zero.  Print this extra data when it contains non-zero bytes to enhance
+	debugging experience.
+
+	* bpf.c (decode_attr_extra_data): New function.
+	(decode_BPF_MAP_CREATE, decode_BPF_MAP_UPDATE_ELEM,
+	decode_BPF_MAP_DELETE_ELEM, bpf_map_io, decode_BPF_PROG_LOAD,
+	decode_BPF_OBJ_PIN, decode_BPF_OBJ_GET, decode_BPF_PROG_ATTACH,
+	decode_BPF_PROG_DETACH): Use it to print extra data passed
+	via bpf_attr pointer.
+	(bpf_obj_manage, bpf_prog_attach_detach): Remove.
+	* tests/bpf.c (map_delete_elem): New function.
+	(main): Use it.
+
+2017-07-26  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: change handling of big and unaccessible data to match the kernel.
+	When the size argument exceeds PAGE_SIZE, the kernel fails with E2BIG
+	without parsing union bpf_attr.
+	When the whole chunk of memory specified by addr and size arguments is
+	not readable, the kernel fails with EFAULT.
+
+	* bpf.c (DECL_BPF_CMD_DECODER) <bpf_cmd_decoder>: Add const qualifier
+	to size argument, add data argument.
+	(decode_BPF_MAP_CREATE, decode_BPF_MAP_UPDATE_ELEM,
+	decode_BPF_MAP_DELETE_ELEM, bpf_map_io, decode_BPF_PROG_LOAD,
+	bpf_obj_manage, bpf_prog_attach_detach): Move size argument check and
+	memory fetching ...
+	(SYS_FUNC(bpf)) ... here, add PAGE_SIZE check, pass fetched memory
+	to command-specific parsers.
+
+2017-07-25  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: replace big switch statement with a dispatch table.
+	* bpf.c (DECL_BPF_CMD_DECODER, DEF_BPF_CMD_DECODER, BPF_CMD_ENTRY):
+	New macros.
+	(bpf_cmd_decoder_t): New typedef.
+	Rename static parser functions using DEF_BPF_CMD_DECODER.
+	(decode_BPF_MAP_LOOKUP_ELEM, decode_BPF_MAP_GET_NEXT_KEY): New proxy
+	functions.
+	(SYS_FUNC(bpf)): Replace big switch statement with a dispatch table.
+
+	bpf: use PRINT_FIELD_* macros.
+	* print_fields.h (PRINT_FIELD_STR, PRINT_FIELD_PATH): New macros.
+	* bpf.c: Include "print_fields.h".
+	(bpf_map_create): Use PRINT_FIELD_U and PRINT_FIELD_XVAL.
+	(bpf_map_update_elem): Use PRINT_FIELD_FD, PRINT_FIELD_X, and
+	PRINT_FIELD_XVAL.
+	(bpf_map_delete_elem, bpf_map_io): Use PRINT_FIELD_FD and PRINT_FIELD_X.
+	(bpf_prog_load): Use PRINT_FIELD_STR, PRINT_FIELD_U, PRINT_FIELD_X,
+	and PRINT_FIELD_XVAL.
+	(bpf_obj_manage): Use PRINT_FIELD_FD and PRINT_FIELD_PATH.
+	(bpf_prog_attach_detach): Use PRINT_FIELD_FD, PRINT_FIELD_FLAGS,
+	and PRINT_FIELD_XVAL.
+
+2017-07-25  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Add terminating comment after each DECL_* macro definition.
+	In an attempt to improve readability.
+
+	* defs.h (DECL_IOCTL, DECL_NETLINK, DECL_PRINTNUM, DECL_PRINTNUM_ADDR,
+	ATTRIBUTE_FORMAT): Add comment that marks end of macro definition.
+	* netlink_sock_diag (DECL_NETLINK_DIAG_DECODER): Likewise.
+	* nlattr.h (DECL_NLA): Likewise.
+
+2017-07-24  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Introduce print_quoted_cstring.
+	In many places where kernel expects a NUL-terminated string of length
+	up to a known fixed limit, e.g. when a NUL-terminated string is
+	a fixed-size field of a structure, strace does not print the last byte
+	assuming it is NUL, which is not always the case.
+
+	Change output format for such strings to distinguish NUL-terminated
+	strings from non-NUL-terminated ones: append ellipsis to the output
+	when the string is not NUL-terminated.
+
+	* defs.h (print_quoted_cstring): New prototype.
+	* util.c (print_quoted_cstring): New function.
+	(printpathn): Use it instead of print_quoted_string with
+	QUOTE_0_TERMINATED argument.
+	* print_fields.h (PRINT_FIELD_CSTRING): Likewise.
+	* btrfs.c (btrfs_ioctl): Likewise.
+	* dirent.c (SYS_FUNC(getdents)): Likewise.
+	* dirent64.c (SYS_FUNC(getdents64)): Likewise.
+	* print_ifindex.c (print_ifindex): Likewise.
+	* sysmips.c (SYS_FUNC(sysmips)): Likewise.
+	* ubi.c (ubi_ioctl): Likewise.
+	* tests/tests.h (print_quoted_cstring): New prototype.
+	* tests/print_quoted_string.c (print_quoted_cstring): New function.
+	* tests/ioctl_block.c (main): Update expected output.
+	* tests/ioctl_dm.c (main): Likewise.
+	* tests/ioctl_loop.c (print_loop_info, print_loop_info64): Likewise.
+	* tests/netlink_crypto.c (test_crypto_msg_newalg): Likewise.
+
+2017-07-24  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_CRYPTO crypto_user_alg attributes.
+	* tests/nlattr_crypto_user_alg.c: New file.
+	* tests/gen_tests.in (nlattr_crypto_user_alg): New entry.
+	* tests/pure_executables.list: Add nlattr_crypto_user_alg.
+	* tests/.gitignore: Likewise.
+
+	tests: extend TEST_NLATTR_OBJECT macro.
+	* tests/test_nlattr.h (TEST_NLATTR_OBJECT_EX_,
+	TEST_NLATTR_OBJECT_EX): New macros.
+	(TEST_NLATTR_OBJECT): Use TEST_NLATTR_OBJECT_EX_.
+
+	netlink: decode NETLINK_CRYPTO crypto_user_alg netlink attributes.
+	* configure.ac (AC_CHECK_TYPES): Check for crypto_report_aead,
+	crypto_report_blkcipher, crypto_report_cipher, crypto_report_hash,
+	and crypto_report_rng structures in <linux/cryptouser.h>.
+	* netlink_crypto.c (decode_crypto_report_generic,
+	decode_crypto_report_hash, decode_crypto_report_blkcipher,
+	decode_crypto_report_aead, decode_crypto_report_rng,
+	decode_crypto_report_cipher): New functions.
+	(crypto_user_alg_nla_decoders): New array.
+	(decode_crypto_user_alg): Use it.
+	* xlat/crypto_nl_attrs.in: New file.
+	* NEWS: Mention this.
+
+	tests: check decoding of NETLINK_CRYPTO messages.
+	* tests/netlink_crypto.c: Include "test_netlink.h"
+	instead of "netlink.h".
+	(test_crypto_msg_newalg, test_crypto_msg_unspec): New functions.
+	(main): Use them.
+
+2017-07-24  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: extend TEST_NETLINK_OBJECT macro.
+	As the first field of NETLINK_CRYPTO messages is a string, print
+	unrecognized data as a string.  Extend TEST_NETLINK_OBJECT macro
+	to test this case.
+
+	* tests/test_netlink.h (TEST_NETLINK_OBJECT_EX_,
+	TEST_NETLINK_OBJECT_EX): New macros.
+	(TEST_NETLINK_OBJECT): Use TEST_NETLINK_OBJECT_EX_.
+
+2017-07-24  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink: add a basic parser of NETLINK_CRYPTO messages.
+	* netlink_crypto.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* defs.h (decode_netlink_crypto): New prototype.
+	* netlink.c (netlink_decoders): Add NETLINK_CRYPTO.
+	* NEWS: Mention this.
+
+2017-07-23  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Unify PRINT_FIELD_XVAL and PRINT_FIELD_XVAL64.
+	* print_fields.h (PRINT_FIELD_XVAL64): Unify with PRINT_FIELD_XVAL.
+
+	Unify PRINT_FIELD_FLAGS and PRINT_FIELD_FLAGS64.
+	* print_fields.h (PRINT_FIELD_FLAGS64): Unify with PRINT_FIELD_FLAGS.
+	* userfaultfd.c (uffdio_ioctl): Replace PRINT_FIELD_FLAGS64 with
+	PRINT_FIELD_FLAGS.
+
+2017-07-23  Nikolay Marchuk  <marchuk.nikolay.a@gmail.com>
+
+	pathtrace: fix fanotify_mark path tracing on 32-bit architectures.
+	The fanotify_mark syscall takes a 64-bit mask, and on 32-bit
+	architectures it is split up into two syscall arguments.
+
+	* pathtrace.c (pathtrace_match_set): Use getllval to properly decode
+	arguments after mask.
+
+2017-07-22  Dmitry V. Levin  <ldv@altlinux.org>
+
+	travis: add valgrind check support.
+	* travis-build.sh [CHECK == valgrind]: Pass --enable-valgrind
+	to configure and appropriate check-valgrind-* to make.
+	* travis-install.sh [CHECK == valgrind]: Install valgrind.
+
+2017-07-22  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink_sock_diag: replace NLA_ALIGN with NLMSG_ALIGN.
+	In several netlink_sock_diag parsers NLA_ALIGN was used instead of
+	NLMSG_ALIGN to align the length of netlink messages.  Fortunately,
+	both macros round the given length to the closest multiple of 4,
+	so technically there is no difference, but the use of wrong macro
+	is misleading.
+
+	* netlink_inet_diag.c (decode_inet_diag_req_compat,
+	decode_inet_diag_req_v2, decode_inet_diag_msg): Replace
+	NLA_ALIGN with NLMSG_ALIGN.
+	* netlink_netlink_diag.c (decode_netlink_diag_msg): Likewise.
+	* netlink_packet_diag.c (decode_packet_diag_msg): Likewise.
+	* netlink_smc_diag.c (decode_smc_diag_msg): Likewise.
+
+2017-07-22  Dmitry V. Levin  <ldv@altlinux.org>
+
+	travis: configure build with dependency tracking disabled.
+	Dependency tracking is completely useless for one-time builds,
+	so configure build with dependency tracking disabled.
+
+	* travis-build.sh (DISTCHECK_CONFIGURE_FLAGS): Add
+	--disable-dependency-tracking.
+
+2017-07-22  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	m4: remove equal sign from define directive in ax_valgrind_check.m4.
+	Support for providing equal sign in define directives has been added
+	only in GNU Make 3.82 [1] and it provides the same semantics (variables
+	should be recursively expanded) as when it is omitted at all, so let's
+	remove it in order to preserve compatibility with older GNU Make
+	versions (like the one used on Travis).
+
+	[1] https://git.savannah.gnu.org/cgit/make.git/tree/ChangeLog?h=3.82#n766
+
+	* m4/ax_valgrind_check.m4 <define valgrind_tool_rule>: Remove equal
+	sign.
+
+2017-07-21  Dmitry V. Levin  <ldv@altlinux.org>
+
+	keyctl: add support for KEYCTL_RESTRICT_KEYRING operation.
+	* keyctl.c (keyctl_restrict_keyring): New function.
+	(SYS_FUNC(keyctl)): Use it to implement KEYCTL_RESTRICT_KEYRING support.
+	* NEWS: Mention this.
+	* tests/keyctl.c (main): Check KEYCTL_RESTRICT_KEYRING decoding.
+
+2017-07-21  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: robustify strace-t.test.
+	If strace -t is running too long, it might happen that time stamps
+	before and after its invocation differ for more than a second.
+	Adjust expected output to handle this rare but possible case.
+
+	* tests/strace-t.test: Allow any time stamp between start and finish
+	of strace invocation.
+
+2017-07-21  Dmitry V. Levin  <ldv@altlinux.org>
+
+	x86: wire up arch_prctl syscall.
+	* linux/i386/syscallent.h [384]: Add arch_prctl entry.
+	* xlat/archvals.in: Add fallback definitions for constants.
+	* prctl.c: Stop including <asm/prctl.h>.
+	(SYS_FUNC(arch_prctl)): Enable for [I386].
+	* NEWS: Mention this.
+
+2017-07-21  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: tweak strace-ff.test for slow startup case.
+	strace starts up much slower when invoked under valgrind control.
+	Increase the tracee's sleep delay to let strace more time to attach.
+
+	* tests/strace-ff.test: Increase sleep delay.
+
+2017-07-21  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: update valgrind suppressions.
+	* tests/strace.supp: Add a suppression for the memleak before
+	error_msg_and_die in qualify_tokens.
+
+2017-07-21  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Do not copy optarg unnecessarily.
+	There is no need to copy the optarg string since it is a pointer
+	into the original argv array, not into a static area
+	that might be overwritten.
+
+	* strace.c (username, outfname): Add const qualifier.
+	(init): Do not xstrdup optarg to initialize outfname and username.
+
+2017-07-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+	travis: add build environment information to the travis log.
+	* travis-build.sh: Print build environment information.
+
+2017-07-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+	build: add check-valgrind-* to recursive targets.
+	As make -j$N check-valgrind cannot parallelize properly, add
+	recursive targets for each of valgrind checks.  This way one can run
+		for t in $valgrind_enabled_tools; do
+			make -k check-valgrind-$n || rc=$?
+		done
+	in $top_builddir.
+
+	* configure.ac (AM_EXTRA_RECURSIVE_TARGETS): Remove.
+	* m4/ax_valgrind_check.m4 (AX_VALGRIND_CHECK): Add check-valgrind
+	and check-valgrind-* to AM_EXTRA_RECURSIVE_TARGETS.
+
+2017-07-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: add check-valgrind-local make rule.
+	This guarantees that $(check_LIBRARIES) and $(check_PROGRAMS)
+	are made on 'make check-valgrind' before its recipe is processed.
+
+	* tests/Makefile.am (check-valgrind-local): New rule.
+	(.PHONY): Add it.
+
+2017-07-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Add ksysent.h and scno.h to BUILT_SOURCES.
+	This guarantees that ksysent.h and scno.h, along with other targets
+	listed in BUILT_SOURCES, are made on 'make all', 'make check',
+	and 'make check-valgrind' before other targets are processed.
+
+	* scno.am (BUILT_SOURCES): Add scno.h.
+	* tests/Makefile.am (BUILT_SOURCES): Add ksysent.h.
+
+2017-07-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: fix valgrind suppression file path.
+	* tests/Makefile.am (VALGRIND_SUPPRESSIONS_FILES): Replace srcdir
+	with abs_srcdir.
+
+	Fixes: v4.16-74-g16036030 ("tests: run every test except ksysent.test in its own subdirectory")
+
+2017-07-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update AX_VALGRIND_CHECK.
+	* m4/ax_valgrind_check.m4: Update to serial 15.  In particular,
+	this version does not eat check-valgrind errors.
+
+	Update AX_CODE_COVERAGE.
+	* m4/ax_code_coverage.m4: Update to serial 24.  In particular,
+	this version has no lcov version check.
+	* Makefile.am (strace_LDADD): Rename CODE_COVERAGE_LDFLAGS
+	to CODE_COVERAGE_LIBS.
+
+	Update input event KEY_* constants.
+	* xlat/evdev_keycode.in: Add KEY_ASSISTANT introduced by linux kernel
+	commit v4.13-rc1~13^2~1^2~1.
+	* NEWS: Mention this.
+
+	Update fs *_MAGIC constants.
+	* xlat/fsmagic.in: Add AAFS_MAGIC introduced by linux kernel commit
+	v4.13-rc1~161^2~87.
+	* NEWS: Mention this.
+
+2017-07-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Move family-specific NETLINK_SOCK_DIAG parsers to separate files.
+	Split netlink_sock_diag.c that grew too big.
+
+	* defs.h (tcp_states, tcp_state_flags): New xlat prototypes.
+	* netlink_sock_diag.h: New file.
+	* netlink_inet_diag.c: Likewise.
+	* netlink_netlink_diag.c: Likewise.
+	* netlink_packet_diag.c: Likewise.
+	* netlink_smc_diag.c: Likewise.
+	* netlink_unix_diag.c: Likewise.
+	* Makefile.am (strace_SOURCES): Add them.
+	* netlink_sock_diag.c: Move family-specific parsers and associated
+	header includes to separate files.
+	* nlattr.h (DECL_NLA(meminfo)): New prototype.
+	* nlattr.c: Include <linux/sock_diag.h>.
+	(print_meminfo, decode_nla_meminfo): New functions from
+	netlink_sock_diag.c.
+
+2017-07-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Adjust prototypes of netlink parsing functions.
+	Change the type of "len" argument that is based
+	on struct nlmsghdr.nlmsg_len from kernel_ulong_t to unsigned int.
+
+	* defs.h (netlink_decoder_t, DECL_NETLINK): Change "len" argument type
+	from kernel_ulong_t to unsigned int.
+	* netlink.c (decode_nlmsgerr_attr_cookie, decode_nlmsgerr,
+	decode_payload): Likewise.
+	* netlink_selinux.c (decode_netlink_selinux): Likewise.
+	* netlink_sock_diag.c (decode_family, decode_unix_diag_req,
+	decode_meminfo, decode_unix_diag_vfs, decode_unix_diag_inode,
+	decode_unix_diag_rqlen, decode_unix_diag_msg, decode_netlink_diag_req,
+	print_group, decode_netlink_diag_ring, decode_netlink_diag_flags,
+	decode_netlink_diag_msg, decode_packet_diag_req,
+	decode_packet_diag_info, decode_packet_diag_mclist,
+	decode_packet_diag_ring, decode_packet_diag_filter,
+	decode_packet_diag_msg, decode_inet_addr, decode_inet_diag_hostcond,
+	decode_inet_diag_markcond, decode_bytecode_data, decode_inet_diag_bc_op,
+	decode_inet_diag_req_compat, decode_inet_diag_req_v2,
+	decode_inet_diag_req, decode_inet_diag_meminfo, decode_tcpvegas_info,
+	decode_tcp_dctcp_info, decode_tcp_bbr_info, decode_inet_diag_msg,
+	decode_smc_diag_req, decode_smc_diag_conninfo, decode_smc_diag_lgrinfo,
+	decode_smc_diag_msg, netlink_diag_decoder_t, decode_netlink_sock_diag):
+	Likewise.
+	* nlattr.c (fetch_nlattr, decode_nlattr_with_data, decode_nlattr,
+	decode_nla_str, decode_nla_strn, DECODE_NLA_INTEGER): Likewise.
+	* nlattr.h (nla_decoder_t, DECL_NLA, decode_nlattr): Likewise.
+
+2017-07-19  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of nlmsgerr attributes.
+	* tests/nlattr_nlmsgerr.c: New file.
+	* tests/gen_tests.in (nlattr_nlmsgerr): New entry.
+	* tests/pure_executables.list: Add nlattr_nlmsgerr.
+	* tests/.gitignore: Likewise.
+
+	netlink: decode nlmsgerr attributes.
+	* netlink.c: Include "nlattr.h" and "xlat/nlmsgerr_attrs.h".
+	(print_cookie, decode_nlmsgerr_attr_cookie): New functions.
+	(nlmsgerr_nla_decoders): New array.
+	(decode_nlmsgerr): Use it.
+	* xlat/nlmsgerr_attrs.in: New file.
+	* NEWS: Mention this.
+
+2017-07-19  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink: adjust decode_nlmsgerr for extended ACK reporting.
+	Extended ACK reporting introduced by linux kernel commit
+	v4.11-rc5-1382-g2d4bc93.
+
+	* netlink.h (NLM_F_CAPPED): New macro.
+	* netlink.c (decode_payload): Pass
+	nlmsghdr->nlmsg_flags & NLM_F_CAPPED to decode_nlmsgerr.
+	(decode_nlmsgerr): Adjust the length pass to
+	decode_nlmsghdr_with_payload.
+
+2017-07-19  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink: decode netlink message ack flags.
+	* netlink.c: Include "xlat/netlink_ack_flags.h".
+	(decode_nlmsg_flags): Decode ack flags when type == NLMSG_ERROR.
+	* xlat/netlink_ack_flags.in: New file.
+	* NEWS: Mention this.
+	* tests/netlink_protocol.c (test_ack_flags): New function, check this.
+	(main): Use it.
+
+2017-07-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: enhance error diagnostics.
+	* tests/init.sh (dump_log_and_fail_with): Dump $LOG to stderr instead
+	of stdout as the latter is more likely to be redirected to a temporary
+	file in the context where this function is called.
+
+	tests: enhance timeout diagnostics.
+	* tests/init.sh: Trap SIGXCPU.
+	* tests/run.sh: Send SIGXCPU instead of SIGKILL in case of timeout, send
+	SIGKILL if the command is still running 5 seconds after SIGXCPU.
+
+	userfaultfd: decode struct uffdio_api.features as flags.
+	* xlat/uffd_api_features.in: New file.
+	* userfaultfd.c: Include "xlat/uffd_api_features.h".
+	(uffdio_ioctl): Print struct uffdio_api.features using
+	PRINT_FIELD_FLAGS64 and uffd_api_features.
+	* NEWS: Mention this.
+	* tests/ioctl_uffdio.c: Include "xlat.h" and "xlat/uffd_api_features.h".
+	(main): Update expected output.
+
+2017-07-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	userfaultfd: enhance decoding of struct uffdio_api.features.
+	As struct uffdio_api.features has read-write semantics,
+	print the value returned by the kernel only when it differs
+	from the value passed to the kernel.
+
+	* userfaultfd.c (uffdio_ioctl) <UFFDIO_API>: On entering syscall,
+	save the value of struct uffdio_api.features.  On exiting syscall, do
+	not print struct uffdio_api.features when it's the same as on entering.
+	* tests/ioctl_uffdio.c (main): Update expected output.
+
+2017-07-18  Dmitry V. Levin  <ldv@altlinux.org>
+
+	userfaultfd: use PRINT_FIELD_* macros.
+	This also fixes output correctness for struct uffdio_api.features.
+
+	* userfaultfd.c: Include "print_fields.h".
+	(tprintf_uffdio_range): Use PRINT_FIELD_X.
+	(PRINT_FIELD_UFFDIO_RANGE): New macro.
+	(uffdio_ioctl): Use it, PRINT_FIELD_FLAGS64, and PRINT_FIELD_X.
+	* tests/ioctl_uffdio.c (main): Update expected output.
+
+2017-07-18  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Introduce PRINT_FIELD_FLAGS64 and PRINT_FIELD_XVAL64.
+	* print_fields.h (PRINT_FIELD_FLAGS64, PRINT_FIELD_XVAL64): New macros.
+
+2017-07-17  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update NEWS.
+
+	aio: change struct iocb.aio_lio_opcode output format.
+	* aio.c (tprint_lio_opcode): Change opcode output format to match
+	the kernel.
+	* tests/aio.c (main): Update expected output.
+
+2017-07-17  Dmitry V. Levin  <ldv@altlinux.org>
+
+	aio: use PRINT_FIELD_* macros.
+	This also fixes output correctness for struct iocb.
+
+	* aio.c: Include "print_fields.h".
+	(print_common_flags, print_iocb_header, print_iocb, print_io_event):
+	Use PRINT_FIELD_D, PRINT_FIELD_U, PRINT_FIELD_X, PRINT_FIELD_FD,
+	and PRINT_FIELD_STRN.
+	* tests/aio.c (main): Update expected output.
+
+2017-07-17  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Introduce PRINT_FIELD_FD and PRINT_FIELD_STRN.
+	* print_fields.h (PRINT_FIELD_FD, PRINT_FIELD_STRN): New macros.
+
+2017-07-16  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update BPF_* constants.
+	* xlat/bpf_commands.in: Add BPF_PROG_TEST_RUN, BPF_PROG_GET_NEXT_ID,
+	BPF_MAP_GET_NEXT_ID, BPF_PROG_GET_FD_BY_ID, BPF_MAP_GET_FD_BY_ID,
+	and BPF_OBJ_GET_INFO_BY_FD introduced by linux kernel commits
+	v4.12-rc1~64^3~287^2~5, v4.13-rc1~157^2~271^2~5,
+	v4.13-rc1~157^2~271^2~4, v4.13-rc1~157^2~271^2~3, and
+	v4.13-rc1~157^2~271^2~1, respectively.
+	* xlat/bpf_attach_type.in: Add BPF_CGROUP_SOCK_OPS introduced
+	by linux kernel commit v4.13-rc1~157^2~37^2~15.
+	* xlat/bpf_prog_types.in: Add BPF_PROG_TYPE_SOCK_OPS introduced
+	by the same commit.
+
+	Update SO_* constants.
+	* xlat/sockoptions.in: Add SO_PEERGROUPS introduced by linux kernel
+	commit v4.13-rc1~157^2~124.
+
+	Update SCM_* constants.
+	* xlat/scmvals.in: Add SCM_TIMESTAMPING_PKTINFO introduced
+	by linux kernel commit v4.13-rc1~157^2~405^2~3.
+
+2017-07-16  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_SELINUX protocol.
+	* test_netlink.h (TEST_NETLINK_OBJECT): New macro.
+	* tests/netlink_selinux.c: Include "test_netlink.h"
+	instead of "netlink.h".
+	(test_selnl_msg_unspec, test_selnl_msg_setenforce,
+	test_selnl_msg_policyload): New functions.
+	(main): Use them.
+
+	netlink: decode NETLINK_SELINUX protocol.
+	* netlink_selinux.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* defs.h (decode_netlink_selinux): New prototype.
+	* netlink.c (netlink_decoders): Add NETLINK_SELINUX.
+
+2017-07-15  Dmitry V. Levin  <ldv@altlinux.org>
+
+	sg_io_v3: use PRINT_FIELD_* macros.
+	* sg_io_v3.c: Include "print_fields.h".
+	(PRINT_FIELD_SG_IO_BUFFER): New macro.
+	(decode_request, decode_response): Use it, PRINT_FIELD_D, PRINT_FIELD_U,
+	PRINT_FIELD_X, PRINT_FIELD_PTR, PRINT_FIELD_FLAGS, and PRINT_FIELD_XVAL.
+
+	Introduce PRINT_FIELD_PTR.
+	* print_fields.h (PRINT_FIELD_PTR): New macro.
+
+2017-07-15  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Provide mpers_ptr_t definition for non-mpers case.
+	In mpers case, mpers_ptr_t is already defined by DEF_MPERS_TYPE(...).
+	This allows use of mpers_ptr_t regardless of IN_MPERS state.
+
+	* mpers_type.h [!IN_MPERS] (mpers_ptr_t): New typedef.
+
+2017-07-14  Lazar Trsic  <Lazar.Trsic@imgtec.com>
+
+	Move is_negated_errno() to new header negated_errno.h.
+	Move is_negated_errno() to a separate new header file negated_errno.h
+	and include it just for architectures which require it.
+
+	is_negated_errno() is not used on those architectures
+	that have a dedicated register to signal a syscall error.
+
+	The issue was raised when compiling with clang, which is more
+	strict regarding semantics of unused static inline functions
+	defined in C files and will issue a -Wunused-function warrning
+	if they are not used anywhere.
+
+	* syscall.c (is_negated_errno): Move to ...
+	* negated_errno.h: ... new file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* linux/aarch64/get_error.c: Include it.
+	* linux/arc/get_error.c: Likewise.
+	* linux/arm/get_error.c: Likewise.
+	* linux/avr32/get_error.c: Likewise.
+	* linux/bfin/get_error.c: Likewise.
+	* linux/crisv10/get_error.c: Likewise.
+	* linux/hppa/get_error.c: Likewise.
+	* linux/i386/get_error.c: Likewise.
+	* linux/ia64/get_error.c: Likewise.
+	* linux/m68k/get_error.c: Likewise.
+	* linux/metag/get_error.c: Likewise.
+	* linux/microblaze/get_error.c: Likewise.
+	* linux/or1k/get_error.c: Likewise.
+	* linux/riscv/get_error.c: Likewise.
+	* linux/s390/get_error.c: Likewise.
+	* linux/sh/get_error.c: Likewise.
+	* linux/sh64/get_error.c: Likewise.
+	* linux/tile/get_error.c: Likewise.
+	* linux/x86_64/get_error.c: Likewise.
+	* linux/xtensa/get_error.c: Likewise.
+
+2017-07-14  Dmitry V. Levin  <ldv@altlinux.org>
+
+	sg_io_v4: use PRINT_FIELD_* macros.
+	* sg_io_v4.c: Include "print_fields.h".
+	(PRINT_FIELD_SG_IO_BUFFER): New macro.
+	(decode_request, decode_response): Use it, PRINT_FIELD_D, PRINT_FIELD_U,
+	PRINT_FIELD_X, PRINT_FIELD_FLAGS, and PRINT_FIELD_XVAL.
+
+	dm: use PRINT_FIELD_* macros.
+	* dm.c (dm_decode_values, dm_decode_dm_target_spec,
+	dm_decode_dm_target_deps, dm_decode_dm_target_msg, dm_known_ioctl): Use
+	PRINT_FIELD_D, PRINT_FIELD_U, and PRINT_FIELD_FLAGS.
+
+2017-07-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Move macros related to kernel types to kernel_types.h.
+	Some macros related to kernel types are defined both in defs.h and
+	tests/tests.h.  Avoid this redundancy by moving these definitions
+	to kernel_types.h.
+
+	* defs.h (PRI_kl, PRI_kld, PRI_klu, PRI_klx, PRI__64, PRI__d64,
+	PRI__u64, PRI__x64): Move ...
+	* kernel_types.h: ... here.
+	* tests/tests.h (PRI__64, PRI__d64, PRI__u64, PRI__x64): Remove.
+
+2017-07-13  Lazar Trsic  <Lazar.Trsic@imgtec.com>
+
+	mips64: fix PRI__64 macro definition when compiled for Android.
+	By default for MIPS64 in Android __u64 type is exported
+	as unsigned long long.  This caused compilation -Wformat warnings
+	and would break the build if -Werror is used.
+
+	* defs.h [SIZEOF_LONG != 4 && MIPS && __ANDROID__] (PRI__64): Change
+	from "l" to "ll".
+
+2017-07-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	block: use PRINT_FIELD_* macros.
+	This also fixes output correctness for struct blkpg_ioctl_arg.
+
+	* block.c (print_blkpg_req): Use PRINT_FIELD_D and PRINT_FIELD_XVAL.
+	(block_ioctl): Use PRINT_FIELD_U.
+	* tests/ioctl_block.c (main): Update expected output.
+
+2017-07-12  Dmitry V. Levin  <ldv@altlinux.org>
+
+	netlink_sock_diag: enhance decoding of long meminfo arrays.
+	Print trailing dots instead of silent truncation if the array
+	is too long.
+
+	* netlink_sock_diag.c (decode_meminfo): Do not apply SK_MEMINFO_VARS
+	limit to nmemb, specify element count to print_array instead.
+	(print_meminfo): Check element count and terminate printing
+	if the element count exceeds SK_MEMINFO_VARS.
+	* tests/nlattr_inet_diag_msg.c (main): Check it.
+
+2017-07-12  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: extend coverage of netlink_diag_req decoder.
+	Add one more NETLINK_SOCK_DIAG check to ressurrect full coverage
+	of netlink_diag_req decoder that was lost after commit
+	v4.18-58-g37ef2d0d.
+
+	* tests/netlink_sock_diag.c (test_netlink_diag_req): Add a check for
+	sdiag_protocol != NDIAG_PROTO_ALL.
+
+2017-07-12  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NETLINK_CRYPTO nlmsg_flags.
+	* tests/netlink_crypto.c (test_nlmsg_flags): New function.
+	(main): Use it.
+
+	netlink: add decoding of NETLINK_CRYPTO nlmsg_flags.
+	* netlink.c (decode_nlmsg_flags): Add NETLINK_CRYPTO.
+
+	tests: check decoding of NETLINK_CRYPTO message types.
+	* configure.ac (AC_CHECK_HEADERS): Add linux/cryptouser.h.
+	* tests/netlink_crypto.c: New file.
+	* tests/gen_tests.in (netlink_crypto): New entry.
+	* tests/pure_executables.list: Add netlink_crypto.
+	* tests/.gitignore: Likewise.
+
+	netlink: add decoding of NETLINK_CRYPTO message types.
+	* xlat/nl_crypto_types.in: New file.
+	* netlink.c: Include "xlat/nl_crypto_types.h".
+	(nlmsg_types): Add NETLINK_CRYPTO.
+
+	tests: introduce TEST_NETLINK and TEST_NETLINK_ macros.
+	* tests/test_netlink.h: New file.
+	* tests/Makefile.am (libtests_a_SOURCES): Add it.
+	* tests/netlink_sock_diag.c: Include "test_netlink.h"
+	instead of "netlink.h".
+	(TEST_SOCK_DIAG): New macro.
+	(test_unix_diag_req, test_unix_diag_msg,
+	test_netlink_diag_req, test_netlink_diag_msg,
+	test_packet_diag_req, test_packet_diag_msg,
+	test_inet_diag_req, test_inet_diag_req_v2,
+	test_inet_diag_msg, test_smc_diag_req,
+	test_smc_diag_msg): Use it.
+	(test_odd_family_req, test_odd_family_msg,
+	test_inet_diag_sockid): Use TEST_NETLINK macro.
+
+2017-07-11  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of nlattr_inet_diag_req_v2 attributes.
+	* tests/nlattr_inet_diag_req_v2.c: New file.
+	* tests/gen_tests.in (nlattr_inet_diag_req_v2): New entry.
+	* tests/pure_executables.list: Add nlattr_inet_diag_req_v2.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of nlattr_inet_diag_req_compat attributes.
+	* tests/nlattr_inet_diag_req_compat.c: New file.
+	* tests/gen_tests.in (nlattr_inet_diag_req_compat): New entry.
+	* tests/pure_executables.list: Add nlattr_inet_diag_req_compat.
+	* tests/.gitignore: Likewise.
+
+	netlink: decode AF_INET inet_diag_req_* attributes.
+	* linux/inet_diag.h (inet_diag_bc_op, inet_diag_hostcond,
+	inet_diag_markcond): New structures.
+	(INET_DIAG_BC_*): New enum.
+	* netlink_sock_diag.c: Include "xlat/inet_diag_bytecodes.h".
+	(decode_inet_addr, decode_inet_diag_hostcond,
+	print_inet_diag_bc_op, decode_inet_diag_markcond,
+	decode_bytecode_data, decode_inet_diag_bc_op): New functions.
+	(inet_diag_req_nla_decoders): New array.
+	(decode_inet_diag_req_compat, decode_inet_diag_req_v2): Use it.
+	* xlat/inet_diag_bytecodes.in: New file.
+
+2017-07-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Introduce PRINT_FIELD_CSTRING.
+	* print_fields.h (PRINT_FIELD_CSTRING): New macro.
+	* block.c (print_blkpg_req, block_ioctl): Use PRINT_FIELD_CSTRING
+	instead of print_quoted_string.
+	* btrfs.c (btrfs_ioctl): Likewise.
+	* dm.c (dm_decode_device, dm_decode_dm_target_spec): Likewise.
+	* loop.c (decode_loop_info, decode_loop_info64): Likewise.
+	* v4l2.c (print_v4l2_capability, print_v4l2_fmtdesc,
+	print_v4l2_standard, print_v4l2_input, print_v4l2_tuner,
+	print_v4l2_queryctrl): Likewise.
+	* netlink_sock_diag.c (decode_smc_diag_lgrinfo): Use PRINT_FIELD_CSTRING
+	instead of PRINT_FIELD_STRING.
+	* uname.c (PRINT_UTS_MEMBER): Remove.
+	(SYS_FUNC(uname)): Use PRINT_FIELD_CSTRING instead of PRINT_UTS_MEMBER.
+
+2017-07-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Rename PRINT_FIELD_QUOTED_STRING to PRINT_FIELD_STRING.
+	As string fields are always qouted when printed, choose a shorter name
+	for the helper macro.
+
+	* print_fields.h (PRINT_FIELD_QUOTED_STRING): Rename
+	to PRINT_FIELD_STRING.  All callers updated.
+
+2017-07-10  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update RWF_* constants.
+	* xlat/rwf_flags.in: Add RWF_NOWAIT introduced by linux kernel
+	commit v4.12-rc5-150-gb745fafa.
+
+	Intorduce PRINT_FIELD_0X.
+	* print_fields.h (PRINT_FIELD_0X): New macro.
+	* sockaddr.c (print_sockaddr_data_ipx, print_sockaddr_data_nl): Use it
+	instead of manual tprintf statements.
+	* netlink_sock_diag.c (PRINT_FIELD_SMC_DIAG_CONNINFO_FLAGS): Remove.
+	(decode_smc_diag_conninfo): Replace it with PRINT_FIELD_0X.
+
+	print_inet_addr: use inet_addr-based output format for IPv4.
+	* sockaddr.c (print_inet_addr): Remove af_name variable.
+	<AF_INET>: Use inet_addr-based output format.
+	* tests/netlink_sock_diag.c (test_inet_diag_sockid, test_inet_diag_req,
+	test_inet_diag_req_v2, test_inet_diag_msg, test_smc_diag_req,
+	test_smc_diag_msg): Update expected output.
+	* tests/nlattr_inet_diag_msg.c (print_inet_diag_msg): Likewise.
+	* tests/nlattr_smc_diag_msg.c (print_smc_diag_msg): Likewise.
+
+2017-07-10  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of netlink smc_diag_msg attributes.
+	* tests/nlattr_smc_diag_msg.c: New file.
+	* tests/gen_tests.in (nlattr_smc_diag_msg): New entry.
+	* tests/pure_executables.list: Add nlattr_smc_diag_msg.
+	* tests/.gitignore: Likewise.
+
+	netlink: decode AF_SMC smc_diag_msg attributes.
+	* linux/smc_diag.h (smc_diag_cursor, smc_diag_conninfo
+	smc_diag_linkinfo, smc_diag_lgrinfo): New structures.
+	* netlink_sock_diag.c: Include "xlat/smc_link_group_roles.h".
+	(decode_smc_diag_conninfo, decode_smc_diag_lgrinfo): New functions.
+	(smc_diag_msg_nla_decoders): New array.
+	(decode_smc_diag_msg): Use it.
+	* xlat/smc_link_group_roles.in: New file.
+
+2017-07-10  Nikolay Marchuk  <marchuk.nikolay.a@gmail.com>
+
+	pathtrace.c: introduce user-provided sets of paths.
+	* defs.h (struct path_set): New structure.
+	(global_path_set): New variable prototype.
+	(tracing_paths): Change macro body to use global_path_set variable.
+	(pathtrace_select_set): Add "struct path_set *" argument.
+	(pathtrace_match_set): Likewise.  Change return type to bool.
+	(pathtrace_select, pathtrace_match): Change into thin macro wrappers
+	around pathtrace_select_set and pathtrace_match_set, repsectively.
+	* pathtrace.c (global_path_set): New variable.
+	(storepath, pathtrace_select_set): Add "struct path_set *" argument.
+	(pathmatch, upathmatch, fdmatch, pathtrace_match_set): Likewise.
+	Change return type to bool.
+
+2017-07-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: check decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP.
+	* tests/group_req.c: New file.
+	* tests/gen_tests.in (group_req): New entry.
+	* tests/pure_executables.list: Add group_req.
+	* tests/.gitignore: Likewise.
+
+2017-07-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Mpersify struct group_req.
+	The size of struct group_req depends on alignment of long and therefore
+	has to be mpersified.
+
+	* print_group_req.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* net.c (print_group_req): Move to print_group_req.c, wrap into
+	MPERS_PRINTER_DECL.
+
+2017-07-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	net: enhance decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP.
+	* net.c (print_group_req): Allow option length greater than
+	sizeof(struct group_req) to match the kernel behaviour.
+	When the option length is invalid, print the address.
+	* NEWS: Mention this.
+
+2017-07-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	net: hook up MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP decoding for SOL_IPV6.
+	As multicast socket options are shared between IPv4 and IPv6,
+	they should be decoded both for SOL_IP and SOL_IPV6.
+
+	* net.c (print_setsockopt) <SOL_IPV6> [MCAST_JOIN_GROUP]: Handle
+	MCAST_JOIN_GROUP and MCAST_LEAVE_GROUP.
+
+2017-07-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: add MCAST_* to sockipv6options.
+	Multicast socket options are shared between IPv4 and IPv6.
+
+	* xlat/sockipv6options.in: Add MCAST_JOIN_GROUP, MCAST_BLOCK_SOURCE,
+	MCAST_UNBLOCK_SOURCE, MCAST_LEAVE_GROUP, MCAST_JOIN_SOURCE_GROUP,
+	MCAST_LEAVE_SOURCE_GROUP, and MCAST_MSFILTER.
+
+2017-07-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	net: enhance decoding of IP_ADD_MEMBERSHIP et al socket options.
+	* net.c (print_mreq, print_mreq6): Treat negative option length
+	as invalid to match the kernel behaviour.  When the option length
+	is invalid, print the address.
+	* NEWS: Mention it.
+	* tests/ip_mreq.c (main): Check it.  Update expected output.
+
+	net: enhance decoding of setsockopt's SO_LINGER negative option length.
+	* net.c (print_set_linger): Treat negative option length as invalid
+	to match the kernel behaviour.
+	* tests/so_linger.c (main): Check it.
+
+	msghdr: use PRINT_FIELD_* macros.
+	* msghdr.c (print_scm_creds): Use PRINT_FIELD_U and PRINT_FIELD_UID.
+	(print_cmsg_ip_recverr): Use PRINT_FIELD_U.
+	(print_struct_msghdr): Use PRINT_FIELD_U and PRINT_FIELD_FLAGS.
+
+	Intorduce PRINT_FIELD_SOCKADDR.
+	* print_fields.h (PRINT_FIELD_SOCKADDR): New macro.
+	* msghdr.c (print_cmsg_ip_recverr): Use it instead of print_sockaddr.
+	* net.c (print_group_req): Likewise.
+	* sock.c (PRINT_IFREQ_ADDR): Remove.
+	(print_ifreq, print_ifconf_ifreq): Use PRINT_FIELD_SOCKADDR
+	instead of PRINT_IFREQ_ADDR.
+
+2017-07-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	print_sockaddr: remove "struct tcb *" argument.
+	print_sockaddr does not use its first argument, remove it.
+
+	* defs.h (print_sockaddr): Remove argument.
+	* sockaddr.c (print_sockaddr): Remove argument.  All callers updated.
+	* sock.c (PRINT_IFREQ_ADDR): Likewise.
+
+2017-07-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	net: use PRINT_FIELD_* macros.
+	* net.c (print_tpacket_stats, print_tpacket_req): Use PRINT_FIELD_U.
+	(print_group_req): Use PRINT_FIELD_IFINDEX.
+	(print_packet_mreq): Use PRINT_FIELD_IFINDEX, PRINT_FIELD_U,
+	and PRINT_FIELD_XVAL.
+
+	netlink_sock_diag: introduce PRINT_FIELD_INET_DIAG_SOCKID.
+	* netlink_sock_diag.c (PRINT_FIELD_INET_DIAG_SOCKID): New macro.
+	(decode_inet_diag_req_compat, decode_inet_diag_req_v2,
+	decode_inet_diag_msg, decode_smc_diag_req, decode_smc_diag_msg): Use it
+	instead of print_inet_diag_sockid.
+
+	Intorduce PRINT_FIELD_DEV.
+	* print_fields.h (PRINT_FIELD_DEV): New macro.
+	* dm.c (dm_decode_device, dm_decode_dm_name_list): Use it
+	instead of print_dev_t.
+	* loop.c (decode_loop_info, decode_loop_info64): Likewise.
+	* netlink_sock_diag.c (decode_unix_diag_vfs): Likewise.
+
+	Intorduce PRINT_FIELD_INET4_ADDR.
+	* print_fields.h (PRINT_FIELD_INET4_ADDR): New macro.
+	* msghdr.c (print_cmsg_ip_pktinfo): Use it instead of manual
+	tprintf statements.
+	* net.c (print_mreq): Likewise.
+	* sockaddr.c (print_sockaddr_data_in): Likewise.
+
+	Intorduce PRINT_FIELD_NET_PORT.
+	* print_fields.h (PRINT_FIELD_NET_PORT): New macro.
+	* netlink_sock_diag.c (print_inet_diag_sockid): Use it
+	instead of a manual tprintf statement.
+	* sockaddr.c (print_sockaddr_data_in, print_sockaddr_data_in6,
+	print_sockaddr_data_ipx): Likewise.
+
+	Intorduce PRINT_FIELD_IFINDEX.
+	* print_fields.h (PRINT_FIELD_IFINDEX): New macro.
+	* msghdr.c (print_cmsg_ip_pktinfo): Use it instead of print_ifindex.
+	* net.c (print_mreq6): Likewise.
+	* netlink_sock_diag.c (print_packet_diag_mclist,
+	print_inet_diag_sockid): Likewise.
+	* sockaddr.c (print_sockaddr_data_in6, print_sockaddr_data_ll):
+	Likewise.
+
+	Intorduce PRINT_FIELD_INET_ADDR.
+	* print_fields.h (PRINT_FIELD_INET_ADDR): New macro.
+	* net.c (print_mreq6): Use it instead of print_inet_addr.
+	* netlink_sock_diag.c (print_inet_diag_sockid): Likewise.
+	* sockaddr.c (print_sockaddr_data_in6): Likewise.
+
+	net: move print_ifindex to a separate file.
+	* print_ifindex.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* net.c (print_ifindex): Move to print_ifindex.c.
+
+	net: move parsers of bind, listen, and shutdown to separate files.
+	* bind.c: New file.
+	* listen.c: Likewise.
+	* shutdown.c: Likewise.
+	* Makefile.am (strace_SOURCES): Add them.
+	* net.c (SYS_FUNC(bind)): Move to bind.c.
+	(SYS_FUNC(listen)): Move to listen.c.
+	(SYS_FUNC(shutdown)): Move to shutdown.c.
+
+2017-07-09  JingPiao Chen  <chenjingpiao@gmail.com>
+	    Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: check decoding of packet_diag_msg attributes.
+	* tests/netlink_sock_diag-v.sh: New file.
+	* tests/Makefile.am (EXTRA_DIST): Add it.
+	* tests/nlattr_packet_diag_msg.c: New file.
+	* tests/gen_tests.in (nlattr_packet_diag_msg): New entry.
+	* tests/pure_executables.list: Add nlattr_packet_diag_msg.
+	* tests/.gitignore: Likewise.
+
+	netlink: decode AF_PACKET packet_diag_msg attributes.
+	* linux/packet_diag.h (packet_diag_info, packet_diag_mclist,
+	packet_diag_ring): New structures.
+	(PDI_*): New macros.
+	* netlink_sock_diag.c: Include <linux/filter.h>
+	and "xlat/packet_diag_info_flags.h".
+	(decode_packet_diag_info, decode_packet_diag_mclist,
+	decode_packet_diag_ring, decode_packet_diag_filter): New functions.
+	(packet_diag_msg_nla_decoders): New array.
+	(decode_packet_diag_msg): Use it.
+	* print_fields.h (PRINT_FIELD_QUOTED_STRING): New macro.
+	* xlat/packet_diag_info_flags.in: New file.
+
+2017-07-09  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: fix TEST_NLATTR_OBJECT and TEST_NLATTR_ARRAY for large objects.
+	commit v4.17-161-gdbd0605 that adjusted TEST_NLATTR_OBJECT and
+	TEST_NLATTR_ARRAY for large objects, only changed the pattern
+	print length, large length still can be specified as nla_data_len,
+	resulting to output mismatch.
+
+	* tests/test_nlattr.h (TEST_NLATTR_OBJECT): Pass "plen"
+	both as nla_data_len and slen arguments of TEST_NLATTR_
+	in len < sizeof(object) case.
+	(TEST_NLATTR_ARRAY): Likewise, Pass "plen" both as nla_data_len
+	and slen arguments of TEST_NLATTR_ in len < sizeof(object[0]) case.
+
+2017-07-09  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: introduce TEST_NLATTR_nla macro in test_nlattr.h.
+	Explicitly make struct nlattr * pointer which is internal
+	to TEST_NLATTR_ macro available to its varadic arguments.
+
+	* tests/test_nlattr.h (TEST_NLATTR_): Rename nla to TEST_NLATTR_nla.
+
+2017-07-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: check decoding of SO_PEERCRED socket option.
+	* tests/so_peercred.c: New file.
+	* tests/gen_tests.in (so_peercred): New entry.
+	* tests/pure_executables.list: Add so_peercred.
+	* tests/.gitignore: Likewise.
+
+	net: accept arbitrary option length for getsockopt's SO_PEERCRED.
+	* print_fields.h (PRINT_FIELD_UID): New macro.
+	* net.c (print_ucred): Rewrite to match the kernel behaviour.
+	* NEWS: Mention this.
+
+	tests: check decoding of socket filters.
+	* tests/sock_filter-v.c: New file.
+	* tests/gen_tests.in (sock_filter-v): New entry.
+	* tests/pure_executables.list: Add sock_filter-v.
+	* tests/.gitignore: Likewise.
+
+	Implement decoding of linux socket filter programs.
+	* bpf_sock_filter.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* xlat/skf_ad.in: New file.
+	* defs.h (decode_sock_fprog, print_sock_fprog): New prototypes.
+	* fetch_bpf_fprog.c (get_bpf_fprog_size): New mpers printer.
+	* net.c (print_getsockopt): Use decode_sock_fprog to print
+	socket filter programs for SO_GET_FILTER socket option.
+	(print_setsockopt): Use decode_sock_fprog and get_bpf_fprog_size
+	to print socket filter programs for SO_ATTACH_FILTER
+	and SO_ATTACH_REUSEPORT_CBPF socket options.
+	* NEWS: Mention this.
+
+	tests: check decoding of SO_LINGER socket option.
+	* tests/so_linger.c: New file.
+	* tests/gen_tests.in (so_linger): New entry.
+	* tests/pure_executables.list: Add so_linger.
+	* tests/.gitignore: Likewise.
+
+	tests: fix print_quoted_hex output of bytes with high bit set.
+	* tests/tests.h (print_quoted_memory, print_quoted_hex): Change the type
+	of first argument from "const char *" to "const void *".
+	* tests/print_quoted_string.c: Likewise.
+	(print_quoted_hex): Print bytes as unsigned char objects to avoid
+	unwanted sign extension.
+	* tests/netlink_protocol.c (send_query): Remove the cast of print_quoted_hex
+	first argument which is now redundant.
+
+	net: accept arbitrary option length for getsockopt's SO_LINGER.
+	* net.c (print_linger): Rename to print_set_linger.
+	(print_setsockopt): Replace print_linger with print_set_linger.
+	(print_get_linger): New function that accepts arbitrary option length
+	to match the kernel behaviour.
+	(print_getsockopt): Replace print_linger with print_get_linger.
+	* NEWS: Mention this.
+
+	net: accept large option length for SO_LINGER.
+	* net.c (print_linger): Allow len > sizeof(struct linger) to match
+	the kernel behaviour.
+
+	net: fix printing of struct linger's field names.
+	* net.c: Include "print_fields.h".
+	(print_linger): Print fields of struct linger using PRINT_FIELD_D.
+
+2017-07-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	net: enhance decoding of getsockopt's optlen argument.
+	As the last argument of getsockopt syscall has read-write semantics,
+	print both user and kernel values when they differ.
+
+	* net.c (SYS_FUNC(getsockopt)): On entering syscall, fetch and save
+	the length specified to the kernel.  On error, print the length saved
+	on entering.  When the saved length and the length returned by the
+	kernel differ, print both values.
+	* NEWS: Mention this.
+	* tests/net-icmp_filter.c (main): Update expected output.
+
+2017-07-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	net: move printing of [gs]etsockopt's socklen argument to toplevel parsers
+	* net.c (print_getsockopt, print_setsockopt): Remove "done" label,
+	replace "goto done" statement with "return".
+	Move printing of "len" argument ...
+	(SYS_FUNC(getsockopt), SYS_FUNC(setsockopt)): ... here.
+
+2017-07-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Generalize seccomp filter parser.
+	Linux socket filter uses almost the same classic BPF as seccomp filter,
+	The only difference noticeable from strace PoV is the meaning of generic
+	multiuse field.
+
+	Transform the parser of seccomp filters to a more generic parser
+	of classic BPF, parametrized with a method of parsing the generic
+	multiuse field in BPF_STMT.
+
+	* bpf_filter.c: New file.
+	* bpf_filter.h: Likewise.
+	* bpf_fprog.h: Likewise.
+	* bpf_seccomp_filter.c: Likewise.
+	* fetch_bpf_fprog.c: Likewise.
+	* fetch_seccomp_fprog.c: Remove.
+	* seccomp_fprog.h: Likewise.
+	* Makefile.am (strace_SOURCES): Add bpf_filter.c, bpf_filter.h,
+	bpf_fprog.h, bpf_seccomp_filter.c, and fetch_bpf_fprog.c.
+	Remove fetch_seccomp_fprog.c and seccomp_fprog.h.
+	* seccomp.c: Do not include linux/filter.h and xlat header files.
+	Do not define SECCOMP_RET_ACTION.
+	(bpf_filter, decode_bpf_code, decode_bpf_stmt, decode_bpf_jump,
+	print_bpf_filter, print_seccomp_fprog, print_seccomp_filter): Remove.
+	* defs.h (print_seccomp_filter): Rename to decode_seccomp_fprog.
+	(SYS_FUNC(seccomp)): Replace print_seccomp_filter
+	with decode_seccomp_fprog.
+	* prctl.c (SYS_FUNC(prctl)): Likewise.
+
+2017-07-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Assume that <linux/filter.h> is always available.
+	<linux/filter.h> was introduced in linux 2.1.75, way before
+	the minimal kernel version supported by strace.
+
+	* configure.ac (AC_CHECK_HEADERS): Remove linux/filter.h.
+	* seccomp.c: Assume HAVE_LINUX_FILTER_H.
+	* tests/prctl-seccomp-filter-v.c: Likewise.
+	* tests/seccomp-filter-v.c: Likewise.
+	* tests/seccomp-filter.c: Likewise.
+
+2017-07-07  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: add BPF_END to BPF_ALU opcode list.
+	BPF_END is one of three eBPF-only opcodes for BPF_ALU class.
+	Other two (BPF_MOV and BPF_ARSH) has been added earlier.
+
+	* xlat/bpf_op_alu.in: Add BPF_END.
+
+2017-07-07  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink_sock_diag: print unrecognized data in hex.
+	* netlink_sock_diag.c (decode_family): Replace printstrn with
+	printstr_ex and set QUOTE_FORCE_HEX flag.
+	* tests/netlink_sock_diag.c (test_odd_family_req,
+	test_odd_family_msg): Update expected output.
+
+	netlink: print unrecognized nlattr in hex.
+	* nlattr.c (fetch_nlattr): Replace printstrn
+	with printstr_ex and set QUOTE_FORCE_HEX flag.
+	* tests/nlattr.c (test_nlattr): Update expected output.
+
+	netlink: print unrecognized netlink messages in hex.
+	* netlink.c (fetch_nlmsghdr): Replace printstrn
+	with printstr_ex and set QUOTE_FORCE_HEX flag.
+	* tests/netlink_protocol.c (send_query): Update expected output.
+
+	netlink: print unrecognized netlink payload in hex.
+	* netlink.c (decode_payload): Replace printstrn
+	with printstr_ex and set QUOTE_FORCE_HEX flag.
+	* tests/netlink_protocol.c (send_query, test_nlmsgerr,
+	test_nlmsg_done): Update expected output.
+	* tests/netlink_generic.c (test_nlmsg_type): Likewise.
+
+	netlink: print unrecognized nlmsgerr in hex.
+	* netlink.c (decode_nlmsgerr): Replace printstrn
+	with printstr_ex and set QUOTE_FORCE_HEX flag.
+	* tests/netlink_protocol.c (test_nlmsgerr): Update expected output.
+
+	netlink: print unrecognized attribute data in hex.
+	* nlattr.c (decode_nlattr_with_data): Replace printstrn
+	with printstr_ex and set QUOTE_FORCE_HEX flag.
+	* tests/tests.h (print_quoted_hex): New prototype.
+	* tests/print_quoted_string.c (print_quoted_hex): New function.
+	* tests/test_nlattr.h (TEST_NLATTR_OBJECT, TEST_NLATTR_ARRAY): Use it
+	for updated expected output.  Change the type of "plen" variable
+	to unsigned int.
+	* tests/nlattr.c (test_nlattr): Update expected output.
+
+	tests: print quotation marks in print_quoted_memory.
+	* tests/print_quoted_string.c (print_quoted_memory): Print opening
+	and closing quotation marks.
+	* tests/getcwd.c (main): Do not print quotation marks around
+	print_quoted_string.
+	* tests/uname.c (main): Likewise.
+	* tests/keyctl.c (print_quoted_string_limit): Do not print quotation
+	marks around print_quoted_memory.
+	* tests/netlink_protocol.c (send_query): Likewise.
+	* tests/xattr.c (main): Likewise.
+
+2017-07-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	strace.1: remove misleading remark that -i option is weakly supported.
+	Given that -i functionality is covered by pc.test, the remark that
+	it is weakly supported is wrong.
+
+	* strace.1 (BUGS): Remove the remark about weakly supported -i option.
+
+2017-07-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Post-release administrivia.
+	* NEWS: Add a header line for the next release.
+	* debian/changelog.in: Add a changelog entry for 4.18-1.
+	* strace.spec.in: Likewise.
+
 2017-07-05  Dmitry V. Levin  <ldv@altlinux.org>
 
 	Prepare for 4.18 release.
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 37b43af..0000000
--- a/Makefile
+++ /dev/null
@@ -1,6885 +0,0 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
-# Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-
-# Automake input for strace.
-#
-# Copyright (c) 2002-2009 Roland McGrath <roland@redhat.com>
-# Copyright (c) 2006-2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2008-2015 Mike Frysinger <vapier@gentoo.org>
-# Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
-# Copyright (c) 2002-2017 The strace developers.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-#    derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# scno.h make rules for strace.
-#
-# Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-#    derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/strace
-pkgincludedir = $(includedir)/strace
-pkglibdir = $(libdir)/strace
-pkglibexecdir = $(libexecdir)/strace
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-pc-linux-gnu
-host_triplet = x86_64-pc-linux-gnu
-bin_PROGRAMS = strace$(EXEEXT)
-DIST_COMMON = $(srcdir)/xlat/Makemodule.am $(srcdir)/scno.am \
-	$(srcdir)/mpers.am $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/configure $(am__configure_deps) \
-	$(srcdir)/config.h.in $(srcdir)/strace.spec.in \
-	$(top_srcdir)/debian/changelog.in depcomp AUTHORS COPYING \
-	INSTALL NEWS README compile config.guess config.sub install-sh \
-	missing
-#am__append_1 = unwind.c
-#am__append_2 = $(libunwind_CPPFLAGS)
-#am__append_3 = $(libunwind_LDFLAGS)
-#am__append_4 = $(libunwind_LIBS)
-am__append_5 = libmpers-m32.a
-am__append_6 = libmpers-m32.a
-am__append_7 = $(mpers_m32_targets)
-am__append_8 = $(mpers_m32_targets)
-am__append_9 = libmpers-mx32.a
-am__append_10 = libmpers-mx32.a
-am__append_11 = $(mpers_mx32_targets)
-am__append_12 = $(mpers_mx32_targets)
-subdir = .
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_code_coverage.m4 \
-	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
-	$(top_srcdir)/m4/ax_valgrind_check.m4 \
-	$(top_srcdir)/m4/mpers.m4 \
-	$(top_srcdir)/m4/st_save_restore_var.m4 \
-	$(top_srcdir)/m4/st_warn_cflags.m4 \
-	$(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = strace.spec debian/changelog
-CONFIG_CLEAN_VPATH_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-AM_V_AR = $(am__v_AR_$(V))
-am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
-am__v_AR_0 = @echo "  AR      " $@;
-am__v_AR_1 = 
-libmpers_m32_a_AR = $(AR) $(ARFLAGS)
-libmpers_m32_a_LIBADD =
-am__libmpers_m32_a_SOURCES_DIST = block.c btrfs.c dirent.c evdev.c \
-	fetch_seccomp_fprog.c fetch_struct_flock.c \
-	fetch_struct_mmsghdr.c fetch_struct_msghdr.c \
-	fetch_struct_stat.c fetch_struct_stat64.c \
-	fetch_struct_statfs.c hdio.c ipc_msgctl.c ipc_shmctl.c loop.c \
-	mtd.c print_mq_attr.c print_msgbuf.c print_sg_req_info.c \
-	print_sigevent.c print_time.c print_timespec.c print_timeval.c \
-	print_timex.c printrusage.c printsiginfo.c rt_sigreturn.c \
-	rtc.c sg_io_v3.c sigaltstack.c sock.c sysinfo.c times.c \
-	ustat.c utime.c v4l2.c
-am__objects_1 = libmpers_m32_a-block.$(OBJEXT) \
-	libmpers_m32_a-btrfs.$(OBJEXT) libmpers_m32_a-dirent.$(OBJEXT) \
-	libmpers_m32_a-evdev.$(OBJEXT) \
-	libmpers_m32_a-fetch_seccomp_fprog.$(OBJEXT) \
-	libmpers_m32_a-fetch_struct_flock.$(OBJEXT) \
-	libmpers_m32_a-fetch_struct_mmsghdr.$(OBJEXT) \
-	libmpers_m32_a-fetch_struct_msghdr.$(OBJEXT) \
-	libmpers_m32_a-fetch_struct_stat.$(OBJEXT) \
-	libmpers_m32_a-fetch_struct_stat64.$(OBJEXT) \
-	libmpers_m32_a-fetch_struct_statfs.$(OBJEXT) \
-	libmpers_m32_a-hdio.$(OBJEXT) \
-	libmpers_m32_a-ipc_msgctl.$(OBJEXT) \
-	libmpers_m32_a-ipc_shmctl.$(OBJEXT) \
-	libmpers_m32_a-loop.$(OBJEXT) libmpers_m32_a-mtd.$(OBJEXT) \
-	libmpers_m32_a-print_mq_attr.$(OBJEXT) \
-	libmpers_m32_a-print_msgbuf.$(OBJEXT) \
-	libmpers_m32_a-print_sg_req_info.$(OBJEXT) \
-	libmpers_m32_a-print_sigevent.$(OBJEXT) \
-	libmpers_m32_a-print_time.$(OBJEXT) \
-	libmpers_m32_a-print_timespec.$(OBJEXT) \
-	libmpers_m32_a-print_timeval.$(OBJEXT) \
-	libmpers_m32_a-print_timex.$(OBJEXT) \
-	libmpers_m32_a-printrusage.$(OBJEXT) \
-	libmpers_m32_a-printsiginfo.$(OBJEXT) \
-	libmpers_m32_a-rt_sigreturn.$(OBJEXT) \
-	libmpers_m32_a-rtc.$(OBJEXT) libmpers_m32_a-sg_io_v3.$(OBJEXT) \
-	libmpers_m32_a-sigaltstack.$(OBJEXT) \
-	libmpers_m32_a-sock.$(OBJEXT) libmpers_m32_a-sysinfo.$(OBJEXT) \
-	libmpers_m32_a-times.$(OBJEXT) libmpers_m32_a-ustat.$(OBJEXT) \
-	libmpers_m32_a-utime.$(OBJEXT) libmpers_m32_a-v4l2.$(OBJEXT)
-am_libmpers_m32_a_OBJECTS = $(am__objects_1)
-libmpers_m32_a_OBJECTS = $(am_libmpers_m32_a_OBJECTS)
-libmpers_mx32_a_AR = $(AR) $(ARFLAGS)
-libmpers_mx32_a_LIBADD =
-am__libmpers_mx32_a_SOURCES_DIST = block.c btrfs.c dirent.c evdev.c \
-	fetch_seccomp_fprog.c fetch_struct_flock.c \
-	fetch_struct_mmsghdr.c fetch_struct_msghdr.c \
-	fetch_struct_stat.c fetch_struct_stat64.c \
-	fetch_struct_statfs.c hdio.c ipc_msgctl.c ipc_shmctl.c loop.c \
-	mtd.c print_mq_attr.c print_msgbuf.c print_sg_req_info.c \
-	print_sigevent.c print_time.c print_timespec.c print_timeval.c \
-	print_timex.c printrusage.c printsiginfo.c rt_sigreturn.c \
-	rtc.c sg_io_v3.c sigaltstack.c sock.c sysinfo.c times.c \
-	ustat.c utime.c v4l2.c
-am__objects_2 = libmpers_mx32_a-block.$(OBJEXT) \
-	libmpers_mx32_a-btrfs.$(OBJEXT) \
-	libmpers_mx32_a-dirent.$(OBJEXT) \
-	libmpers_mx32_a-evdev.$(OBJEXT) \
-	libmpers_mx32_a-fetch_seccomp_fprog.$(OBJEXT) \
-	libmpers_mx32_a-fetch_struct_flock.$(OBJEXT) \
-	libmpers_mx32_a-fetch_struct_mmsghdr.$(OBJEXT) \
-	libmpers_mx32_a-fetch_struct_msghdr.$(OBJEXT) \
-	libmpers_mx32_a-fetch_struct_stat.$(OBJEXT) \
-	libmpers_mx32_a-fetch_struct_stat64.$(OBJEXT) \
-	libmpers_mx32_a-fetch_struct_statfs.$(OBJEXT) \
-	libmpers_mx32_a-hdio.$(OBJEXT) \
-	libmpers_mx32_a-ipc_msgctl.$(OBJEXT) \
-	libmpers_mx32_a-ipc_shmctl.$(OBJEXT) \
-	libmpers_mx32_a-loop.$(OBJEXT) libmpers_mx32_a-mtd.$(OBJEXT) \
-	libmpers_mx32_a-print_mq_attr.$(OBJEXT) \
-	libmpers_mx32_a-print_msgbuf.$(OBJEXT) \
-	libmpers_mx32_a-print_sg_req_info.$(OBJEXT) \
-	libmpers_mx32_a-print_sigevent.$(OBJEXT) \
-	libmpers_mx32_a-print_time.$(OBJEXT) \
-	libmpers_mx32_a-print_timespec.$(OBJEXT) \
-	libmpers_mx32_a-print_timeval.$(OBJEXT) \
-	libmpers_mx32_a-print_timex.$(OBJEXT) \
-	libmpers_mx32_a-printrusage.$(OBJEXT) \
-	libmpers_mx32_a-printsiginfo.$(OBJEXT) \
-	libmpers_mx32_a-rt_sigreturn.$(OBJEXT) \
-	libmpers_mx32_a-rtc.$(OBJEXT) \
-	libmpers_mx32_a-sg_io_v3.$(OBJEXT) \
-	libmpers_mx32_a-sigaltstack.$(OBJEXT) \
-	libmpers_mx32_a-sock.$(OBJEXT) \
-	libmpers_mx32_a-sysinfo.$(OBJEXT) \
-	libmpers_mx32_a-times.$(OBJEXT) \
-	libmpers_mx32_a-ustat.$(OBJEXT) \
-	libmpers_mx32_a-utime.$(OBJEXT) libmpers_mx32_a-v4l2.$(OBJEXT)
-am_libmpers_mx32_a_OBJECTS = $(am__objects_2)
-libmpers_mx32_a_OBJECTS = $(am_libmpers_mx32_a_OBJECTS)
-libstrace_a_AR = $(AR) $(ARFLAGS)
-libstrace_a_LIBADD =
-am_libstrace_a_OBJECTS = libstrace_a-fstatfs.$(OBJEXT) \
-	libstrace_a-fstatfs64.$(OBJEXT) libstrace_a-ipc.$(OBJEXT) \
-	libstrace_a-sigreturn.$(OBJEXT) \
-	libstrace_a-socketcall.$(OBJEXT) libstrace_a-statfs.$(OBJEXT) \
-	libstrace_a-statfs64.$(OBJEXT) \
-	libstrace_a-sync_file_range.$(OBJEXT) \
-	libstrace_a-sync_file_range2.$(OBJEXT) \
-	libstrace_a-upeek.$(OBJEXT) libstrace_a-upoke.$(OBJEXT)
-libstrace_a_OBJECTS = $(am_libstrace_a_OBJECTS)
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
-	"$(DESTDIR)$(man1dir)"
-PROGRAMS = $(bin_PROGRAMS)
-am__strace_SOURCES_DIST = access.c affinity.c aio.c alpha.c bjm.c \
-	block.c bpf.c btrfs.c cacheflush.c capability.c caps0.h \
-	caps1.h chdir.c chmod.c clone.c copy_file_range.c count.c \
-	defs.h desc.c dirent.c dirent64.c dm.c empty.h epoll.c evdev.c \
-	eventfd.c execve.c fadvise.c fallocate.c fanotify.c fchownat.c \
-	fcntl.c fetch_seccomp_fprog.c fetch_struct_flock.c \
-	fetch_struct_mmsghdr.c fetch_struct_msghdr.c \
-	fetch_struct_stat.c fetch_struct_stat64.c \
-	fetch_struct_statfs.c file_handle.c file_ioctl.c fs_x_ioctl.c \
-	flock.c flock.h futex.c gcc_compat.h get_robust_list.c \
-	getcpu.c getcwd.c getrandom.c hdio.c hostname.c inotify.c io.c \
-	ioctl.c ioperm.c iopl.c ioprio.c ipc_defs.h ipc_msg.c \
-	ipc_msgctl.c ipc_sem.c ipc_shm.c ipc_shmctl.c kcmp.c \
-	kernel_types.h kexec.c keyctl.c ldt.c link.c linux/asm_stat.h \
-	linux/x32/asm_stat.h linux/x86_64/asm_stat.h lookup_dcookie.c \
-	loop.c lseek.c mem.c membarrier.c memfd_create.c mknod.c \
-	mmsghdr.c mount.c mpers_type.h mq.c msghdr.c msghdr.h mtd.c \
-	native_defs.h net.c netlink.c nsfs.c nsfs.h nsig.h numa.c \
-	oldstat.c open.c or1k_atomic.c pathtrace.c perf.c \
-	perf_event_struct.h personality.c pkeys.c poll.c prctl.c \
-	print_dev_t.c print_mq_attr.c print_msgbuf.c \
-	print_sg_req_info.c print_sigevent.c print_statfs.c \
-	print_struct_stat.c print_time.c print_timespec.c \
-	print_timeval.c print_timex.c printmode.c printrusage.c \
-	printsiginfo.c printsiginfo.h process.c process_vm.c ptp.c \
-	ptrace.h qualify.c quota.c readahead.c readlink.c reboot.c \
-	regs.h renameat.c resource.c rt_sigframe.c rt_sigreturn.c \
-	rtc.c sched.c sched_attr.h scsi.c seccomp.c seccomp_fprog.h \
-	sendfile.c sg_io_v3.c sg_io_v4.c sigaltstack.c sigevent.h \
-	signal.c signalfd.c sock.c sockaddr.c socketutils.c \
-	sram_alloc.c stat.c stat.h stat64.c statfs.c statfs.h statx.c \
-	statx.h strace.c swapon.c syscall.c sysctl.c sysent.h \
-	sysinfo.c syslog.c sysmips.c term.c time.c times.c truncate.c \
-	ubi.c uid.c uid16.c umask.c umount.c uname.c userfaultfd.c \
-	ustat.c util.c utime.c utimes.c v4l2.c wait.c xattr.c xlat.h \
-	xmalloc.c unwind.c
-#am__objects_3 = strace-unwind.$(OBJEXT)
-am_strace_OBJECTS = strace-access.$(OBJEXT) strace-affinity.$(OBJEXT) \
-	strace-aio.$(OBJEXT) strace-alpha.$(OBJEXT) \
-	strace-bjm.$(OBJEXT) strace-block.$(OBJEXT) \
-	strace-bpf.$(OBJEXT) strace-btrfs.$(OBJEXT) \
-	strace-cacheflush.$(OBJEXT) strace-capability.$(OBJEXT) \
-	strace-chdir.$(OBJEXT) strace-chmod.$(OBJEXT) \
-	strace-clone.$(OBJEXT) strace-copy_file_range.$(OBJEXT) \
-	strace-count.$(OBJEXT) strace-desc.$(OBJEXT) \
-	strace-dirent.$(OBJEXT) strace-dirent64.$(OBJEXT) \
-	strace-dm.$(OBJEXT) strace-epoll.$(OBJEXT) \
-	strace-evdev.$(OBJEXT) strace-eventfd.$(OBJEXT) \
-	strace-execve.$(OBJEXT) strace-fadvise.$(OBJEXT) \
-	strace-fallocate.$(OBJEXT) strace-fanotify.$(OBJEXT) \
-	strace-fchownat.$(OBJEXT) strace-fcntl.$(OBJEXT) \
-	strace-fetch_seccomp_fprog.$(OBJEXT) \
-	strace-fetch_struct_flock.$(OBJEXT) \
-	strace-fetch_struct_mmsghdr.$(OBJEXT) \
-	strace-fetch_struct_msghdr.$(OBJEXT) \
-	strace-fetch_struct_stat.$(OBJEXT) \
-	strace-fetch_struct_stat64.$(OBJEXT) \
-	strace-fetch_struct_statfs.$(OBJEXT) \
-	strace-file_handle.$(OBJEXT) strace-file_ioctl.$(OBJEXT) \
-	strace-fs_x_ioctl.$(OBJEXT) strace-flock.$(OBJEXT) \
-	strace-futex.$(OBJEXT) strace-get_robust_list.$(OBJEXT) \
-	strace-getcpu.$(OBJEXT) strace-getcwd.$(OBJEXT) \
-	strace-getrandom.$(OBJEXT) strace-hdio.$(OBJEXT) \
-	strace-hostname.$(OBJEXT) strace-inotify.$(OBJEXT) \
-	strace-io.$(OBJEXT) strace-ioctl.$(OBJEXT) \
-	strace-ioperm.$(OBJEXT) strace-iopl.$(OBJEXT) \
-	strace-ioprio.$(OBJEXT) strace-ipc_msg.$(OBJEXT) \
-	strace-ipc_msgctl.$(OBJEXT) strace-ipc_sem.$(OBJEXT) \
-	strace-ipc_shm.$(OBJEXT) strace-ipc_shmctl.$(OBJEXT) \
-	strace-kcmp.$(OBJEXT) strace-kexec.$(OBJEXT) \
-	strace-keyctl.$(OBJEXT) strace-ldt.$(OBJEXT) \
-	strace-link.$(OBJEXT) strace-lookup_dcookie.$(OBJEXT) \
-	strace-loop.$(OBJEXT) strace-lseek.$(OBJEXT) \
-	strace-mem.$(OBJEXT) strace-membarrier.$(OBJEXT) \
-	strace-memfd_create.$(OBJEXT) strace-mknod.$(OBJEXT) \
-	strace-mmsghdr.$(OBJEXT) strace-mount.$(OBJEXT) \
-	strace-mq.$(OBJEXT) strace-msghdr.$(OBJEXT) \
-	strace-mtd.$(OBJEXT) strace-net.$(OBJEXT) \
-	strace-netlink.$(OBJEXT) strace-nsfs.$(OBJEXT) \
-	strace-numa.$(OBJEXT) strace-oldstat.$(OBJEXT) \
-	strace-open.$(OBJEXT) strace-or1k_atomic.$(OBJEXT) \
-	strace-pathtrace.$(OBJEXT) strace-perf.$(OBJEXT) \
-	strace-personality.$(OBJEXT) strace-pkeys.$(OBJEXT) \
-	strace-poll.$(OBJEXT) strace-prctl.$(OBJEXT) \
-	strace-print_dev_t.$(OBJEXT) strace-print_mq_attr.$(OBJEXT) \
-	strace-print_msgbuf.$(OBJEXT) \
-	strace-print_sg_req_info.$(OBJEXT) \
-	strace-print_sigevent.$(OBJEXT) strace-print_statfs.$(OBJEXT) \
-	strace-print_struct_stat.$(OBJEXT) strace-print_time.$(OBJEXT) \
-	strace-print_timespec.$(OBJEXT) strace-print_timeval.$(OBJEXT) \
-	strace-print_timex.$(OBJEXT) strace-printmode.$(OBJEXT) \
-	strace-printrusage.$(OBJEXT) strace-printsiginfo.$(OBJEXT) \
-	strace-process.$(OBJEXT) strace-process_vm.$(OBJEXT) \
-	strace-ptp.$(OBJEXT) strace-qualify.$(OBJEXT) \
-	strace-quota.$(OBJEXT) strace-readahead.$(OBJEXT) \
-	strace-readlink.$(OBJEXT) strace-reboot.$(OBJEXT) \
-	strace-renameat.$(OBJEXT) strace-resource.$(OBJEXT) \
-	strace-rt_sigframe.$(OBJEXT) strace-rt_sigreturn.$(OBJEXT) \
-	strace-rtc.$(OBJEXT) strace-sched.$(OBJEXT) \
-	strace-scsi.$(OBJEXT) strace-seccomp.$(OBJEXT) \
-	strace-sendfile.$(OBJEXT) strace-sg_io_v3.$(OBJEXT) \
-	strace-sg_io_v4.$(OBJEXT) strace-sigaltstack.$(OBJEXT) \
-	strace-signal.$(OBJEXT) strace-signalfd.$(OBJEXT) \
-	strace-sock.$(OBJEXT) strace-sockaddr.$(OBJEXT) \
-	strace-socketutils.$(OBJEXT) strace-sram_alloc.$(OBJEXT) \
-	strace-stat.$(OBJEXT) strace-stat64.$(OBJEXT) \
-	strace-statfs.$(OBJEXT) strace-statx.$(OBJEXT) \
-	strace-strace.$(OBJEXT) strace-swapon.$(OBJEXT) \
-	strace-syscall.$(OBJEXT) strace-sysctl.$(OBJEXT) \
-	strace-sysinfo.$(OBJEXT) strace-syslog.$(OBJEXT) \
-	strace-sysmips.$(OBJEXT) strace-term.$(OBJEXT) \
-	strace-time.$(OBJEXT) strace-times.$(OBJEXT) \
-	strace-truncate.$(OBJEXT) strace-ubi.$(OBJEXT) \
-	strace-uid.$(OBJEXT) strace-uid16.$(OBJEXT) \
-	strace-umask.$(OBJEXT) strace-umount.$(OBJEXT) \
-	strace-uname.$(OBJEXT) strace-userfaultfd.$(OBJEXT) \
-	strace-ustat.$(OBJEXT) strace-util.$(OBJEXT) \
-	strace-utime.$(OBJEXT) strace-utimes.$(OBJEXT) \
-	strace-v4l2.$(OBJEXT) strace-wait.$(OBJEXT) \
-	strace-xattr.$(OBJEXT) strace-xmalloc.$(OBJEXT) \
-	$(am__objects_3)
-strace_OBJECTS = $(am_strace_OBJECTS)
-am__DEPENDENCIES_1 =
-#am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
-strace_DEPENDENCIES = libstrace.a $(am__DEPENDENCIES_2) \
-	$(am__DEPENDENCIES_1) $(am__append_5) $(am__append_9)
-strace_LINK = $(CCLD) $(strace_CFLAGS) $(CFLAGS) $(strace_LDFLAGS) \
-	$(LDFLAGS) -o $@
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-SCRIPTS = $(bin_SCRIPTS)
-AM_V_P = $(am__v_P_$(V))
-am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
-am__v_at_1 = 
-DEFAULT_INCLUDES = 
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
-am__v_lt_0 = --silent
-am__v_lt_1 = 
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC      " $@;
-am__v_CC_1 = 
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD    " $@;
-am__v_CCLD_1 = 
-SOURCES = $(libmpers_m32_a_SOURCES) $(libmpers_mx32_a_SOURCES) \
-	$(libstrace_a_SOURCES) $(strace_SOURCES)
-DIST_SOURCES = $(am__libmpers_m32_a_SOURCES_DIST) \
-	$(am__libmpers_mx32_a_SOURCES_DIST) $(libstrace_a_SOURCES) \
-	$(am__strace_SOURCES_DIST)
-RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
-	ctags-recursive dvi-recursive html-recursive info-recursive \
-	install-data-recursive install-dvi-recursive \
-	install-exec-recursive install-html-recursive \
-	install-info-recursive install-pdf-recursive \
-	install-ps-recursive install-recursive installcheck-recursive \
-	installdirs-recursive pdf-recursive ps-recursive \
-	tags-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-man1dir = $(mandir)/man1
-NROFF = nroff
-MANS = $(man_MANS)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-am__recursive_targets = \
-  $(RECURSIVE_TARGETS) \
-  $(RECURSIVE_CLEAN_TARGETS) \
-  $(am__extra_recursive_targets)
-AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
-	cscope distdir dist dist-all distcheck
-am__extra_recursive_targets = check-valgrind-recursive
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
-	$(LISP)config.h.in
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-CSCOPE = cscope
-DIST_SUBDIRS = tests tests-m32 tests-mx32
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  if test -d "$(distdir)"; then \
-    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-      && rm -rf "$(distdir)" \
-      || { sleep 5 && rm -rf "$(distdir)"; }; \
-  else :; fi
-am__post_remove_distdir = $(am__remove_distdir)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz
-GZIP_ENV = --best
-DIST_TARGETS = dist-xz dist-gzip
-distuninstallcheck_listfiles = find . -type f -print
-am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
-  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
-distcleancheck_listfiles = find . -type f -print
-ACLOCAL = ${SHELL} /tmp/strace-4.17/missing aclocal-1.14
-AMTAR = $${TAR-tar}
-AM_DEFAULT_VERBOSITY = 1
-AUTOCONF = ${SHELL} /tmp/strace-4.17/missing autoconf
-AUTOHEADER = ${SHELL} /tmp/strace-4.17/missing autoheader
-AUTOMAKE = ${SHELL} /tmp/strace-4.17/missing automake-1.14
-AWK = gawk
-BUILD_EXEEXT = 
-BUILD_OBJEXT = 
-CC = gcc
-CCDEPMODE = depmode=gcc3
-CC_FOR_BUILD = gcc
-CFLAGS = -g -O2
-CFLAGS_FOR_BUILD = -g -O2
-CODE_COVERAGE_CFLAGS = 
-CODE_COVERAGE_CPPFLAGS = 
-CODE_COVERAGE_CXXFLAGS = 
-CODE_COVERAGE_ENABLED = no
-CODE_COVERAGE_LDFLAGS = 
-COPYRIGHT_YEAR = 2017
-CPP = gcc -E
-CPPFLAGS = 
-CPPFLAGS_FOR_BUILD = 
-CPP_FOR_BUILD = gcc -E
-CYGPATH_W = echo
-DEB_CHANGELOGTIME = Thu, 25 May 2017 15:09:49 -0700
-DEFS = -DHAVE_CONFIG_H
-DEPDIR = .deps
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = /bin/grep -E
-ENABLE_VALGRIND_drd = no
-ENABLE_VALGRIND_helgrind = no
-ENABLE_VALGRIND_memcheck = yes
-ENABLE_VALGRIND_sgcheck = 
-EXEEXT = 
-GCOV = 
-GENHTML = 
-GREP = /bin/grep
-INSTALL = /usr/bin/install -c
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
-LCOV = 
-LDFLAGS = 
-LDFLAGS_FOR_BUILD = 
-LIBOBJS = 
-LIBS = 
-LTLIBOBJS = 
-MAINT = #
-MAKEINFO = ${SHELL} /tmp/strace-4.17/missing makeinfo
-MIPS_ABI = 
-MKDIR_P = /bin/mkdir -p
-OBJEXT = o
-PACKAGE = strace
-PACKAGE_BUGREPORT = strace-devel@lists.sourceforge.net
-PACKAGE_NAME = strace
-PACKAGE_STRING = strace 4.17
-PACKAGE_TARNAME = strace
-PACKAGE_URL = https://strace.io
-PACKAGE_VERSION = 4.17
-PATH_SEPARATOR = :
-PERL = /usr/bin/perl
-RANLIB = ranlib
-RPM_CHANGELOGTIME = Thu May 25 2017
-SED = /bin/sed
-SET_MAKE = 
-SHELL = /bin/sh
-STRIP = 
-VALGRIND = valgrind
-VALGRIND_ENABLED = yes
-VERSION = 4.17
-WARN_CFLAGS =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
-WARN_CFLAGS_FOR_BUILD =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
-abs_builddir = /tmp/strace-4.17
-abs_srcdir = /tmp/strace-4.17
-abs_top_builddir = /tmp/strace-4.17
-abs_top_srcdir = /tmp/strace-4.17
-ac_ct_CC = gcc
-ac_ct_CC_FOR_BUILD = gcc
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = $${TAR-tar} chof - "$$tardir"
-am__untar = $${TAR-tar} xf -
-arch = x86_64
-arch_m32 = i386
-arch_mx32 = x32
-bindir = ${exec_prefix}/bin
-build = x86_64-pc-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = pc
-builddir = .
-datadir = ${datarootdir}
-datarootdir = ${prefix}/share
-dl_LIBS = -ldl
-docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
-dvidir = ${docdir}
-exec_prefix = ${prefix}
-host = x86_64-pc-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = pc
-htmldir = ${docdir}
-includedir = ${prefix}/include
-infodir = ${datarootdir}/info
-install_sh = ${SHELL} /tmp/strace-4.17/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-libunwind_CPPFLAGS = 
-libunwind_LDFLAGS = 
-libunwind_LIBS = 
-localedir = ${datarootdir}/locale
-localstatedir = ${prefix}/var
-mandir = ${datarootdir}/man
-mkdir_p = $(MKDIR_P)
-oldincludedir = /usr/include
-pdfdir = ${docdir}
-prefix = /usr/local
-program_transform_name = s,x,x,
-psdir = ${docdir}
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-srcdir = .
-sysconfdir = ${prefix}/etc
-target_alias = 
-top_build_prefix = 
-top_builddir = .
-top_srcdir = .
-valgrind_enabled_tools =  memcheck
-valgrind_tools = memcheck helgrind drd sgcheck
-TESTS_M32 = tests-m32
-TESTS_MX32 = tests-mx32
-SUBDIRS = tests $(TESTS_M32) $(TESTS_MX32)
-man_MANS = strace.1
-bin_SCRIPTS = strace-graph strace-log-merge
-OS = linux
-# ARCH is `i386', `m68k', `sparc', etc.
-ARCH = x86_64
-ACLOCAL_AMFLAGS = -I m4
-AM_CFLAGS = $(WARN_CFLAGS)
-AM_CPPFLAGS = -I$(builddir)/$(OS)/$(ARCH) \
-	      -I$(srcdir)/$(OS)/$(ARCH) \
-	      -I$(builddir)/$(OS) \
-	      -I$(srcdir)/$(OS) \
-	      -I$(builddir) \
-	      -I$(srcdir)
-
-AM_CFLAGS_FOR_BUILD = $(WARN_CFLAGS_FOR_BUILD)
-AM_CPPFLAGS_FOR_BUILD = $(AM_CPPFLAGS)
-XLAT_INPUT_FILES = xlat/access_flags.in xlat/addrfams.in \
-	xlat/adjtimex_modes.in xlat/adjtimex_state.in \
-	xlat/adjtimex_status.in xlat/advise.in xlat/af_packet_types.in \
-	xlat/archvals.in xlat/arp_hardware_types.in xlat/at_flags.in \
-	xlat/at_statx_sync_types.in xlat/atomic_ops.in \
-	xlat/audit_arch.in xlat/baud_options.in xlat/blkpg_ops.in \
-	xlat/bootflags1.in xlat/bootflags2.in xlat/bootflags3.in \
-	xlat/bpf_attach_flags.in xlat/bpf_attach_type.in \
-	xlat/bpf_class.in xlat/bpf_commands.in xlat/bpf_map_types.in \
-	xlat/bpf_map_update_elem_flags.in xlat/bpf_miscop.in \
-	xlat/bpf_mode.in xlat/bpf_op_alu.in xlat/bpf_op_jmp.in \
-	xlat/bpf_prog_types.in xlat/bpf_rval.in xlat/bpf_size.in \
-	xlat/bpf_src.in xlat/bsg_flags.in xlat/bsg_protocol.in \
-	xlat/bsg_subprotocol.in xlat/bt_protocols.in \
-	xlat/btrfs_balance_args.in xlat/btrfs_balance_ctl_cmds.in \
-	xlat/btrfs_balance_flags.in xlat/btrfs_balance_state.in \
-	xlat/btrfs_compress_types.in xlat/btrfs_defrag_flags.in \
-	xlat/btrfs_dev_replace_cmds.in \
-	xlat/btrfs_dev_replace_results.in \
-	xlat/btrfs_dev_replace_state.in xlat/btrfs_dev_stats_flags.in \
-	xlat/btrfs_dev_stats_values.in xlat/btrfs_features_compat.in \
-	xlat/btrfs_features_compat_ro.in \
-	xlat/btrfs_features_incompat.in xlat/btrfs_key_types.in \
-	xlat/btrfs_qgroup_ctl_cmds.in \
-	xlat/btrfs_qgroup_inherit_flags.in \
-	xlat/btrfs_qgroup_limit_flags.in \
-	xlat/btrfs_qgroup_status_flags.in xlat/btrfs_scrub_flags.in \
-	xlat/btrfs_send_flags.in xlat/btrfs_snap_flags_v2.in \
-	xlat/btrfs_space_info_flags.in xlat/btrfs_tree_objectids.in \
-	xlat/cacheflush_scope.in xlat/cap.in xlat/cap_mask0.in \
-	xlat/cap_mask1.in xlat/cap_version.in xlat/clockflags.in \
-	xlat/clocknames.in xlat/clone_flags.in xlat/cpuclocknames.in \
-	xlat/delete_module_flags.in xlat/dirent_types.in \
-	xlat/dm_flags.in xlat/efd_flags.in xlat/epollctls.in \
-	xlat/epollevents.in xlat/epollflags.in \
-	xlat/ethernet_protocols.in xlat/evdev_abs.in \
-	xlat/evdev_autorepeat.in xlat/evdev_ev.in \
-	xlat/evdev_ff_status.in xlat/evdev_ff_types.in \
-	xlat/evdev_keycode.in xlat/evdev_leds.in xlat/evdev_misc.in \
-	xlat/evdev_mtslots.in xlat/evdev_prop.in \
-	xlat/evdev_relative_axes.in xlat/evdev_snd.in \
-	xlat/evdev_switch.in xlat/evdev_sync.in xlat/f_owner_types.in \
-	xlat/f_seals.in xlat/falloc_flags.in xlat/fan_classes.in \
-	xlat/fan_event_flags.in xlat/fan_init_flags.in \
-	xlat/fan_mark_flags.in xlat/fcntl64cmds.in xlat/fcntlcmds.in \
-	xlat/fdflags.in xlat/fiemap_extent_flags.in \
-	xlat/fiemap_flags.in xlat/flockcmds.in xlat/fsmagic.in \
-	xlat/futexops.in xlat/futexwakecmps.in xlat/futexwakeops.in \
-	xlat/getrandom_flags.in xlat/getsockipoptions.in \
-	xlat/getsockipv6options.in xlat/hci_channels.in \
-	xlat/hw_breakpoint_len.in xlat/hw_breakpoint_type.in \
-	xlat/icmpfilterflags.in xlat/if_dqblk_valid.in \
-	xlat/if_dqinfo_flags.in xlat/if_dqinfo_valid.in \
-	xlat/iffflags.in xlat/inet_protocols.in xlat/inotify_flags.in \
-	xlat/inotify_init_flags.in xlat/ioctl_dirs.in \
-	xlat/ioprio_class.in xlat/ioprio_who.in xlat/ip_cmsg_types.in \
-	xlat/ipc_msg_flags.in xlat/ipccalls.in xlat/itimer_which.in \
-	xlat/kcmp_types.in xlat/kexec_arch_values.in \
-	xlat/kexec_file_load_flags.in xlat/kexec_load_flags.in \
-	xlat/key_perms.in xlat/key_reqkeys.in xlat/key_spec.in \
-	xlat/keyctl_commands.in xlat/lockfcmds.in xlat/loop_cmds.in \
-	xlat/loop_crypt_type_options.in xlat/loop_flags_options.in \
-	xlat/madvise_cmds.in xlat/mbindflags.in xlat/mctl_sync.in \
-	xlat/membarrier_cmds.in xlat/memfd_create_flags.in \
-	xlat/mempolicyflags.in xlat/mlock_flags.in \
-	xlat/mlockall_flags.in xlat/mmap_flags.in xlat/mmap_prot.in \
-	xlat/modem_flags.in xlat/modetypes.in \
-	xlat/module_init_flags.in xlat/mount_flags.in \
-	xlat/move_pages_flags.in xlat/mq_attr_flags.in \
-	xlat/mremap_flags.in xlat/msg_flags.in xlat/msgctl_flags.in \
-	xlat/mtd_file_mode_options.in xlat/mtd_flags_options.in \
-	xlat/mtd_mode_options.in xlat/mtd_nandecc_options.in \
-	xlat/mtd_otp_options.in xlat/mtd_type_options.in \
-	xlat/name_to_handle_at_flags.in xlat/netlink_flags.in \
-	xlat/netlink_protocols.in xlat/netlink_types.in \
-	xlat/notifyflags.in xlat/nt_descriptor_types.in \
-	xlat/open_access_modes.in xlat/open_mode_flags.in \
-	xlat/packet_mreq_type.in xlat/perf_attr_size.in \
-	xlat/perf_branch_sample_type.in xlat/perf_event_open_flags.in \
-	xlat/perf_event_read_format.in \
-	xlat/perf_event_sample_format.in xlat/perf_hw_cache_id.in \
-	xlat/perf_hw_cache_op_id.in xlat/perf_hw_cache_op_result_id.in \
-	xlat/perf_hw_id.in xlat/perf_sw_ids.in xlat/perf_type_id.in \
-	xlat/personality_flags.in xlat/personality_types.in \
-	xlat/pkey_access.in xlat/policies.in xlat/pollflags.in \
-	xlat/pr_cap_ambient.in xlat/pr_dumpable.in xlat/pr_fp_mode.in \
-	xlat/pr_mce_kill.in xlat/pr_mce_kill_policy.in \
-	xlat/pr_set_mm.in xlat/pr_tsc.in xlat/pr_unalign_flags.in \
-	xlat/prctl_options.in xlat/priorities.in \
-	xlat/ptp_flags_options.in xlat/ptrace_cmds.in \
-	xlat/ptrace_events.in xlat/ptrace_peeksiginfo_flags.in \
-	xlat/ptrace_setoptions_flags.in xlat/quota_formats.in \
-	xlat/quotacmds.in xlat/quotatypes.in xlat/rename_flags.in \
-	xlat/resource_flags.in xlat/resources.in xlat/rwf_flags.in \
-	xlat/sa_handler_values.in xlat/sched_flags.in \
-	xlat/schedulers.in xlat/scmvals.in xlat/scsi_sg_commands.in \
-	xlat/secbits.in xlat/seccomp_filter_flags.in \
-	xlat/seccomp_mode.in xlat/seccomp_ops.in \
-	xlat/seccomp_ret_action.in xlat/semctl_flags.in \
-	xlat/semop_flags.in xlat/setns_types.in \
-	xlat/setsockipoptions.in xlat/setsockipv6options.in \
-	xlat/sfd_flags.in xlat/sg_io_dxfer_direction.in \
-	xlat/sg_io_flags.in xlat/sg_io_info.in xlat/sg_scsi_reset.in \
-	xlat/shm_flags.in xlat/shm_resource_flags.in \
-	xlat/shmctl_flags.in xlat/shutdown_modes.in \
-	xlat/sigact_flags.in xlat/sigaltstack_flags.in \
-	xlat/sigbus_codes.in xlat/sigchld_codes.in \
-	xlat/sigemt_codes.in xlat/sigev_value.in xlat/sigfpe_codes.in \
-	xlat/sigill_codes.in xlat/siginfo_codes.in \
-	xlat/sigpoll_codes.in xlat/sigprocmaskcmds.in \
-	xlat/sigprof_codes.in xlat/sigsegv_codes.in \
-	xlat/sigsys_codes.in xlat/sigtrap_codes.in \
-	xlat/sock_type_flags.in xlat/socketcalls.in \
-	xlat/socketlayers.in xlat/sockipoptions.in \
-	xlat/sockipv6options.in xlat/sockipxoptions.in \
-	xlat/sockoptions.in xlat/sockpacketoptions.in \
-	xlat/sockrawoptions.in xlat/socksctpoptions.in \
-	xlat/socktcpoptions.in xlat/socktypes.in xlat/splice_flags.in \
-	xlat/sram_alloc_flags.in xlat/statfs_flags.in \
-	xlat/statx_attrs.in xlat/statx_masks.in xlat/swap_flags.in \
-	xlat/sync_file_range_flags.in xlat/sysctl_kern.in \
-	xlat/sysctl_net.in xlat/sysctl_net_core.in \
-	xlat/sysctl_net_ipv4.in xlat/sysctl_net_ipv4_conf.in \
-	xlat/sysctl_net_ipv4_route.in xlat/sysctl_net_ipv6.in \
-	xlat/sysctl_net_ipv6_route.in xlat/sysctl_net_unix.in \
-	xlat/sysctl_root.in xlat/sysctl_vm.in \
-	xlat/syslog_action_type.in xlat/sysmips_operations.in \
-	xlat/tcflsh_options.in xlat/tcxonc_options.in \
-	xlat/timerfdflags.in xlat/ubi_volume_props.in \
-	xlat/ubi_volume_types.in xlat/uffd_api_flags.in \
-	xlat/uffd_copy_flags.in xlat/uffd_flags.in \
-	xlat/uffd_register_ioctl_flags.in \
-	xlat/uffd_register_mode_flags.in xlat/uffd_zeropage_flags.in \
-	xlat/umount_flags.in xlat/unshare_flags.in xlat/usagewho.in \
-	xlat/v4l2_buf_flags.in xlat/v4l2_buf_types.in \
-	xlat/v4l2_capture_modes.in xlat/v4l2_colorspaces.in \
-	xlat/v4l2_control_classes.in xlat/v4l2_control_flags.in \
-	xlat/v4l2_control_ids.in xlat/v4l2_control_types.in \
-	xlat/v4l2_device_capabilities_flags.in xlat/v4l2_fields.in \
-	xlat/v4l2_format_description_flags.in \
-	xlat/v4l2_frameinterval_types.in xlat/v4l2_framesize_types.in \
-	xlat/v4l2_input_types.in xlat/v4l2_memories.in \
-	xlat/v4l2_sliced_flags.in xlat/v4l2_streaming_capabilities.in \
-	xlat/v4l2_tuner_audmodes.in xlat/v4l2_tuner_capabilities.in \
-	xlat/v4l2_tuner_rxsubchanses.in xlat/v4l2_tuner_types.in \
-	xlat/v4l2_vbi_flags.in xlat/wait4_options.in \
-	xlat/waitid_types.in xlat/whence_codes.in xlat/xattrflags.in \
-	xlat/xfs_dqblk_flags.in xlat/xfs_quota_flags.in
-XLAT_HEADER_FILES = xlat/access_flags.h xlat/addrfams.h \
-	xlat/adjtimex_modes.h xlat/adjtimex_state.h \
-	xlat/adjtimex_status.h xlat/advise.h xlat/af_packet_types.h \
-	xlat/archvals.h xlat/arp_hardware_types.h xlat/at_flags.h \
-	xlat/at_statx_sync_types.h xlat/atomic_ops.h xlat/audit_arch.h \
-	xlat/baud_options.h xlat/blkpg_ops.h xlat/bootflags1.h \
-	xlat/bootflags2.h xlat/bootflags3.h xlat/bpf_attach_flags.h \
-	xlat/bpf_attach_type.h xlat/bpf_class.h xlat/bpf_commands.h \
-	xlat/bpf_map_types.h xlat/bpf_map_update_elem_flags.h \
-	xlat/bpf_miscop.h xlat/bpf_mode.h xlat/bpf_op_alu.h \
-	xlat/bpf_op_jmp.h xlat/bpf_prog_types.h xlat/bpf_rval.h \
-	xlat/bpf_size.h xlat/bpf_src.h xlat/bsg_flags.h \
-	xlat/bsg_protocol.h xlat/bsg_subprotocol.h xlat/bt_protocols.h \
-	xlat/btrfs_balance_args.h xlat/btrfs_balance_ctl_cmds.h \
-	xlat/btrfs_balance_flags.h xlat/btrfs_balance_state.h \
-	xlat/btrfs_compress_types.h xlat/btrfs_defrag_flags.h \
-	xlat/btrfs_dev_replace_cmds.h xlat/btrfs_dev_replace_results.h \
-	xlat/btrfs_dev_replace_state.h xlat/btrfs_dev_stats_flags.h \
-	xlat/btrfs_dev_stats_values.h xlat/btrfs_features_compat.h \
-	xlat/btrfs_features_compat_ro.h xlat/btrfs_features_incompat.h \
-	xlat/btrfs_key_types.h xlat/btrfs_qgroup_ctl_cmds.h \
-	xlat/btrfs_qgroup_inherit_flags.h \
-	xlat/btrfs_qgroup_limit_flags.h \
-	xlat/btrfs_qgroup_status_flags.h xlat/btrfs_scrub_flags.h \
-	xlat/btrfs_send_flags.h xlat/btrfs_snap_flags_v2.h \
-	xlat/btrfs_space_info_flags.h xlat/btrfs_tree_objectids.h \
-	xlat/cacheflush_scope.h xlat/cap.h xlat/cap_mask0.h \
-	xlat/cap_mask1.h xlat/cap_version.h xlat/clockflags.h \
-	xlat/clocknames.h xlat/clone_flags.h xlat/cpuclocknames.h \
-	xlat/delete_module_flags.h xlat/dirent_types.h xlat/dm_flags.h \
-	xlat/efd_flags.h xlat/epollctls.h xlat/epollevents.h \
-	xlat/epollflags.h xlat/ethernet_protocols.h xlat/evdev_abs.h \
-	xlat/evdev_autorepeat.h xlat/evdev_ev.h xlat/evdev_ff_status.h \
-	xlat/evdev_ff_types.h xlat/evdev_keycode.h xlat/evdev_leds.h \
-	xlat/evdev_misc.h xlat/evdev_mtslots.h xlat/evdev_prop.h \
-	xlat/evdev_relative_axes.h xlat/evdev_snd.h \
-	xlat/evdev_switch.h xlat/evdev_sync.h xlat/f_owner_types.h \
-	xlat/f_seals.h xlat/falloc_flags.h xlat/fan_classes.h \
-	xlat/fan_event_flags.h xlat/fan_init_flags.h \
-	xlat/fan_mark_flags.h xlat/fcntl64cmds.h xlat/fcntlcmds.h \
-	xlat/fdflags.h xlat/fiemap_extent_flags.h xlat/fiemap_flags.h \
-	xlat/flockcmds.h xlat/fsmagic.h xlat/futexops.h \
-	xlat/futexwakecmps.h xlat/futexwakeops.h \
-	xlat/getrandom_flags.h xlat/getsockipoptions.h \
-	xlat/getsockipv6options.h xlat/hci_channels.h \
-	xlat/hw_breakpoint_len.h xlat/hw_breakpoint_type.h \
-	xlat/icmpfilterflags.h xlat/if_dqblk_valid.h \
-	xlat/if_dqinfo_flags.h xlat/if_dqinfo_valid.h xlat/iffflags.h \
-	xlat/inet_protocols.h xlat/inotify_flags.h \
-	xlat/inotify_init_flags.h xlat/ioctl_dirs.h \
-	xlat/ioprio_class.h xlat/ioprio_who.h xlat/ip_cmsg_types.h \
-	xlat/ipc_msg_flags.h xlat/ipccalls.h xlat/itimer_which.h \
-	xlat/kcmp_types.h xlat/kexec_arch_values.h \
-	xlat/kexec_file_load_flags.h xlat/kexec_load_flags.h \
-	xlat/key_perms.h xlat/key_reqkeys.h xlat/key_spec.h \
-	xlat/keyctl_commands.h xlat/lockfcmds.h xlat/loop_cmds.h \
-	xlat/loop_crypt_type_options.h xlat/loop_flags_options.h \
-	xlat/madvise_cmds.h xlat/mbindflags.h xlat/mctl_sync.h \
-	xlat/membarrier_cmds.h xlat/memfd_create_flags.h \
-	xlat/mempolicyflags.h xlat/mlock_flags.h xlat/mlockall_flags.h \
-	xlat/mmap_flags.h xlat/mmap_prot.h xlat/modem_flags.h \
-	xlat/modetypes.h xlat/module_init_flags.h xlat/mount_flags.h \
-	xlat/move_pages_flags.h xlat/mq_attr_flags.h \
-	xlat/mremap_flags.h xlat/msg_flags.h xlat/msgctl_flags.h \
-	xlat/mtd_file_mode_options.h xlat/mtd_flags_options.h \
-	xlat/mtd_mode_options.h xlat/mtd_nandecc_options.h \
-	xlat/mtd_otp_options.h xlat/mtd_type_options.h \
-	xlat/name_to_handle_at_flags.h xlat/netlink_flags.h \
-	xlat/netlink_protocols.h xlat/netlink_types.h \
-	xlat/notifyflags.h xlat/nt_descriptor_types.h \
-	xlat/open_access_modes.h xlat/open_mode_flags.h \
-	xlat/packet_mreq_type.h xlat/perf_attr_size.h \
-	xlat/perf_branch_sample_type.h xlat/perf_event_open_flags.h \
-	xlat/perf_event_read_format.h xlat/perf_event_sample_format.h \
-	xlat/perf_hw_cache_id.h xlat/perf_hw_cache_op_id.h \
-	xlat/perf_hw_cache_op_result_id.h xlat/perf_hw_id.h \
-	xlat/perf_sw_ids.h xlat/perf_type_id.h \
-	xlat/personality_flags.h xlat/personality_types.h \
-	xlat/pkey_access.h xlat/policies.h xlat/pollflags.h \
-	xlat/pr_cap_ambient.h xlat/pr_dumpable.h xlat/pr_fp_mode.h \
-	xlat/pr_mce_kill.h xlat/pr_mce_kill_policy.h xlat/pr_set_mm.h \
-	xlat/pr_tsc.h xlat/pr_unalign_flags.h xlat/prctl_options.h \
-	xlat/priorities.h xlat/ptp_flags_options.h xlat/ptrace_cmds.h \
-	xlat/ptrace_events.h xlat/ptrace_peeksiginfo_flags.h \
-	xlat/ptrace_setoptions_flags.h xlat/quota_formats.h \
-	xlat/quotacmds.h xlat/quotatypes.h xlat/rename_flags.h \
-	xlat/resource_flags.h xlat/resources.h xlat/rwf_flags.h \
-	xlat/sa_handler_values.h xlat/sched_flags.h xlat/schedulers.h \
-	xlat/scmvals.h xlat/scsi_sg_commands.h xlat/secbits.h \
-	xlat/seccomp_filter_flags.h xlat/seccomp_mode.h \
-	xlat/seccomp_ops.h xlat/seccomp_ret_action.h \
-	xlat/semctl_flags.h xlat/semop_flags.h xlat/setns_types.h \
-	xlat/setsockipoptions.h xlat/setsockipv6options.h \
-	xlat/sfd_flags.h xlat/sg_io_dxfer_direction.h \
-	xlat/sg_io_flags.h xlat/sg_io_info.h xlat/sg_scsi_reset.h \
-	xlat/shm_flags.h xlat/shm_resource_flags.h xlat/shmctl_flags.h \
-	xlat/shutdown_modes.h xlat/sigact_flags.h \
-	xlat/sigaltstack_flags.h xlat/sigbus_codes.h \
-	xlat/sigchld_codes.h xlat/sigemt_codes.h xlat/sigev_value.h \
-	xlat/sigfpe_codes.h xlat/sigill_codes.h xlat/siginfo_codes.h \
-	xlat/sigpoll_codes.h xlat/sigprocmaskcmds.h \
-	xlat/sigprof_codes.h xlat/sigsegv_codes.h xlat/sigsys_codes.h \
-	xlat/sigtrap_codes.h xlat/sock_type_flags.h xlat/socketcalls.h \
-	xlat/socketlayers.h xlat/sockipoptions.h \
-	xlat/sockipv6options.h xlat/sockipxoptions.h \
-	xlat/sockoptions.h xlat/sockpacketoptions.h \
-	xlat/sockrawoptions.h xlat/socksctpoptions.h \
-	xlat/socktcpoptions.h xlat/socktypes.h xlat/splice_flags.h \
-	xlat/sram_alloc_flags.h xlat/statfs_flags.h xlat/statx_attrs.h \
-	xlat/statx_masks.h xlat/swap_flags.h \
-	xlat/sync_file_range_flags.h xlat/sysctl_kern.h \
-	xlat/sysctl_net.h xlat/sysctl_net_core.h \
-	xlat/sysctl_net_ipv4.h xlat/sysctl_net_ipv4_conf.h \
-	xlat/sysctl_net_ipv4_route.h xlat/sysctl_net_ipv6.h \
-	xlat/sysctl_net_ipv6_route.h xlat/sysctl_net_unix.h \
-	xlat/sysctl_root.h xlat/sysctl_vm.h xlat/syslog_action_type.h \
-	xlat/sysmips_operations.h xlat/tcflsh_options.h \
-	xlat/tcxonc_options.h xlat/timerfdflags.h \
-	xlat/ubi_volume_props.h xlat/ubi_volume_types.h \
-	xlat/uffd_api_flags.h xlat/uffd_copy_flags.h xlat/uffd_flags.h \
-	xlat/uffd_register_ioctl_flags.h \
-	xlat/uffd_register_mode_flags.h xlat/uffd_zeropage_flags.h \
-	xlat/umount_flags.h xlat/unshare_flags.h xlat/usagewho.h \
-	xlat/v4l2_buf_flags.h xlat/v4l2_buf_types.h \
-	xlat/v4l2_capture_modes.h xlat/v4l2_colorspaces.h \
-	xlat/v4l2_control_classes.h xlat/v4l2_control_flags.h \
-	xlat/v4l2_control_ids.h xlat/v4l2_control_types.h \
-	xlat/v4l2_device_capabilities_flags.h xlat/v4l2_fields.h \
-	xlat/v4l2_format_description_flags.h \
-	xlat/v4l2_frameinterval_types.h xlat/v4l2_framesize_types.h \
-	xlat/v4l2_input_types.h xlat/v4l2_memories.h \
-	xlat/v4l2_sliced_flags.h xlat/v4l2_streaming_capabilities.h \
-	xlat/v4l2_tuner_audmodes.h xlat/v4l2_tuner_capabilities.h \
-	xlat/v4l2_tuner_rxsubchanses.h xlat/v4l2_tuner_types.h \
-	xlat/v4l2_vbi_flags.h xlat/wait4_options.h xlat/waitid_types.h \
-	xlat/whence_codes.h xlat/xattrflags.h xlat/xfs_dqblk_flags.h \
-	xlat/xfs_quota_flags.h
-strace_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_2) \
-	$(CODE_COVERAGE_CPPFLAGS)
-strace_CFLAGS = $(AM_CFLAGS) $(CODE_COVERAGE_CFLAGS)
-strace_LDFLAGS = $(am__append_3)
-strace_LDADD = libstrace.a $(am__append_4) $(CODE_COVERAGE_LDFLAGS) \
-	$(am__append_5) $(am__append_9)
-noinst_LIBRARIES = libstrace.a $(am__append_6) $(am__append_10)
-libstrace_a_CPPFLAGS = $(strace_CPPFLAGS)
-libstrace_a_CFLAGS = $(strace_CFLAGS)
-libstrace_a_SOURCES = \
-	fstatfs.c \
-	fstatfs64.c \
-	ipc.c \
-	sigreturn.c	\
-	socketcall.c \
-	statfs.c \
-	statfs64.c \
-	sync_file_range.c \
-	sync_file_range2.c \
-	upeek.c		\
-	upoke.c		\
-	# end of libstrace_a_SOURCES
-
-strace_SOURCES = access.c affinity.c aio.c alpha.c bjm.c block.c bpf.c \
-	btrfs.c cacheflush.c capability.c caps0.h caps1.h chdir.c \
-	chmod.c clone.c copy_file_range.c count.c defs.h desc.c \
-	dirent.c dirent64.c dm.c empty.h epoll.c evdev.c eventfd.c \
-	execve.c fadvise.c fallocate.c fanotify.c fchownat.c fcntl.c \
-	fetch_seccomp_fprog.c fetch_struct_flock.c \
-	fetch_struct_mmsghdr.c fetch_struct_msghdr.c \
-	fetch_struct_stat.c fetch_struct_stat64.c \
-	fetch_struct_statfs.c file_handle.c file_ioctl.c fs_x_ioctl.c \
-	flock.c flock.h futex.c gcc_compat.h get_robust_list.c \
-	getcpu.c getcwd.c getrandom.c hdio.c hostname.c inotify.c io.c \
-	ioctl.c ioperm.c iopl.c ioprio.c ipc_defs.h ipc_msg.c \
-	ipc_msgctl.c ipc_sem.c ipc_shm.c ipc_shmctl.c kcmp.c \
-	kernel_types.h kexec.c keyctl.c ldt.c link.c linux/asm_stat.h \
-	linux/x32/asm_stat.h linux/x86_64/asm_stat.h lookup_dcookie.c \
-	loop.c lseek.c mem.c membarrier.c memfd_create.c mknod.c \
-	mmsghdr.c mount.c mpers_type.h mq.c msghdr.c msghdr.h mtd.c \
-	native_defs.h net.c netlink.c nsfs.c nsfs.h nsig.h numa.c \
-	oldstat.c open.c or1k_atomic.c pathtrace.c perf.c \
-	perf_event_struct.h personality.c pkeys.c poll.c prctl.c \
-	print_dev_t.c print_mq_attr.c print_msgbuf.c \
-	print_sg_req_info.c print_sigevent.c print_statfs.c \
-	print_struct_stat.c print_time.c print_timespec.c \
-	print_timeval.c print_timex.c printmode.c printrusage.c \
-	printsiginfo.c printsiginfo.h process.c process_vm.c ptp.c \
-	ptrace.h qualify.c quota.c readahead.c readlink.c reboot.c \
-	regs.h renameat.c resource.c rt_sigframe.c rt_sigreturn.c \
-	rtc.c sched.c sched_attr.h scsi.c seccomp.c seccomp_fprog.h \
-	sendfile.c sg_io_v3.c sg_io_v4.c sigaltstack.c sigevent.h \
-	signal.c signalfd.c sock.c sockaddr.c socketutils.c \
-	sram_alloc.c stat.c stat.h stat64.c statfs.c statfs.h statx.c \
-	statx.h strace.c swapon.c syscall.c sysctl.c sysent.h \
-	sysinfo.c syslog.c sysmips.c term.c time.c times.c truncate.c \
-	ubi.c uid.c uid16.c umask.c umount.c uname.c userfaultfd.c \
-	ustat.c util.c utime.c utimes.c v4l2.c wait.c xattr.c xlat.h \
-	xmalloc.c $(am__append_1)
-CODE_COVERAGE_BRANCH_COVERAGE = 1
-CODE_COVERAGE_GENHTML_OPTIONS = $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) \
-	--prefix $(shell cd $(abs_top_srcdir)/.. && pwd || echo .)
-
-CODE_COVERAGE_IGNORE_PATTERN = '/usr/include/*'
-
-# Enable this to get link map generated
-#strace_LDFLAGS += -Wl,-Map=strace.mapfile
-EXTRA_DIST = \
-	$(man_MANS)			\
-	.version			\
-	COPYING				\
-	CREDITS				\
-	ChangeLog			\
-	ChangeLog-CVS			\
-	README-linux-ptrace		\
-	debian/changelog		\
-	debian/compat			\
-	debian/control			\
-	debian/copyright		\
-	debian/rules			\
-	debian/source/format		\
-	debian/strace-udeb.install	\
-	debian/strace.docs		\
-	debian/strace.examples		\
-	debian/strace.install		\
-	debian/strace.manpages		\
-	debian/strace64.install		\
-	debian/strace64.manpages	\
-	debian/watch			\
-	generate_sen.sh			\
-	ioctl_iocdef.c			\
-	ioctlsort.c			\
-	linux/32/ioctls_inc.h		\
-	linux/32/ioctls_inc_align16.h	\
-	linux/32/ioctls_inc_align32.h	\
-	linux/32/ioctls_inc_align64.h	\
-	linux/32/syscallent.h		\
-	linux/64/ioctls_inc.h		\
-	linux/64/syscallent.h		\
-	linux/aarch64/arch_regs.c	\
-	linux/aarch64/arch_regs.h	\
-	linux/aarch64/arch_rt_sigframe.c\
-	linux/aarch64/arch_sigreturn.c	\
-	linux/aarch64/errnoent1.h	\
-	linux/aarch64/get_error.c	\
-	linux/aarch64/get_scno.c	\
-	linux/aarch64/get_syscall_args.c\
-	linux/aarch64/ioctls_arch0.h	\
-	linux/aarch64/ioctls_arch1.h	\
-	linux/aarch64/ioctls_inc0.h	\
-	linux/aarch64/ioctls_inc1.h	\
-	linux/aarch64/set_error.c	\
-	linux/aarch64/set_scno.c	\
-	linux/aarch64/signalent1.h	\
-	linux/aarch64/syscallent.h	\
-	linux/aarch64/syscallent1.h	\
-	linux/alpha/arch_getrval2.c	\
-	linux/alpha/arch_regs.c		\
-	linux/alpha/arch_regs.h		\
-	linux/alpha/arch_rt_sigframe.c	\
-	linux/alpha/arch_sigreturn.c	\
-	linux/alpha/errnoent.h		\
-	linux/alpha/get_error.c		\
-	linux/alpha/get_scno.c		\
-	linux/alpha/get_syscall_args.c	\
-	linux/alpha/get_syscall_result.c\
-	linux/alpha/ioctls_arch0.h	\
-	linux/alpha/ioctls_inc0.h	\
-	linux/alpha/set_error.c		\
-	linux/alpha/set_scno.c		\
-	linux/alpha/signalent.h		\
-	linux/alpha/syscallent.h	\
-	linux/alpha/userent.h		\
-	linux/arc/arch_regs.c		\
-	linux/arc/arch_regs.h		\
-	linux/arc/arch_rt_sigframe.c	\
-	linux/arc/get_error.c		\
-	linux/arc/get_scno.c		\
-	linux/arc/get_syscall_args.c	\
-	linux/arc/ioctls_arch0.h	\
-	linux/arc/ioctls_inc0.h		\
-	linux/arc/set_error.c		\
-	linux/arc/set_scno.c		\
-	linux/arc/syscallent.h		\
-	linux/arch_regs.h		\
-	linux/arch_sigreturn.c		\
-	linux/arm/arch_regs.c		\
-	linux/arm/arch_regs.h		\
-	linux/arm/arch_rt_sigframe.c	\
-	linux/arm/arch_sigreturn.c	\
-	linux/arm/get_error.c		\
-	linux/arm/get_scno.c		\
-	linux/arm/get_syscall_args.c	\
-	linux/arm/ioctls_arch0.h	\
-	linux/arm/ioctls_inc0.h		\
-	linux/arm/set_error.c		\
-	linux/arm/set_scno.c		\
-	linux/arm/syscallent.h		\
-	linux/arm/userent.h		\
-	linux/avr32/arch_regs.c		\
-	linux/avr32/arch_regs.h		\
-	linux/avr32/arch_rt_sigframe.c	\
-	linux/avr32/get_error.c		\
-	linux/avr32/get_scno.c		\
-	linux/avr32/get_syscall_args.c	\
-	linux/avr32/ioctls_arch0.h	\
-	linux/avr32/ioctls_inc0.h	\
-	linux/avr32/set_error.c		\
-	linux/avr32/set_scno.c		\
-	linux/avr32/syscallent.h	\
-	linux/avr32/userent.h		\
-	linux/bfin/arch_regs.c		\
-	linux/bfin/arch_rt_sigframe.c	\
-	linux/bfin/get_error.c		\
-	linux/bfin/get_scno.c		\
-	linux/bfin/get_syscall_args.c	\
-	linux/bfin/get_syscall_result.c	\
-	linux/bfin/ioctls_arch0.h	\
-	linux/bfin/ioctls_inc0.h	\
-	linux/bfin/rt_sigframe.h	\
-	linux/bfin/set_error.c		\
-	linux/bfin/set_scno.c		\
-	linux/bfin/syscallent.h		\
-	linux/bfin/userent.h		\
-	linux/crisv10/arch_regs.c	\
-	linux/crisv10/arch_rt_sigframe.c\
-	linux/crisv10/arch_sigreturn.c	\
-	linux/crisv10/get_error.c	\
-	linux/crisv10/get_scno.c	\
-	linux/crisv10/get_syscall_args.c	\
-	linux/crisv10/get_syscall_result.c	\
-	linux/crisv10/rt_sigframe.h	\
-	linux/crisv10/set_error.c	\
-	linux/crisv10/set_scno.c	\
-	linux/crisv10/syscallent.h	\
-	linux/crisv10/userent.h		\
-	linux/crisv32/arch_regs.c	\
-	linux/crisv32/arch_rt_sigframe.c\
-	linux/crisv32/arch_sigreturn.c	\
-	linux/crisv32/get_error.c	\
-	linux/crisv32/get_scno.c	\
-	linux/crisv32/get_syscall_args.c	\
-	linux/crisv32/get_syscall_result.c	\
-	linux/crisv32/rt_sigframe.h	\
-	linux/crisv32/set_error.c	\
-	linux/crisv32/set_scno.c	\
-	linux/crisv32/syscallent.h	\
-	linux/crisv32/userent.h		\
-	linux/dummy.h			\
-	linux/errnoent.h		\
-	linux/getregs_old.h		\
-	linux/hppa/arch_regs.c		\
-	linux/hppa/arch_regs.h		\
-	linux/hppa/arch_rt_sigframe.c	\
-	linux/hppa/errnoent.h		\
-	linux/hppa/get_error.c		\
-	linux/hppa/get_scno.c		\
-	linux/hppa/get_syscall_args.c	\
-	linux/hppa/get_syscall_result.c	\
-	linux/hppa/ioctls_arch0.h	\
-	linux/hppa/ioctls_inc0.h	\
-	linux/hppa/rt_sigframe.h	\
-	linux/hppa/set_error.c		\
-	linux/hppa/set_scno.c		\
-	linux/hppa/signalent.h		\
-	linux/hppa/syscallent.h		\
-	linux/i386/arch_regs.c		\
-	linux/i386/arch_regs.h		\
-	linux/i386/arch_rt_sigframe.c	\
-	linux/i386/arch_sigreturn.c	\
-	linux/i386/get_error.c		\
-	linux/i386/get_scno.c		\
-	linux/i386/get_syscall_args.c	\
-	linux/i386/ioctls_arch0.h	\
-	linux/i386/ioctls_inc0.h	\
-	linux/i386/rt_sigframe.h	\
-	linux/i386/set_error.c		\
-	linux/i386/set_scno.c		\
-	linux/i386/syscallent.h		\
-	linux/i386/userent.h		\
-	linux/i386/userent0.h		\
-	linux/ia64/arch_getrval2.c	\
-	linux/ia64/arch_regs.c		\
-	linux/ia64/arch_regs.h		\
-	linux/ia64/arch_rt_sigframe.c	\
-	linux/ia64/get_error.c		\
-	linux/ia64/get_scno.c		\
-	linux/ia64/get_syscall_args.c	\
-	linux/ia64/ioctls_arch0.h	\
-	linux/ia64/ioctls_inc0.h	\
-	linux/ia64/rt_sigframe.h	\
-	linux/ia64/set_error.c		\
-	linux/ia64/set_scno.c		\
-	linux/ia64/syscallent.h		\
-	linux/ia64/userent.h		\
-	linux/inet_diag.h		\
-	linux/m68k/arch_regs.c		\
-	linux/m68k/arch_regs.h		\
-	linux/m68k/arch_rt_sigframe.c	\
-	linux/m68k/arch_sigreturn.c	\
-	linux/m68k/get_error.c		\
-	linux/m68k/get_scno.c		\
-	linux/m68k/get_syscall_args.c	\
-	linux/m68k/ioctls_arch0.h	\
-	linux/m68k/ioctls_inc0.h	\
-	linux/m68k/rt_sigframe.h	\
-	linux/m68k/set_error.c		\
-	linux/m68k/set_scno.c		\
-	linux/m68k/syscallent.h		\
-	linux/m68k/userent.h		\
-	linux/metag/arch_regs.c		\
-	linux/metag/arch_regs.h		\
-	linux/metag/arch_rt_sigframe.c	\
-	linux/metag/get_error.c		\
-	linux/metag/get_scno.c		\
-	linux/metag/get_syscall_args.c	\
-	linux/metag/ioctls_arch0.h	\
-	linux/metag/ioctls_inc0.h	\
-	linux/metag/set_error.c		\
-	linux/metag/set_scno.c		\
-	linux/metag/syscallent.h	\
-	linux/microblaze/arch_regs.c	\
-	linux/microblaze/arch_rt_sigframe.c\
-	linux/microblaze/arch_sigreturn.c	\
-	linux/microblaze/get_error.c	\
-	linux/microblaze/get_scno.c	\
-	linux/microblaze/get_syscall_args.c	\
-	linux/microblaze/get_syscall_result.c	\
-	linux/microblaze/ioctls_arch0.h	\
-	linux/microblaze/ioctls_inc0.h	\
-	linux/microblaze/set_error.c	\
-	linux/microblaze/set_scno.c	\
-	linux/microblaze/syscallent.h	\
-	linux/microblaze/userent.h	\
-	linux/mips/arch_getrval2.c	\
-	linux/mips/arch_regs.c		\
-	linux/mips/arch_regs.h		\
-	linux/mips/arch_rt_sigframe.c	\
-	linux/mips/arch_sigreturn.c	\
-	linux/mips/errnoent.h		\
-	linux/mips/genstub.sh		\
-	linux/mips/get_error.c		\
-	linux/mips/get_scno.c		\
-	linux/mips/get_syscall_args.c	\
-	linux/mips/ioctls_arch0.h	\
-	linux/mips/ioctls_inc0.h	\
-	linux/mips/rt_sigframe.h	\
-	linux/mips/set_error.c		\
-	linux/mips/set_scno.c		\
-	linux/mips/signalent.h		\
-	linux/mips/syscallent-compat.h	\
-	linux/mips/syscallent-n32.h	\
-	linux/mips/syscallent-n64.h	\
-	linux/mips/syscallent-o32.h	\
-	linux/mips/syscallent.h		\
-	linux/mips/userent.h		\
-	linux/mtd-abi.h			\
-	linux/netlink_diag.h		\
-	linux/nios2/arch_regs.c		\
-	linux/nios2/arch_regs.h		\
-	linux/nios2/arch_rt_sigframe.c	\
-	linux/nios2/get_error.c		\
-	linux/nios2/get_scno.c		\
-	linux/nios2/get_syscall_args.c	\
-	linux/nios2/ioctls_arch0.h	\
-	linux/nios2/ioctls_inc0.h	\
-	linux/nios2/set_error.c		\
-	linux/nios2/set_scno.c		\
-	linux/nios2/syscallent.h	\
-	linux/or1k/arch_regs.c		\
-	linux/or1k/arch_regs.h		\
-	linux/or1k/arch_rt_sigframe.c	\
-	linux/or1k/get_error.c		\
-	linux/or1k/get_scno.c		\
-	linux/or1k/get_syscall_args.c	\
-	linux/or1k/ioctls_arch0.h	\
-	linux/or1k/ioctls_inc0.h	\
-	linux/or1k/set_error.c		\
-	linux/or1k/set_scno.c		\
-	linux/or1k/syscallent.h		\
-	linux/or1k/userent.h		\
-	linux/personality.h		\
-	linux/powerpc/arch_regs.c	\
-	linux/powerpc/arch_regs.h	\
-	linux/powerpc/arch_rt_sigframe.c\
-	linux/powerpc/arch_sigreturn.c	\
-	linux/powerpc/errnoent.h	\
-	linux/powerpc/get_error.c	\
-	linux/powerpc/get_scno.c	\
-	linux/powerpc/get_syscall_args.c	\
-	linux/powerpc/getregs_old.c	\
-	linux/powerpc/getregs_old.h	\
-	linux/powerpc/ioctls_arch0.h	\
-	linux/powerpc/ioctls_inc0.h	\
-	linux/powerpc/set_error.c	\
-	linux/powerpc/set_scno.c	\
-	linux/powerpc/syscallent.h	\
-	linux/powerpc/userent.h		\
-	linux/powerpc64/arch_regs.c	\
-	linux/powerpc64/arch_regs.h	\
-	linux/powerpc64/arch_rt_sigframe.c\
-	linux/powerpc64/arch_sigreturn.c	\
-	linux/powerpc64/errnoent.h	\
-	linux/powerpc64/errnoent1.h	\
-	linux/powerpc64/get_error.c	\
-	linux/powerpc64/get_scno.c	\
-	linux/powerpc64/get_syscall_args.c	\
-	linux/powerpc64/getregs_old.c	\
-	linux/powerpc64/getregs_old.h	\
-	linux/powerpc64/ioctls_arch0.h	\
-	linux/powerpc64/ioctls_arch1.h	\
-	linux/powerpc64/ioctls_inc0.h	\
-	linux/powerpc64/ioctls_inc1.h	\
-	linux/powerpc64/rt_sigframe.h	\
-	linux/powerpc64/set_error.c	\
-	linux/powerpc64/set_scno.c	\
-	linux/powerpc64/signalent1.h	\
-	linux/powerpc64/syscallent.h	\
-	linux/powerpc64/syscallent1.h	\
-	linux/powerpc64/userent.h	\
-	linux/ptp_clock.h		\
-	linux/riscv/arch_regs.c		\
-	linux/riscv/arch_regs.h		\
-	linux/riscv/arch_rt_sigframe.c	\
-	linux/riscv/errnoent1.h		\
-	linux/riscv/get_error.c		\
-	linux/riscv/get_scno.c		\
-	linux/riscv/get_syscall_args.c	\
-	linux/riscv/ioctls_arch0.h	\
-	linux/riscv/ioctls_arch1.h	\
-	linux/riscv/ioctls_inc0.h	\
-	linux/riscv/ioctls_inc1.h	\
-	linux/riscv/set_error.c		\
-	linux/riscv/set_scno.c		\
-	linux/riscv/signalent1.h	\
-	linux/riscv/syscallent.h	\
-	linux/riscv/syscallent1.h	\
-	linux/rt_sigframe.h		\
-	linux/s390/arch_regs.c		\
-	linux/s390/arch_regs.h		\
-	linux/s390/arch_rt_sigframe.c	\
-	linux/s390/arch_sigreturn.c	\
-	linux/s390/get_error.c		\
-	linux/s390/get_scno.c		\
-	linux/s390/get_syscall_args.c	\
-	linux/s390/ioctls_arch0.h	\
-	linux/s390/ioctls_inc0.h	\
-	linux/s390/rt_sigframe.h	\
-	linux/s390/set_error.c		\
-	linux/s390/set_scno.c		\
-	linux/s390/syscallent.h		\
-	linux/s390/userent.h		\
-	linux/s390/userent0.h		\
-	linux/s390/userent1.h		\
-	linux/s390x/arch_regs.c		\
-	linux/s390x/arch_regs.h		\
-	linux/s390x/arch_rt_sigframe.c	\
-	linux/s390x/arch_sigreturn.c	\
-	linux/s390x/get_error.c		\
-	linux/s390x/get_scno.c		\
-	linux/s390x/get_syscall_args.c	\
-	linux/s390x/ioctls_arch0.h	\
-	linux/s390x/ioctls_inc0.h	\
-	linux/s390x/rt_sigframe.h	\
-	linux/s390x/set_error.c		\
-	linux/s390x/set_scno.c		\
-	linux/s390x/syscallent.h	\
-	linux/s390x/userent.h		\
-	linux/sh/arch_getrval2.c	\
-	linux/sh/arch_regs.c		\
-	linux/sh/arch_rt_sigframe.c	\
-	linux/sh/get_error.c		\
-	linux/sh/get_scno.c		\
-	linux/sh/get_syscall_args.c	\
-	linux/sh/get_syscall_result.c	\
-	linux/sh/ioctls_arch0.h		\
-	linux/sh/ioctls_inc0.h		\
-	linux/sh/set_error.c		\
-	linux/sh/set_scno.c		\
-	linux/sh/syscallent.h		\
-	linux/sh/userent.h		\
-	linux/sh/userent0.h		\
-	linux/sh64/arch_regs.c		\
-	linux/sh64/arch_regs.h		\
-	linux/sh64/arch_rt_sigframe.c	\
-	linux/sh64/get_error.c		\
-	linux/sh64/get_scno.c		\
-	linux/sh64/get_syscall_args.c	\
-	linux/sh64/get_syscall_result.c	\
-	linux/sh64/ioctls_arch0.h	\
-	linux/sh64/ioctls_inc0.h	\
-	linux/sh64/rt_sigframe.h	\
-	linux/sh64/set_error.c		\
-	linux/sh64/set_scno.c		\
-	linux/sh64/syscallent.h		\
-	linux/sh64/userent.h		\
-	linux/signalent.h		\
-	linux/sock_diag.h		\
-	linux/sparc/arch_getrval2.c	\
-	linux/sparc/arch_regs.c		\
-	linux/sparc/arch_regs.h		\
-	linux/sparc/arch_rt_sigframe.c	\
-	linux/sparc/arch_sigreturn.c	\
-	linux/sparc/errnoent.h		\
-	linux/sparc/gen.pl		\
-	linux/sparc/get_error.c		\
-	linux/sparc/get_scno.c		\
-	linux/sparc/get_syscall_args.c	\
-	linux/sparc/ioctls_arch0.h	\
-	linux/sparc/ioctls_inc0.h	\
-	linux/sparc/rt_sigframe.h	\
-	linux/sparc/set_error.c		\
-	linux/sparc/set_scno.c		\
-	linux/sparc/signalent.h		\
-	linux/sparc/syscallent.h	\
-	linux/sparc/userent.h		\
-	linux/sparc64/arch_getrval2.c	\
-	linux/sparc64/arch_regs.c	\
-	linux/sparc64/arch_regs.h	\
-	linux/sparc64/arch_rt_sigframe.c\
-	linux/sparc64/arch_sigreturn.c	\
-	linux/sparc64/errnoent.h	\
-	linux/sparc64/errnoent1.h	\
-	linux/sparc64/get_error.c	\
-	linux/sparc64/get_scno.c	\
-	linux/sparc64/get_syscall_args.c\
-	linux/sparc64/ioctls_arch0.h	\
-	linux/sparc64/ioctls_arch1.h	\
-	linux/sparc64/ioctls_inc0.h	\
-	linux/sparc64/ioctls_inc1.h	\
-	linux/sparc64/rt_sigframe.h	\
-	linux/sparc64/set_error.c	\
-	linux/sparc64/set_scno.c	\
-	linux/sparc64/signalent.h	\
-	linux/sparc64/signalent1.h	\
-	linux/sparc64/syscallent.h	\
-	linux/sparc64/syscallent1.h	\
-	linux/sparc64/userent.h		\
-	linux/subcall.h			\
-	linux/syscall.h			\
-	linux/tile/arch_regs.c		\
-	linux/tile/arch_regs.h		\
-	linux/tile/arch_rt_sigframe.c	\
-	linux/tile/arch_sigreturn.c	\
-	linux/tile/errnoent1.h		\
-	linux/tile/get_error.c		\
-	linux/tile/get_scno.c		\
-	linux/tile/get_syscall_args.c	\
-	linux/tile/ioctls_arch0.h	\
-	linux/tile/ioctls_arch1.h	\
-	linux/tile/ioctls_inc0.h	\
-	linux/tile/ioctls_inc1.h	\
-	linux/tile/rt_sigframe.h	\
-	linux/tile/set_error.c		\
-	linux/tile/set_scno.c		\
-	linux/tile/signalent1.h		\
-	linux/tile/syscallent.h		\
-	linux/tile/syscallent1.h	\
-	linux/tile/userent.h		\
-	linux/ubi-user.h		\
-	linux/unix_diag.h		\
-	linux/userent.h			\
-	linux/userent0.h		\
-	linux/x32/arch_regs.c		\
-	linux/x32/arch_regs.h		\
-	linux/x32/arch_rt_sigframe.c	\
-	linux/x32/arch_sigreturn.c	\
-	linux/x32/errnoent1.h		\
-	linux/x32/get_error.c		\
-	linux/x32/get_scno.c		\
-	linux/x32/get_syscall_args.c	\
-	linux/x32/ioctls_arch0.h	\
-	linux/x32/ioctls_arch1.h	\
-	linux/x32/ioctls_inc0.h		\
-	linux/x32/ioctls_inc1.h		\
-	linux/x32/rt_sigframe.h		\
-	linux/x32/set_error.c		\
-	linux/x32/set_scno.c		\
-	linux/x32/signalent1.h		\
-	linux/x32/syscallent.h		\
-	linux/x32/syscallent1.h		\
-	linux/x32/userent.h		\
-	linux/x86_64/arch_regs.c	\
-	linux/x86_64/arch_regs.h	\
-	linux/x86_64/arch_rt_sigframe.c	\
-	linux/x86_64/arch_sigreturn.c	\
-	linux/x86_64/errnoent1.h	\
-	linux/x86_64/errnoent2.h	\
-	linux/x86_64/gentab.pl		\
-	linux/x86_64/get_error.c	\
-	linux/x86_64/get_scno.c		\
-	linux/x86_64/get_syscall_args.c	\
-	linux/x86_64/getregs_old.c	\
-	linux/x86_64/getregs_old.h	\
-	linux/x86_64/ioctls_arch0.h	\
-	linux/x86_64/ioctls_arch1.h	\
-	linux/x86_64/ioctls_arch2.h	\
-	linux/x86_64/ioctls_inc0.h	\
-	linux/x86_64/ioctls_inc1.h	\
-	linux/x86_64/ioctls_inc2.h	\
-	linux/x86_64/rt_sigframe.h	\
-	linux/x86_64/set_error.c	\
-	linux/x86_64/set_scno.c		\
-	linux/x86_64/signalent1.h	\
-	linux/x86_64/signalent2.h	\
-	linux/x86_64/syscallent.h	\
-	linux/x86_64/syscallent1.h	\
-	linux/x86_64/syscallent2.h	\
-	linux/x86_64/userent.h		\
-	linux/xtensa/arch_regs.c	\
-	linux/xtensa/arch_rt_sigframe.c	\
-	linux/xtensa/get_error.c	\
-	linux/xtensa/get_scno.c		\
-	linux/xtensa/get_syscall_args.c	\
-	linux/xtensa/get_syscall_result.c	\
-	linux/xtensa/ioctls_arch0.h	\
-	linux/xtensa/ioctls_inc0.h	\
-	linux/xtensa/set_error.c	\
-	linux/xtensa/set_scno.c		\
-	linux/xtensa/syscallent.h	\
-	linux/xtensa/userent.h		\
-	mpers.awk			\
-	mpers.sh			\
-	mpers_test.sh			\
-	mpers_xlat.h			\
-	scno.head			\
-	strace-graph			\
-	strace-log-merge		\
-	strace.spec			\
-	$(XLAT_INPUT_FILES)		\
-	$(XLAT_HEADER_FILES)		\
-	xlat/gen.sh			\
-	xlate.el
-
-strace_SOURCES_c = \
-	$(filter %.c,$(strace_SOURCES)) $(filter %.c,$(libstrace_a_SOURCES))
-
-syscallent_names = subcall.h syscallent.h syscallent1.h \
-		   syscallent-n32.h syscallent-n64.h syscallent-o32.h
-
-syscallent_patterns = $(patsubst %,\%/%,$(syscallent_names))
-syscallent_files = $(filter $(syscallent_patterns),$(EXTRA_DIST))
-today = $(shell date +%Y-%m-%d)
-version_regexp = $(subst .,\.,$(VERSION))
-news_check_regexp = 'Noteworthy changes in release $(version_regexp) ($(today))'
-ioctlsort_CC = $(CC_FOR_BUILD)
-ioctlsort_DEFS = $(DEFS)
-ioctlsort_INCLUDES = $(DEFAULT_INCLUDES) $(INCLUDES)
-ioctlsort_CPPFLAGS = $(AM_CPPFLAGS_FOR_BUILD) $(CPPFLAGS_FOR_BUILD)
-ioctlsort_CFLAGS = $(AM_CFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD)
-ioctlsort_LDFLAGS = $(AM_LDFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD)
-ioctls_inc_h = $(wildcard $(srcdir)/$(OS)/$(ARCH)/ioctls_inc*.h)
-ioctlent_h = $(patsubst $(srcdir)/$(OS)/$(ARCH)/ioctls_inc%,ioctlent%,$(ioctls_inc_h))
-ioctl_redefs_h = $(filter-out ioctl_redefs0.h,$(subst ioctlent,ioctl_redefs,$(ioctlent_h)))
-BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) native_printer_decls.h \
-	native_printer_defs.h printers.h sen.h sys_func.h .version \
-	$(am__append_7) $(am__append_11)
-CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \
-	ioctl_iocdef.h ioctl_iocdef.i native_printer_decls.h \
-	native_printer_defs.h printers.h sen.h sys_func.h syscallent.i \
-	scno.h $(am__append_8) $(am__append_12)
-DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h
-SCNO_CPPFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-		$(ARCH_MFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS)
-
-digits = [[:digit:]][[:digit:]]*
-al_nums = [[:alnum:]_][[:alnum:]_]*
-SCNO_SED = /TRACE_INDIRECT_SUBCALL/d; s/^\[[[:space:]]*\($(digits)\)\][[:space:]]*=[[:space:]]*{[^,]*,[^,]*,[^,]*,[[:space:]]*"\($(al_nums)\)"[[:space:]]*},.*/\#ifndef __NR_\2\n\# define __NR_\2 (SYSCALL_BIT | \1)\n\#endif/p
-
-# Generated by ./generate_mpers_am.sh; do not edit.
-mpers_source_files = block.c btrfs.c dirent.c evdev.c fetch_seccomp_fprog.c fetch_struct_flock.c fetch_struct_mmsghdr.c fetch_struct_msghdr.c fetch_struct_stat.c fetch_struct_stat64.c fetch_struct_statfs.c hdio.c ipc_msgctl.c ipc_shmctl.c loop.c mtd.c print_mq_attr.c print_msgbuf.c print_sg_req_info.c print_sigevent.c print_time.c print_timespec.c print_timeval.c print_timex.c printrusage.c printsiginfo.c rt_sigreturn.c rtc.c sg_io_v3.c sigaltstack.c sock.c sysinfo.c times.c ustat.c utime.c v4l2.c 
-
-# defines mpers_source_files
-srcdir_mpers_source_files = $(patsubst %,$(srcdir)/%,$(mpers_source_files))
-mpers_preproc_files = $(mpers_source_files:.c=.c.mpers.i)
-mpers_NAME = 
-mpers_PREFIX = $(mpers_NAME)_
-mpers_DEFS = $(DEFS)
-mpers_INCLUDES = $(DEFAULT_INCLUDES) $(INCLUDES)
-mpers_CPPFLAGS = $(strace_CPPFLAGS) $(CPPFLAGS)
-mpers_sh_opts = $(mpers_DEFS) $(mpers_INCLUDES) $(mpers_CPPFLAGS)
-libmpers_CPPFLAGS = $(strace_CPPFLAGS) -DIN_MPERS
-libmpers_CFLAGS = $(strace_CFLAGS)
-mpers_printer_decl_pattern = ^MPERS_PRINTER_DECL\(([^,)]+),[[:space:]]*([^,)]+),[[:space:]]*([^)]+)\)$$
-libmpers_m32_a_SOURCES = $(mpers_source_files)
-libmpers_m32_a_CPPFLAGS = $(libmpers_CPPFLAGS) -DMPERS_IS_m32 -I$(builddir)/mpers-m32
-libmpers_m32_a_CFLAGS = $(libmpers_CFLAGS)
-mpers_m32_targets = mpers-m32.stamp m32_type_defs.h m32_funcs.h m32_printer_decls.h m32_printer_defs.h
-libmpers_mx32_a_SOURCES = $(mpers_source_files)
-libmpers_mx32_a_CPPFLAGS = $(libmpers_CPPFLAGS) -DMPERS_IS_mx32 -I$(builddir)/mpers-mx32
-libmpers_mx32_a_CFLAGS = $(libmpers_CFLAGS)
-mpers_mx32_targets = mpers-mx32.stamp mx32_type_defs.h mx32_funcs.h mx32_printer_decls.h mx32_printer_defs.h
-#gen_changelog_start_date = 2009-07-08 20:00
-all: $(BUILT_SOURCES) config.h
-	$(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-am--refresh: Makefile
-	@:
-$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(srcdir)/xlat/Makemodule.am $(srcdir)/scno.am $(srcdir)/mpers.am $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
-	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    echo ' $(SHELL) ./config.status'; \
-	    $(SHELL) ./config.status;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-	esac;
-$(srcdir)/xlat/Makemodule.am $(srcdir)/scno.am $(srcdir)/mpers.am:
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	$(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure: # $(am__configure_deps)
-	$(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
-	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-$(am__aclocal_m4_deps):
-
-config.h: stamp-h1
-	@test -f $@ || rm -f stamp-h1
-	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
-	@rm -f stamp-h1
-	cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in: # $(am__configure_deps) 
-	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
-	rm -f stamp-h1
-	touch $@
-
-distclean-hdr:
-	-rm -f config.h stamp-h1
-strace.spec: $(top_builddir)/config.status $(srcdir)/strace.spec.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-debian/changelog: $(top_builddir)/config.status $(top_srcdir)/debian/changelog.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-
-libmpers-m32.a: $(libmpers_m32_a_OBJECTS) $(libmpers_m32_a_DEPENDENCIES) $(EXTRA_libmpers_m32_a_DEPENDENCIES) 
-	$(AM_V_at)-rm -f libmpers-m32.a
-	$(AM_V_AR)$(libmpers_m32_a_AR) libmpers-m32.a $(libmpers_m32_a_OBJECTS) $(libmpers_m32_a_LIBADD)
-	$(AM_V_at)$(RANLIB) libmpers-m32.a
-
-libmpers-mx32.a: $(libmpers_mx32_a_OBJECTS) $(libmpers_mx32_a_DEPENDENCIES) $(EXTRA_libmpers_mx32_a_DEPENDENCIES) 
-	$(AM_V_at)-rm -f libmpers-mx32.a
-	$(AM_V_AR)$(libmpers_mx32_a_AR) libmpers-mx32.a $(libmpers_mx32_a_OBJECTS) $(libmpers_mx32_a_LIBADD)
-	$(AM_V_at)$(RANLIB) libmpers-mx32.a
-
-libstrace.a: $(libstrace_a_OBJECTS) $(libstrace_a_DEPENDENCIES) $(EXTRA_libstrace_a_DEPENDENCIES) 
-	$(AM_V_at)-rm -f libstrace.a
-	$(AM_V_AR)$(libstrace_a_AR) libstrace.a $(libstrace_a_OBJECTS) $(libstrace_a_LIBADD)
-	$(AM_V_at)$(RANLIB) libstrace.a
-install-binPROGRAMS: $(bin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
-	fi; \
-	for p in $$list; do echo "$$p $$p"; done | \
-	sed 's/$(EXEEXT)$$//' | \
-	while read p p1; do if test -f $$p \
-	  ; then echo "$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n;h' \
-	    -e 's|.*|.|' \
-	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
-	sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
-	    else { print "f", $$3 "/" $$4, $$1; } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	    test -z "$$files" || { \
-	      echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
-	      $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
-	    } \
-	; done
-
-uninstall-binPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-	      -e 's/$$/$(EXEEXT)/' \
-	`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(bindir)" && rm -f $$files
-
-clean-binPROGRAMS:
-	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-
-strace$(EXEEXT): $(strace_OBJECTS) $(strace_DEPENDENCIES) $(EXTRA_strace_DEPENDENCIES) 
-	@rm -f strace$(EXEEXT)
-	$(AM_V_CCLD)$(strace_LINK) $(strace_OBJECTS) $(strace_LDADD) $(LIBS)
-install-binSCRIPTS: $(bin_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-binSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-include ./$(DEPDIR)/libmpers_m32_a-block.Po
-include ./$(DEPDIR)/libmpers_m32_a-btrfs.Po
-include ./$(DEPDIR)/libmpers_m32_a-dirent.Po
-include ./$(DEPDIR)/libmpers_m32_a-evdev.Po
-include ./$(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Po
-include ./$(DEPDIR)/libmpers_m32_a-fetch_struct_flock.Po
-include ./$(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Po
-include ./$(DEPDIR)/libmpers_m32_a-fetch_struct_msghdr.Po
-include ./$(DEPDIR)/libmpers_m32_a-fetch_struct_stat.Po
-include ./$(DEPDIR)/libmpers_m32_a-fetch_struct_stat64.Po
-include ./$(DEPDIR)/libmpers_m32_a-fetch_struct_statfs.Po
-include ./$(DEPDIR)/libmpers_m32_a-hdio.Po
-include ./$(DEPDIR)/libmpers_m32_a-ipc_msgctl.Po
-include ./$(DEPDIR)/libmpers_m32_a-ipc_shmctl.Po
-include ./$(DEPDIR)/libmpers_m32_a-loop.Po
-include ./$(DEPDIR)/libmpers_m32_a-mtd.Po
-include ./$(DEPDIR)/libmpers_m32_a-print_mq_attr.Po
-include ./$(DEPDIR)/libmpers_m32_a-print_msgbuf.Po
-include ./$(DEPDIR)/libmpers_m32_a-print_sg_req_info.Po
-include ./$(DEPDIR)/libmpers_m32_a-print_sigevent.Po
-include ./$(DEPDIR)/libmpers_m32_a-print_time.Po
-include ./$(DEPDIR)/libmpers_m32_a-print_timespec.Po
-include ./$(DEPDIR)/libmpers_m32_a-print_timeval.Po
-include ./$(DEPDIR)/libmpers_m32_a-print_timex.Po
-include ./$(DEPDIR)/libmpers_m32_a-printrusage.Po
-include ./$(DEPDIR)/libmpers_m32_a-printsiginfo.Po
-include ./$(DEPDIR)/libmpers_m32_a-rt_sigreturn.Po
-include ./$(DEPDIR)/libmpers_m32_a-rtc.Po
-include ./$(DEPDIR)/libmpers_m32_a-sg_io_v3.Po
-include ./$(DEPDIR)/libmpers_m32_a-sigaltstack.Po
-include ./$(DEPDIR)/libmpers_m32_a-sock.Po
-include ./$(DEPDIR)/libmpers_m32_a-sysinfo.Po
-include ./$(DEPDIR)/libmpers_m32_a-times.Po
-include ./$(DEPDIR)/libmpers_m32_a-ustat.Po
-include ./$(DEPDIR)/libmpers_m32_a-utime.Po
-include ./$(DEPDIR)/libmpers_m32_a-v4l2.Po
-include ./$(DEPDIR)/libmpers_mx32_a-block.Po
-include ./$(DEPDIR)/libmpers_mx32_a-btrfs.Po
-include ./$(DEPDIR)/libmpers_mx32_a-dirent.Po
-include ./$(DEPDIR)/libmpers_mx32_a-evdev.Po
-include ./$(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Po
-include ./$(DEPDIR)/libmpers_mx32_a-fetch_struct_flock.Po
-include ./$(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Po
-include ./$(DEPDIR)/libmpers_mx32_a-fetch_struct_msghdr.Po
-include ./$(DEPDIR)/libmpers_mx32_a-fetch_struct_stat.Po
-include ./$(DEPDIR)/libmpers_mx32_a-fetch_struct_stat64.Po
-include ./$(DEPDIR)/libmpers_mx32_a-fetch_struct_statfs.Po
-include ./$(DEPDIR)/libmpers_mx32_a-hdio.Po
-include ./$(DEPDIR)/libmpers_mx32_a-ipc_msgctl.Po
-include ./$(DEPDIR)/libmpers_mx32_a-ipc_shmctl.Po
-include ./$(DEPDIR)/libmpers_mx32_a-loop.Po
-include ./$(DEPDIR)/libmpers_mx32_a-mtd.Po
-include ./$(DEPDIR)/libmpers_mx32_a-print_mq_attr.Po
-include ./$(DEPDIR)/libmpers_mx32_a-print_msgbuf.Po
-include ./$(DEPDIR)/libmpers_mx32_a-print_sg_req_info.Po
-include ./$(DEPDIR)/libmpers_mx32_a-print_sigevent.Po
-include ./$(DEPDIR)/libmpers_mx32_a-print_time.Po
-include ./$(DEPDIR)/libmpers_mx32_a-print_timespec.Po
-include ./$(DEPDIR)/libmpers_mx32_a-print_timeval.Po
-include ./$(DEPDIR)/libmpers_mx32_a-print_timex.Po
-include ./$(DEPDIR)/libmpers_mx32_a-printrusage.Po
-include ./$(DEPDIR)/libmpers_mx32_a-printsiginfo.Po
-include ./$(DEPDIR)/libmpers_mx32_a-rt_sigreturn.Po
-include ./$(DEPDIR)/libmpers_mx32_a-rtc.Po
-include ./$(DEPDIR)/libmpers_mx32_a-sg_io_v3.Po
-include ./$(DEPDIR)/libmpers_mx32_a-sigaltstack.Po
-include ./$(DEPDIR)/libmpers_mx32_a-sock.Po
-include ./$(DEPDIR)/libmpers_mx32_a-sysinfo.Po
-include ./$(DEPDIR)/libmpers_mx32_a-times.Po
-include ./$(DEPDIR)/libmpers_mx32_a-ustat.Po
-include ./$(DEPDIR)/libmpers_mx32_a-utime.Po
-include ./$(DEPDIR)/libmpers_mx32_a-v4l2.Po
-include ./$(DEPDIR)/libstrace_a-fstatfs.Po
-include ./$(DEPDIR)/libstrace_a-fstatfs64.Po
-include ./$(DEPDIR)/libstrace_a-ipc.Po
-include ./$(DEPDIR)/libstrace_a-sigreturn.Po
-include ./$(DEPDIR)/libstrace_a-socketcall.Po
-include ./$(DEPDIR)/libstrace_a-statfs.Po
-include ./$(DEPDIR)/libstrace_a-statfs64.Po
-include ./$(DEPDIR)/libstrace_a-sync_file_range.Po
-include ./$(DEPDIR)/libstrace_a-sync_file_range2.Po
-include ./$(DEPDIR)/libstrace_a-upeek.Po
-include ./$(DEPDIR)/libstrace_a-upoke.Po
-include ./$(DEPDIR)/strace-access.Po
-include ./$(DEPDIR)/strace-affinity.Po
-include ./$(DEPDIR)/strace-aio.Po
-include ./$(DEPDIR)/strace-alpha.Po
-include ./$(DEPDIR)/strace-bjm.Po
-include ./$(DEPDIR)/strace-block.Po
-include ./$(DEPDIR)/strace-bpf.Po
-include ./$(DEPDIR)/strace-btrfs.Po
-include ./$(DEPDIR)/strace-cacheflush.Po
-include ./$(DEPDIR)/strace-capability.Po
-include ./$(DEPDIR)/strace-chdir.Po
-include ./$(DEPDIR)/strace-chmod.Po
-include ./$(DEPDIR)/strace-clone.Po
-include ./$(DEPDIR)/strace-copy_file_range.Po
-include ./$(DEPDIR)/strace-count.Po
-include ./$(DEPDIR)/strace-desc.Po
-include ./$(DEPDIR)/strace-dirent.Po
-include ./$(DEPDIR)/strace-dirent64.Po
-include ./$(DEPDIR)/strace-dm.Po
-include ./$(DEPDIR)/strace-epoll.Po
-include ./$(DEPDIR)/strace-evdev.Po
-include ./$(DEPDIR)/strace-eventfd.Po
-include ./$(DEPDIR)/strace-execve.Po
-include ./$(DEPDIR)/strace-fadvise.Po
-include ./$(DEPDIR)/strace-fallocate.Po
-include ./$(DEPDIR)/strace-fanotify.Po
-include ./$(DEPDIR)/strace-fchownat.Po
-include ./$(DEPDIR)/strace-fcntl.Po
-include ./$(DEPDIR)/strace-fetch_seccomp_fprog.Po
-include ./$(DEPDIR)/strace-fetch_struct_flock.Po
-include ./$(DEPDIR)/strace-fetch_struct_mmsghdr.Po
-include ./$(DEPDIR)/strace-fetch_struct_msghdr.Po
-include ./$(DEPDIR)/strace-fetch_struct_stat.Po
-include ./$(DEPDIR)/strace-fetch_struct_stat64.Po
-include ./$(DEPDIR)/strace-fetch_struct_statfs.Po
-include ./$(DEPDIR)/strace-file_handle.Po
-include ./$(DEPDIR)/strace-file_ioctl.Po
-include ./$(DEPDIR)/strace-flock.Po
-include ./$(DEPDIR)/strace-fs_x_ioctl.Po
-include ./$(DEPDIR)/strace-futex.Po
-include ./$(DEPDIR)/strace-get_robust_list.Po
-include ./$(DEPDIR)/strace-getcpu.Po
-include ./$(DEPDIR)/strace-getcwd.Po
-include ./$(DEPDIR)/strace-getrandom.Po
-include ./$(DEPDIR)/strace-hdio.Po
-include ./$(DEPDIR)/strace-hostname.Po
-include ./$(DEPDIR)/strace-inotify.Po
-include ./$(DEPDIR)/strace-io.Po
-include ./$(DEPDIR)/strace-ioctl.Po
-include ./$(DEPDIR)/strace-ioperm.Po
-include ./$(DEPDIR)/strace-iopl.Po
-include ./$(DEPDIR)/strace-ioprio.Po
-include ./$(DEPDIR)/strace-ipc_msg.Po
-include ./$(DEPDIR)/strace-ipc_msgctl.Po
-include ./$(DEPDIR)/strace-ipc_sem.Po
-include ./$(DEPDIR)/strace-ipc_shm.Po
-include ./$(DEPDIR)/strace-ipc_shmctl.Po
-include ./$(DEPDIR)/strace-kcmp.Po
-include ./$(DEPDIR)/strace-kexec.Po
-include ./$(DEPDIR)/strace-keyctl.Po
-include ./$(DEPDIR)/strace-ldt.Po
-include ./$(DEPDIR)/strace-link.Po
-include ./$(DEPDIR)/strace-lookup_dcookie.Po
-include ./$(DEPDIR)/strace-loop.Po
-include ./$(DEPDIR)/strace-lseek.Po
-include ./$(DEPDIR)/strace-mem.Po
-include ./$(DEPDIR)/strace-membarrier.Po
-include ./$(DEPDIR)/strace-memfd_create.Po
-include ./$(DEPDIR)/strace-mknod.Po
-include ./$(DEPDIR)/strace-mmsghdr.Po
-include ./$(DEPDIR)/strace-mount.Po
-include ./$(DEPDIR)/strace-mq.Po
-include ./$(DEPDIR)/strace-msghdr.Po
-include ./$(DEPDIR)/strace-mtd.Po
-include ./$(DEPDIR)/strace-net.Po
-include ./$(DEPDIR)/strace-netlink.Po
-include ./$(DEPDIR)/strace-nsfs.Po
-include ./$(DEPDIR)/strace-numa.Po
-include ./$(DEPDIR)/strace-oldstat.Po
-include ./$(DEPDIR)/strace-open.Po
-include ./$(DEPDIR)/strace-or1k_atomic.Po
-include ./$(DEPDIR)/strace-pathtrace.Po
-include ./$(DEPDIR)/strace-perf.Po
-include ./$(DEPDIR)/strace-personality.Po
-include ./$(DEPDIR)/strace-pkeys.Po
-include ./$(DEPDIR)/strace-poll.Po
-include ./$(DEPDIR)/strace-prctl.Po
-include ./$(DEPDIR)/strace-print_dev_t.Po
-include ./$(DEPDIR)/strace-print_mq_attr.Po
-include ./$(DEPDIR)/strace-print_msgbuf.Po
-include ./$(DEPDIR)/strace-print_sg_req_info.Po
-include ./$(DEPDIR)/strace-print_sigevent.Po
-include ./$(DEPDIR)/strace-print_statfs.Po
-include ./$(DEPDIR)/strace-print_struct_stat.Po
-include ./$(DEPDIR)/strace-print_time.Po
-include ./$(DEPDIR)/strace-print_timespec.Po
-include ./$(DEPDIR)/strace-print_timeval.Po
-include ./$(DEPDIR)/strace-print_timex.Po
-include ./$(DEPDIR)/strace-printmode.Po
-include ./$(DEPDIR)/strace-printrusage.Po
-include ./$(DEPDIR)/strace-printsiginfo.Po
-include ./$(DEPDIR)/strace-process.Po
-include ./$(DEPDIR)/strace-process_vm.Po
-include ./$(DEPDIR)/strace-ptp.Po
-include ./$(DEPDIR)/strace-qualify.Po
-include ./$(DEPDIR)/strace-quota.Po
-include ./$(DEPDIR)/strace-readahead.Po
-include ./$(DEPDIR)/strace-readlink.Po
-include ./$(DEPDIR)/strace-reboot.Po
-include ./$(DEPDIR)/strace-renameat.Po
-include ./$(DEPDIR)/strace-resource.Po
-include ./$(DEPDIR)/strace-rt_sigframe.Po
-include ./$(DEPDIR)/strace-rt_sigreturn.Po
-include ./$(DEPDIR)/strace-rtc.Po
-include ./$(DEPDIR)/strace-sched.Po
-include ./$(DEPDIR)/strace-scsi.Po
-include ./$(DEPDIR)/strace-seccomp.Po
-include ./$(DEPDIR)/strace-sendfile.Po
-include ./$(DEPDIR)/strace-sg_io_v3.Po
-include ./$(DEPDIR)/strace-sg_io_v4.Po
-include ./$(DEPDIR)/strace-sigaltstack.Po
-include ./$(DEPDIR)/strace-signal.Po
-include ./$(DEPDIR)/strace-signalfd.Po
-include ./$(DEPDIR)/strace-sock.Po
-include ./$(DEPDIR)/strace-sockaddr.Po
-include ./$(DEPDIR)/strace-socketutils.Po
-include ./$(DEPDIR)/strace-sram_alloc.Po
-include ./$(DEPDIR)/strace-stat.Po
-include ./$(DEPDIR)/strace-stat64.Po
-include ./$(DEPDIR)/strace-statfs.Po
-include ./$(DEPDIR)/strace-statx.Po
-include ./$(DEPDIR)/strace-strace.Po
-include ./$(DEPDIR)/strace-swapon.Po
-include ./$(DEPDIR)/strace-syscall.Po
-include ./$(DEPDIR)/strace-sysctl.Po
-include ./$(DEPDIR)/strace-sysinfo.Po
-include ./$(DEPDIR)/strace-syslog.Po
-include ./$(DEPDIR)/strace-sysmips.Po
-include ./$(DEPDIR)/strace-term.Po
-include ./$(DEPDIR)/strace-time.Po
-include ./$(DEPDIR)/strace-times.Po
-include ./$(DEPDIR)/strace-truncate.Po
-include ./$(DEPDIR)/strace-ubi.Po
-include ./$(DEPDIR)/strace-uid.Po
-include ./$(DEPDIR)/strace-uid16.Po
-include ./$(DEPDIR)/strace-umask.Po
-include ./$(DEPDIR)/strace-umount.Po
-include ./$(DEPDIR)/strace-uname.Po
-include ./$(DEPDIR)/strace-unwind.Po
-include ./$(DEPDIR)/strace-userfaultfd.Po
-include ./$(DEPDIR)/strace-ustat.Po
-include ./$(DEPDIR)/strace-util.Po
-include ./$(DEPDIR)/strace-utime.Po
-include ./$(DEPDIR)/strace-utimes.Po
-include ./$(DEPDIR)/strace-v4l2.Po
-include ./$(DEPDIR)/strace-wait.Po
-include ./$(DEPDIR)/strace-xattr.Po
-include ./$(DEPDIR)/strace-xmalloc.Po
-
-.c.o:
-	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-#	$(AM_V_CC)source='$<' object='$@' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-#	$(AM_V_CC)source='$<' object='$@' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-libmpers_m32_a-block.o: block.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-block.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-block.Tpo -c -o libmpers_m32_a-block.o `test -f 'block.c' || echo '$(srcdir)/'`block.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-block.Tpo $(DEPDIR)/libmpers_m32_a-block.Po
-#	$(AM_V_CC)source='block.c' object='libmpers_m32_a-block.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-block.o `test -f 'block.c' || echo '$(srcdir)/'`block.c
-
-libmpers_m32_a-block.obj: block.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-block.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-block.Tpo -c -o libmpers_m32_a-block.obj `if test -f 'block.c'; then $(CYGPATH_W) 'block.c'; else $(CYGPATH_W) '$(srcdir)/block.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-block.Tpo $(DEPDIR)/libmpers_m32_a-block.Po
-#	$(AM_V_CC)source='block.c' object='libmpers_m32_a-block.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-block.obj `if test -f 'block.c'; then $(CYGPATH_W) 'block.c'; else $(CYGPATH_W) '$(srcdir)/block.c'; fi`
-
-libmpers_m32_a-btrfs.o: btrfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-btrfs.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-btrfs.Tpo -c -o libmpers_m32_a-btrfs.o `test -f 'btrfs.c' || echo '$(srcdir)/'`btrfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-btrfs.Tpo $(DEPDIR)/libmpers_m32_a-btrfs.Po
-#	$(AM_V_CC)source='btrfs.c' object='libmpers_m32_a-btrfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-btrfs.o `test -f 'btrfs.c' || echo '$(srcdir)/'`btrfs.c
-
-libmpers_m32_a-btrfs.obj: btrfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-btrfs.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-btrfs.Tpo -c -o libmpers_m32_a-btrfs.obj `if test -f 'btrfs.c'; then $(CYGPATH_W) 'btrfs.c'; else $(CYGPATH_W) '$(srcdir)/btrfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-btrfs.Tpo $(DEPDIR)/libmpers_m32_a-btrfs.Po
-#	$(AM_V_CC)source='btrfs.c' object='libmpers_m32_a-btrfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-btrfs.obj `if test -f 'btrfs.c'; then $(CYGPATH_W) 'btrfs.c'; else $(CYGPATH_W) '$(srcdir)/btrfs.c'; fi`
-
-libmpers_m32_a-dirent.o: dirent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-dirent.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-dirent.Tpo -c -o libmpers_m32_a-dirent.o `test -f 'dirent.c' || echo '$(srcdir)/'`dirent.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-dirent.Tpo $(DEPDIR)/libmpers_m32_a-dirent.Po
-#	$(AM_V_CC)source='dirent.c' object='libmpers_m32_a-dirent.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-dirent.o `test -f 'dirent.c' || echo '$(srcdir)/'`dirent.c
-
-libmpers_m32_a-dirent.obj: dirent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-dirent.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-dirent.Tpo -c -o libmpers_m32_a-dirent.obj `if test -f 'dirent.c'; then $(CYGPATH_W) 'dirent.c'; else $(CYGPATH_W) '$(srcdir)/dirent.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-dirent.Tpo $(DEPDIR)/libmpers_m32_a-dirent.Po
-#	$(AM_V_CC)source='dirent.c' object='libmpers_m32_a-dirent.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-dirent.obj `if test -f 'dirent.c'; then $(CYGPATH_W) 'dirent.c'; else $(CYGPATH_W) '$(srcdir)/dirent.c'; fi`
-
-libmpers_m32_a-evdev.o: evdev.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-evdev.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-evdev.Tpo -c -o libmpers_m32_a-evdev.o `test -f 'evdev.c' || echo '$(srcdir)/'`evdev.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-evdev.Tpo $(DEPDIR)/libmpers_m32_a-evdev.Po
-#	$(AM_V_CC)source='evdev.c' object='libmpers_m32_a-evdev.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-evdev.o `test -f 'evdev.c' || echo '$(srcdir)/'`evdev.c
-
-libmpers_m32_a-evdev.obj: evdev.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-evdev.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-evdev.Tpo -c -o libmpers_m32_a-evdev.obj `if test -f 'evdev.c'; then $(CYGPATH_W) 'evdev.c'; else $(CYGPATH_W) '$(srcdir)/evdev.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-evdev.Tpo $(DEPDIR)/libmpers_m32_a-evdev.Po
-#	$(AM_V_CC)source='evdev.c' object='libmpers_m32_a-evdev.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-evdev.obj `if test -f 'evdev.c'; then $(CYGPATH_W) 'evdev.c'; else $(CYGPATH_W) '$(srcdir)/evdev.c'; fi`
-
-libmpers_m32_a-fetch_seccomp_fprog.o: fetch_seccomp_fprog.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_seccomp_fprog.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Tpo -c -o libmpers_m32_a-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Tpo $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Po
-#	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='libmpers_m32_a-fetch_seccomp_fprog.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
-
-libmpers_m32_a-fetch_seccomp_fprog.obj: fetch_seccomp_fprog.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_seccomp_fprog.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Tpo -c -o libmpers_m32_a-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Tpo $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Po
-#	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='libmpers_m32_a-fetch_seccomp_fprog.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
-
-libmpers_m32_a-fetch_struct_flock.o: fetch_struct_flock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_flock.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_flock.Tpo -c -o libmpers_m32_a-fetch_struct_flock.o `test -f 'fetch_struct_flock.c' || echo '$(srcdir)/'`fetch_struct_flock.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_flock.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_flock.Po
-#	$(AM_V_CC)source='fetch_struct_flock.c' object='libmpers_m32_a-fetch_struct_flock.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_flock.o `test -f 'fetch_struct_flock.c' || echo '$(srcdir)/'`fetch_struct_flock.c
-
-libmpers_m32_a-fetch_struct_flock.obj: fetch_struct_flock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_flock.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_flock.Tpo -c -o libmpers_m32_a-fetch_struct_flock.obj `if test -f 'fetch_struct_flock.c'; then $(CYGPATH_W) 'fetch_struct_flock.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_flock.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_flock.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_flock.Po
-#	$(AM_V_CC)source='fetch_struct_flock.c' object='libmpers_m32_a-fetch_struct_flock.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_flock.obj `if test -f 'fetch_struct_flock.c'; then $(CYGPATH_W) 'fetch_struct_flock.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_flock.c'; fi`
-
-libmpers_m32_a-fetch_struct_mmsghdr.o: fetch_struct_mmsghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_mmsghdr.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Tpo -c -o libmpers_m32_a-fetch_struct_mmsghdr.o `test -f 'fetch_struct_mmsghdr.c' || echo '$(srcdir)/'`fetch_struct_mmsghdr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Po
-#	$(AM_V_CC)source='fetch_struct_mmsghdr.c' object='libmpers_m32_a-fetch_struct_mmsghdr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_mmsghdr.o `test -f 'fetch_struct_mmsghdr.c' || echo '$(srcdir)/'`fetch_struct_mmsghdr.c
-
-libmpers_m32_a-fetch_struct_mmsghdr.obj: fetch_struct_mmsghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_mmsghdr.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Tpo -c -o libmpers_m32_a-fetch_struct_mmsghdr.obj `if test -f 'fetch_struct_mmsghdr.c'; then $(CYGPATH_W) 'fetch_struct_mmsghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_mmsghdr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Po
-#	$(AM_V_CC)source='fetch_struct_mmsghdr.c' object='libmpers_m32_a-fetch_struct_mmsghdr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_mmsghdr.obj `if test -f 'fetch_struct_mmsghdr.c'; then $(CYGPATH_W) 'fetch_struct_mmsghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_mmsghdr.c'; fi`
-
-libmpers_m32_a-fetch_struct_msghdr.o: fetch_struct_msghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_msghdr.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_msghdr.Tpo -c -o libmpers_m32_a-fetch_struct_msghdr.o `test -f 'fetch_struct_msghdr.c' || echo '$(srcdir)/'`fetch_struct_msghdr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_msghdr.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_msghdr.Po
-#	$(AM_V_CC)source='fetch_struct_msghdr.c' object='libmpers_m32_a-fetch_struct_msghdr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_msghdr.o `test -f 'fetch_struct_msghdr.c' || echo '$(srcdir)/'`fetch_struct_msghdr.c
-
-libmpers_m32_a-fetch_struct_msghdr.obj: fetch_struct_msghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_msghdr.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_msghdr.Tpo -c -o libmpers_m32_a-fetch_struct_msghdr.obj `if test -f 'fetch_struct_msghdr.c'; then $(CYGPATH_W) 'fetch_struct_msghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_msghdr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_msghdr.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_msghdr.Po
-#	$(AM_V_CC)source='fetch_struct_msghdr.c' object='libmpers_m32_a-fetch_struct_msghdr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_msghdr.obj `if test -f 'fetch_struct_msghdr.c'; then $(CYGPATH_W) 'fetch_struct_msghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_msghdr.c'; fi`
-
-libmpers_m32_a-fetch_struct_stat.o: fetch_struct_stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_stat.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_stat.Tpo -c -o libmpers_m32_a-fetch_struct_stat.o `test -f 'fetch_struct_stat.c' || echo '$(srcdir)/'`fetch_struct_stat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_stat.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_stat.Po
-#	$(AM_V_CC)source='fetch_struct_stat.c' object='libmpers_m32_a-fetch_struct_stat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_stat.o `test -f 'fetch_struct_stat.c' || echo '$(srcdir)/'`fetch_struct_stat.c
-
-libmpers_m32_a-fetch_struct_stat.obj: fetch_struct_stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_stat.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_stat.Tpo -c -o libmpers_m32_a-fetch_struct_stat.obj `if test -f 'fetch_struct_stat.c'; then $(CYGPATH_W) 'fetch_struct_stat.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_stat.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_stat.Po
-#	$(AM_V_CC)source='fetch_struct_stat.c' object='libmpers_m32_a-fetch_struct_stat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_stat.obj `if test -f 'fetch_struct_stat.c'; then $(CYGPATH_W) 'fetch_struct_stat.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat.c'; fi`
-
-libmpers_m32_a-fetch_struct_stat64.o: fetch_struct_stat64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_stat64.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_stat64.Tpo -c -o libmpers_m32_a-fetch_struct_stat64.o `test -f 'fetch_struct_stat64.c' || echo '$(srcdir)/'`fetch_struct_stat64.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_stat64.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_stat64.Po
-#	$(AM_V_CC)source='fetch_struct_stat64.c' object='libmpers_m32_a-fetch_struct_stat64.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_stat64.o `test -f 'fetch_struct_stat64.c' || echo '$(srcdir)/'`fetch_struct_stat64.c
-
-libmpers_m32_a-fetch_struct_stat64.obj: fetch_struct_stat64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_stat64.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_stat64.Tpo -c -o libmpers_m32_a-fetch_struct_stat64.obj `if test -f 'fetch_struct_stat64.c'; then $(CYGPATH_W) 'fetch_struct_stat64.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat64.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_stat64.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_stat64.Po
-#	$(AM_V_CC)source='fetch_struct_stat64.c' object='libmpers_m32_a-fetch_struct_stat64.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_stat64.obj `if test -f 'fetch_struct_stat64.c'; then $(CYGPATH_W) 'fetch_struct_stat64.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat64.c'; fi`
-
-libmpers_m32_a-fetch_struct_statfs.o: fetch_struct_statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_statfs.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_statfs.Tpo -c -o libmpers_m32_a-fetch_struct_statfs.o `test -f 'fetch_struct_statfs.c' || echo '$(srcdir)/'`fetch_struct_statfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_statfs.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_statfs.Po
-#	$(AM_V_CC)source='fetch_struct_statfs.c' object='libmpers_m32_a-fetch_struct_statfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_statfs.o `test -f 'fetch_struct_statfs.c' || echo '$(srcdir)/'`fetch_struct_statfs.c
-
-libmpers_m32_a-fetch_struct_statfs.obj: fetch_struct_statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_statfs.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_statfs.Tpo -c -o libmpers_m32_a-fetch_struct_statfs.obj `if test -f 'fetch_struct_statfs.c'; then $(CYGPATH_W) 'fetch_struct_statfs.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_statfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_statfs.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_statfs.Po
-#	$(AM_V_CC)source='fetch_struct_statfs.c' object='libmpers_m32_a-fetch_struct_statfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_statfs.obj `if test -f 'fetch_struct_statfs.c'; then $(CYGPATH_W) 'fetch_struct_statfs.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_statfs.c'; fi`
-
-libmpers_m32_a-hdio.o: hdio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-hdio.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-hdio.Tpo -c -o libmpers_m32_a-hdio.o `test -f 'hdio.c' || echo '$(srcdir)/'`hdio.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-hdio.Tpo $(DEPDIR)/libmpers_m32_a-hdio.Po
-#	$(AM_V_CC)source='hdio.c' object='libmpers_m32_a-hdio.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-hdio.o `test -f 'hdio.c' || echo '$(srcdir)/'`hdio.c
-
-libmpers_m32_a-hdio.obj: hdio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-hdio.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-hdio.Tpo -c -o libmpers_m32_a-hdio.obj `if test -f 'hdio.c'; then $(CYGPATH_W) 'hdio.c'; else $(CYGPATH_W) '$(srcdir)/hdio.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-hdio.Tpo $(DEPDIR)/libmpers_m32_a-hdio.Po
-#	$(AM_V_CC)source='hdio.c' object='libmpers_m32_a-hdio.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-hdio.obj `if test -f 'hdio.c'; then $(CYGPATH_W) 'hdio.c'; else $(CYGPATH_W) '$(srcdir)/hdio.c'; fi`
-
-libmpers_m32_a-ipc_msgctl.o: ipc_msgctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-ipc_msgctl.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-ipc_msgctl.Tpo -c -o libmpers_m32_a-ipc_msgctl.o `test -f 'ipc_msgctl.c' || echo '$(srcdir)/'`ipc_msgctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-ipc_msgctl.Tpo $(DEPDIR)/libmpers_m32_a-ipc_msgctl.Po
-#	$(AM_V_CC)source='ipc_msgctl.c' object='libmpers_m32_a-ipc_msgctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-ipc_msgctl.o `test -f 'ipc_msgctl.c' || echo '$(srcdir)/'`ipc_msgctl.c
-
-libmpers_m32_a-ipc_msgctl.obj: ipc_msgctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-ipc_msgctl.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-ipc_msgctl.Tpo -c -o libmpers_m32_a-ipc_msgctl.obj `if test -f 'ipc_msgctl.c'; then $(CYGPATH_W) 'ipc_msgctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_msgctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-ipc_msgctl.Tpo $(DEPDIR)/libmpers_m32_a-ipc_msgctl.Po
-#	$(AM_V_CC)source='ipc_msgctl.c' object='libmpers_m32_a-ipc_msgctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-ipc_msgctl.obj `if test -f 'ipc_msgctl.c'; then $(CYGPATH_W) 'ipc_msgctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_msgctl.c'; fi`
-
-libmpers_m32_a-ipc_shmctl.o: ipc_shmctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-ipc_shmctl.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-ipc_shmctl.Tpo -c -o libmpers_m32_a-ipc_shmctl.o `test -f 'ipc_shmctl.c' || echo '$(srcdir)/'`ipc_shmctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-ipc_shmctl.Tpo $(DEPDIR)/libmpers_m32_a-ipc_shmctl.Po
-#	$(AM_V_CC)source='ipc_shmctl.c' object='libmpers_m32_a-ipc_shmctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-ipc_shmctl.o `test -f 'ipc_shmctl.c' || echo '$(srcdir)/'`ipc_shmctl.c
-
-libmpers_m32_a-ipc_shmctl.obj: ipc_shmctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-ipc_shmctl.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-ipc_shmctl.Tpo -c -o libmpers_m32_a-ipc_shmctl.obj `if test -f 'ipc_shmctl.c'; then $(CYGPATH_W) 'ipc_shmctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_shmctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-ipc_shmctl.Tpo $(DEPDIR)/libmpers_m32_a-ipc_shmctl.Po
-#	$(AM_V_CC)source='ipc_shmctl.c' object='libmpers_m32_a-ipc_shmctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-ipc_shmctl.obj `if test -f 'ipc_shmctl.c'; then $(CYGPATH_W) 'ipc_shmctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_shmctl.c'; fi`
-
-libmpers_m32_a-loop.o: loop.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-loop.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-loop.Tpo -c -o libmpers_m32_a-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-loop.Tpo $(DEPDIR)/libmpers_m32_a-loop.Po
-#	$(AM_V_CC)source='loop.c' object='libmpers_m32_a-loop.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
-
-libmpers_m32_a-loop.obj: loop.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-loop.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-loop.Tpo -c -o libmpers_m32_a-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-loop.Tpo $(DEPDIR)/libmpers_m32_a-loop.Po
-#	$(AM_V_CC)source='loop.c' object='libmpers_m32_a-loop.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
-
-libmpers_m32_a-mtd.o: mtd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-mtd.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-mtd.Tpo -c -o libmpers_m32_a-mtd.o `test -f 'mtd.c' || echo '$(srcdir)/'`mtd.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-mtd.Tpo $(DEPDIR)/libmpers_m32_a-mtd.Po
-#	$(AM_V_CC)source='mtd.c' object='libmpers_m32_a-mtd.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-mtd.o `test -f 'mtd.c' || echo '$(srcdir)/'`mtd.c
-
-libmpers_m32_a-mtd.obj: mtd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-mtd.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-mtd.Tpo -c -o libmpers_m32_a-mtd.obj `if test -f 'mtd.c'; then $(CYGPATH_W) 'mtd.c'; else $(CYGPATH_W) '$(srcdir)/mtd.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-mtd.Tpo $(DEPDIR)/libmpers_m32_a-mtd.Po
-#	$(AM_V_CC)source='mtd.c' object='libmpers_m32_a-mtd.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-mtd.obj `if test -f 'mtd.c'; then $(CYGPATH_W) 'mtd.c'; else $(CYGPATH_W) '$(srcdir)/mtd.c'; fi`
-
-libmpers_m32_a-print_mq_attr.o: print_mq_attr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_mq_attr.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_mq_attr.Tpo -c -o libmpers_m32_a-print_mq_attr.o `test -f 'print_mq_attr.c' || echo '$(srcdir)/'`print_mq_attr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_mq_attr.Tpo $(DEPDIR)/libmpers_m32_a-print_mq_attr.Po
-#	$(AM_V_CC)source='print_mq_attr.c' object='libmpers_m32_a-print_mq_attr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_mq_attr.o `test -f 'print_mq_attr.c' || echo '$(srcdir)/'`print_mq_attr.c
-
-libmpers_m32_a-print_mq_attr.obj: print_mq_attr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_mq_attr.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_mq_attr.Tpo -c -o libmpers_m32_a-print_mq_attr.obj `if test -f 'print_mq_attr.c'; then $(CYGPATH_W) 'print_mq_attr.c'; else $(CYGPATH_W) '$(srcdir)/print_mq_attr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_mq_attr.Tpo $(DEPDIR)/libmpers_m32_a-print_mq_attr.Po
-#	$(AM_V_CC)source='print_mq_attr.c' object='libmpers_m32_a-print_mq_attr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_mq_attr.obj `if test -f 'print_mq_attr.c'; then $(CYGPATH_W) 'print_mq_attr.c'; else $(CYGPATH_W) '$(srcdir)/print_mq_attr.c'; fi`
-
-libmpers_m32_a-print_msgbuf.o: print_msgbuf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_msgbuf.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_msgbuf.Tpo -c -o libmpers_m32_a-print_msgbuf.o `test -f 'print_msgbuf.c' || echo '$(srcdir)/'`print_msgbuf.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_msgbuf.Tpo $(DEPDIR)/libmpers_m32_a-print_msgbuf.Po
-#	$(AM_V_CC)source='print_msgbuf.c' object='libmpers_m32_a-print_msgbuf.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_msgbuf.o `test -f 'print_msgbuf.c' || echo '$(srcdir)/'`print_msgbuf.c
-
-libmpers_m32_a-print_msgbuf.obj: print_msgbuf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_msgbuf.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_msgbuf.Tpo -c -o libmpers_m32_a-print_msgbuf.obj `if test -f 'print_msgbuf.c'; then $(CYGPATH_W) 'print_msgbuf.c'; else $(CYGPATH_W) '$(srcdir)/print_msgbuf.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_msgbuf.Tpo $(DEPDIR)/libmpers_m32_a-print_msgbuf.Po
-#	$(AM_V_CC)source='print_msgbuf.c' object='libmpers_m32_a-print_msgbuf.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_msgbuf.obj `if test -f 'print_msgbuf.c'; then $(CYGPATH_W) 'print_msgbuf.c'; else $(CYGPATH_W) '$(srcdir)/print_msgbuf.c'; fi`
-
-libmpers_m32_a-print_sg_req_info.o: print_sg_req_info.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_sg_req_info.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_sg_req_info.Tpo -c -o libmpers_m32_a-print_sg_req_info.o `test -f 'print_sg_req_info.c' || echo '$(srcdir)/'`print_sg_req_info.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_sg_req_info.Tpo $(DEPDIR)/libmpers_m32_a-print_sg_req_info.Po
-#	$(AM_V_CC)source='print_sg_req_info.c' object='libmpers_m32_a-print_sg_req_info.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_sg_req_info.o `test -f 'print_sg_req_info.c' || echo '$(srcdir)/'`print_sg_req_info.c
-
-libmpers_m32_a-print_sg_req_info.obj: print_sg_req_info.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_sg_req_info.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_sg_req_info.Tpo -c -o libmpers_m32_a-print_sg_req_info.obj `if test -f 'print_sg_req_info.c'; then $(CYGPATH_W) 'print_sg_req_info.c'; else $(CYGPATH_W) '$(srcdir)/print_sg_req_info.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_sg_req_info.Tpo $(DEPDIR)/libmpers_m32_a-print_sg_req_info.Po
-#	$(AM_V_CC)source='print_sg_req_info.c' object='libmpers_m32_a-print_sg_req_info.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_sg_req_info.obj `if test -f 'print_sg_req_info.c'; then $(CYGPATH_W) 'print_sg_req_info.c'; else $(CYGPATH_W) '$(srcdir)/print_sg_req_info.c'; fi`
-
-libmpers_m32_a-print_sigevent.o: print_sigevent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_sigevent.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_sigevent.Tpo -c -o libmpers_m32_a-print_sigevent.o `test -f 'print_sigevent.c' || echo '$(srcdir)/'`print_sigevent.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_sigevent.Tpo $(DEPDIR)/libmpers_m32_a-print_sigevent.Po
-#	$(AM_V_CC)source='print_sigevent.c' object='libmpers_m32_a-print_sigevent.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_sigevent.o `test -f 'print_sigevent.c' || echo '$(srcdir)/'`print_sigevent.c
-
-libmpers_m32_a-print_sigevent.obj: print_sigevent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_sigevent.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_sigevent.Tpo -c -o libmpers_m32_a-print_sigevent.obj `if test -f 'print_sigevent.c'; then $(CYGPATH_W) 'print_sigevent.c'; else $(CYGPATH_W) '$(srcdir)/print_sigevent.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_sigevent.Tpo $(DEPDIR)/libmpers_m32_a-print_sigevent.Po
-#	$(AM_V_CC)source='print_sigevent.c' object='libmpers_m32_a-print_sigevent.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_sigevent.obj `if test -f 'print_sigevent.c'; then $(CYGPATH_W) 'print_sigevent.c'; else $(CYGPATH_W) '$(srcdir)/print_sigevent.c'; fi`
-
-libmpers_m32_a-print_time.o: print_time.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_time.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_time.Tpo -c -o libmpers_m32_a-print_time.o `test -f 'print_time.c' || echo '$(srcdir)/'`print_time.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_time.Tpo $(DEPDIR)/libmpers_m32_a-print_time.Po
-#	$(AM_V_CC)source='print_time.c' object='libmpers_m32_a-print_time.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_time.o `test -f 'print_time.c' || echo '$(srcdir)/'`print_time.c
-
-libmpers_m32_a-print_time.obj: print_time.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_time.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_time.Tpo -c -o libmpers_m32_a-print_time.obj `if test -f 'print_time.c'; then $(CYGPATH_W) 'print_time.c'; else $(CYGPATH_W) '$(srcdir)/print_time.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_time.Tpo $(DEPDIR)/libmpers_m32_a-print_time.Po
-#	$(AM_V_CC)source='print_time.c' object='libmpers_m32_a-print_time.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_time.obj `if test -f 'print_time.c'; then $(CYGPATH_W) 'print_time.c'; else $(CYGPATH_W) '$(srcdir)/print_time.c'; fi`
-
-libmpers_m32_a-print_timespec.o: print_timespec.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_timespec.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_timespec.Tpo -c -o libmpers_m32_a-print_timespec.o `test -f 'print_timespec.c' || echo '$(srcdir)/'`print_timespec.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_timespec.Tpo $(DEPDIR)/libmpers_m32_a-print_timespec.Po
-#	$(AM_V_CC)source='print_timespec.c' object='libmpers_m32_a-print_timespec.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_timespec.o `test -f 'print_timespec.c' || echo '$(srcdir)/'`print_timespec.c
-
-libmpers_m32_a-print_timespec.obj: print_timespec.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_timespec.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_timespec.Tpo -c -o libmpers_m32_a-print_timespec.obj `if test -f 'print_timespec.c'; then $(CYGPATH_W) 'print_timespec.c'; else $(CYGPATH_W) '$(srcdir)/print_timespec.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_timespec.Tpo $(DEPDIR)/libmpers_m32_a-print_timespec.Po
-#	$(AM_V_CC)source='print_timespec.c' object='libmpers_m32_a-print_timespec.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_timespec.obj `if test -f 'print_timespec.c'; then $(CYGPATH_W) 'print_timespec.c'; else $(CYGPATH_W) '$(srcdir)/print_timespec.c'; fi`
-
-libmpers_m32_a-print_timeval.o: print_timeval.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_timeval.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_timeval.Tpo -c -o libmpers_m32_a-print_timeval.o `test -f 'print_timeval.c' || echo '$(srcdir)/'`print_timeval.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_timeval.Tpo $(DEPDIR)/libmpers_m32_a-print_timeval.Po
-#	$(AM_V_CC)source='print_timeval.c' object='libmpers_m32_a-print_timeval.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_timeval.o `test -f 'print_timeval.c' || echo '$(srcdir)/'`print_timeval.c
-
-libmpers_m32_a-print_timeval.obj: print_timeval.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_timeval.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_timeval.Tpo -c -o libmpers_m32_a-print_timeval.obj `if test -f 'print_timeval.c'; then $(CYGPATH_W) 'print_timeval.c'; else $(CYGPATH_W) '$(srcdir)/print_timeval.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_timeval.Tpo $(DEPDIR)/libmpers_m32_a-print_timeval.Po
-#	$(AM_V_CC)source='print_timeval.c' object='libmpers_m32_a-print_timeval.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_timeval.obj `if test -f 'print_timeval.c'; then $(CYGPATH_W) 'print_timeval.c'; else $(CYGPATH_W) '$(srcdir)/print_timeval.c'; fi`
-
-libmpers_m32_a-print_timex.o: print_timex.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_timex.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_timex.Tpo -c -o libmpers_m32_a-print_timex.o `test -f 'print_timex.c' || echo '$(srcdir)/'`print_timex.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_timex.Tpo $(DEPDIR)/libmpers_m32_a-print_timex.Po
-#	$(AM_V_CC)source='print_timex.c' object='libmpers_m32_a-print_timex.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_timex.o `test -f 'print_timex.c' || echo '$(srcdir)/'`print_timex.c
-
-libmpers_m32_a-print_timex.obj: print_timex.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_timex.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_timex.Tpo -c -o libmpers_m32_a-print_timex.obj `if test -f 'print_timex.c'; then $(CYGPATH_W) 'print_timex.c'; else $(CYGPATH_W) '$(srcdir)/print_timex.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_timex.Tpo $(DEPDIR)/libmpers_m32_a-print_timex.Po
-#	$(AM_V_CC)source='print_timex.c' object='libmpers_m32_a-print_timex.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_timex.obj `if test -f 'print_timex.c'; then $(CYGPATH_W) 'print_timex.c'; else $(CYGPATH_W) '$(srcdir)/print_timex.c'; fi`
-
-libmpers_m32_a-printrusage.o: printrusage.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-printrusage.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-printrusage.Tpo -c -o libmpers_m32_a-printrusage.o `test -f 'printrusage.c' || echo '$(srcdir)/'`printrusage.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-printrusage.Tpo $(DEPDIR)/libmpers_m32_a-printrusage.Po
-#	$(AM_V_CC)source='printrusage.c' object='libmpers_m32_a-printrusage.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-printrusage.o `test -f 'printrusage.c' || echo '$(srcdir)/'`printrusage.c
-
-libmpers_m32_a-printrusage.obj: printrusage.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-printrusage.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-printrusage.Tpo -c -o libmpers_m32_a-printrusage.obj `if test -f 'printrusage.c'; then $(CYGPATH_W) 'printrusage.c'; else $(CYGPATH_W) '$(srcdir)/printrusage.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-printrusage.Tpo $(DEPDIR)/libmpers_m32_a-printrusage.Po
-#	$(AM_V_CC)source='printrusage.c' object='libmpers_m32_a-printrusage.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-printrusage.obj `if test -f 'printrusage.c'; then $(CYGPATH_W) 'printrusage.c'; else $(CYGPATH_W) '$(srcdir)/printrusage.c'; fi`
-
-libmpers_m32_a-printsiginfo.o: printsiginfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-printsiginfo.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-printsiginfo.Tpo -c -o libmpers_m32_a-printsiginfo.o `test -f 'printsiginfo.c' || echo '$(srcdir)/'`printsiginfo.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-printsiginfo.Tpo $(DEPDIR)/libmpers_m32_a-printsiginfo.Po
-#	$(AM_V_CC)source='printsiginfo.c' object='libmpers_m32_a-printsiginfo.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-printsiginfo.o `test -f 'printsiginfo.c' || echo '$(srcdir)/'`printsiginfo.c
-
-libmpers_m32_a-printsiginfo.obj: printsiginfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-printsiginfo.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-printsiginfo.Tpo -c -o libmpers_m32_a-printsiginfo.obj `if test -f 'printsiginfo.c'; then $(CYGPATH_W) 'printsiginfo.c'; else $(CYGPATH_W) '$(srcdir)/printsiginfo.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-printsiginfo.Tpo $(DEPDIR)/libmpers_m32_a-printsiginfo.Po
-#	$(AM_V_CC)source='printsiginfo.c' object='libmpers_m32_a-printsiginfo.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-printsiginfo.obj `if test -f 'printsiginfo.c'; then $(CYGPATH_W) 'printsiginfo.c'; else $(CYGPATH_W) '$(srcdir)/printsiginfo.c'; fi`
-
-libmpers_m32_a-rt_sigreturn.o: rt_sigreturn.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-rt_sigreturn.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-rt_sigreturn.Tpo -c -o libmpers_m32_a-rt_sigreturn.o `test -f 'rt_sigreturn.c' || echo '$(srcdir)/'`rt_sigreturn.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-rt_sigreturn.Tpo $(DEPDIR)/libmpers_m32_a-rt_sigreturn.Po
-#	$(AM_V_CC)source='rt_sigreturn.c' object='libmpers_m32_a-rt_sigreturn.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-rt_sigreturn.o `test -f 'rt_sigreturn.c' || echo '$(srcdir)/'`rt_sigreturn.c
-
-libmpers_m32_a-rt_sigreturn.obj: rt_sigreturn.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-rt_sigreturn.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-rt_sigreturn.Tpo -c -o libmpers_m32_a-rt_sigreturn.obj `if test -f 'rt_sigreturn.c'; then $(CYGPATH_W) 'rt_sigreturn.c'; else $(CYGPATH_W) '$(srcdir)/rt_sigreturn.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-rt_sigreturn.Tpo $(DEPDIR)/libmpers_m32_a-rt_sigreturn.Po
-#	$(AM_V_CC)source='rt_sigreturn.c' object='libmpers_m32_a-rt_sigreturn.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-rt_sigreturn.obj `if test -f 'rt_sigreturn.c'; then $(CYGPATH_W) 'rt_sigreturn.c'; else $(CYGPATH_W) '$(srcdir)/rt_sigreturn.c'; fi`
-
-libmpers_m32_a-rtc.o: rtc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-rtc.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-rtc.Tpo -c -o libmpers_m32_a-rtc.o `test -f 'rtc.c' || echo '$(srcdir)/'`rtc.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-rtc.Tpo $(DEPDIR)/libmpers_m32_a-rtc.Po
-#	$(AM_V_CC)source='rtc.c' object='libmpers_m32_a-rtc.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-rtc.o `test -f 'rtc.c' || echo '$(srcdir)/'`rtc.c
-
-libmpers_m32_a-rtc.obj: rtc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-rtc.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-rtc.Tpo -c -o libmpers_m32_a-rtc.obj `if test -f 'rtc.c'; then $(CYGPATH_W) 'rtc.c'; else $(CYGPATH_W) '$(srcdir)/rtc.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-rtc.Tpo $(DEPDIR)/libmpers_m32_a-rtc.Po
-#	$(AM_V_CC)source='rtc.c' object='libmpers_m32_a-rtc.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-rtc.obj `if test -f 'rtc.c'; then $(CYGPATH_W) 'rtc.c'; else $(CYGPATH_W) '$(srcdir)/rtc.c'; fi`
-
-libmpers_m32_a-sg_io_v3.o: sg_io_v3.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-sg_io_v3.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-sg_io_v3.Tpo -c -o libmpers_m32_a-sg_io_v3.o `test -f 'sg_io_v3.c' || echo '$(srcdir)/'`sg_io_v3.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-sg_io_v3.Tpo $(DEPDIR)/libmpers_m32_a-sg_io_v3.Po
-#	$(AM_V_CC)source='sg_io_v3.c' object='libmpers_m32_a-sg_io_v3.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-sg_io_v3.o `test -f 'sg_io_v3.c' || echo '$(srcdir)/'`sg_io_v3.c
-
-libmpers_m32_a-sg_io_v3.obj: sg_io_v3.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-sg_io_v3.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-sg_io_v3.Tpo -c -o libmpers_m32_a-sg_io_v3.obj `if test -f 'sg_io_v3.c'; then $(CYGPATH_W) 'sg_io_v3.c'; else $(CYGPATH_W) '$(srcdir)/sg_io_v3.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-sg_io_v3.Tpo $(DEPDIR)/libmpers_m32_a-sg_io_v3.Po
-#	$(AM_V_CC)source='sg_io_v3.c' object='libmpers_m32_a-sg_io_v3.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-sg_io_v3.obj `if test -f 'sg_io_v3.c'; then $(CYGPATH_W) 'sg_io_v3.c'; else $(CYGPATH_W) '$(srcdir)/sg_io_v3.c'; fi`
-
-libmpers_m32_a-sigaltstack.o: sigaltstack.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-sigaltstack.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-sigaltstack.Tpo -c -o libmpers_m32_a-sigaltstack.o `test -f 'sigaltstack.c' || echo '$(srcdir)/'`sigaltstack.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-sigaltstack.Tpo $(DEPDIR)/libmpers_m32_a-sigaltstack.Po
-#	$(AM_V_CC)source='sigaltstack.c' object='libmpers_m32_a-sigaltstack.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-sigaltstack.o `test -f 'sigaltstack.c' || echo '$(srcdir)/'`sigaltstack.c
-
-libmpers_m32_a-sigaltstack.obj: sigaltstack.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-sigaltstack.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-sigaltstack.Tpo -c -o libmpers_m32_a-sigaltstack.obj `if test -f 'sigaltstack.c'; then $(CYGPATH_W) 'sigaltstack.c'; else $(CYGPATH_W) '$(srcdir)/sigaltstack.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-sigaltstack.Tpo $(DEPDIR)/libmpers_m32_a-sigaltstack.Po
-#	$(AM_V_CC)source='sigaltstack.c' object='libmpers_m32_a-sigaltstack.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-sigaltstack.obj `if test -f 'sigaltstack.c'; then $(CYGPATH_W) 'sigaltstack.c'; else $(CYGPATH_W) '$(srcdir)/sigaltstack.c'; fi`
-
-libmpers_m32_a-sock.o: sock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-sock.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-sock.Tpo -c -o libmpers_m32_a-sock.o `test -f 'sock.c' || echo '$(srcdir)/'`sock.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-sock.Tpo $(DEPDIR)/libmpers_m32_a-sock.Po
-#	$(AM_V_CC)source='sock.c' object='libmpers_m32_a-sock.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-sock.o `test -f 'sock.c' || echo '$(srcdir)/'`sock.c
-
-libmpers_m32_a-sock.obj: sock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-sock.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-sock.Tpo -c -o libmpers_m32_a-sock.obj `if test -f 'sock.c'; then $(CYGPATH_W) 'sock.c'; else $(CYGPATH_W) '$(srcdir)/sock.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-sock.Tpo $(DEPDIR)/libmpers_m32_a-sock.Po
-#	$(AM_V_CC)source='sock.c' object='libmpers_m32_a-sock.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-sock.obj `if test -f 'sock.c'; then $(CYGPATH_W) 'sock.c'; else $(CYGPATH_W) '$(srcdir)/sock.c'; fi`
-
-libmpers_m32_a-sysinfo.o: sysinfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-sysinfo.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-sysinfo.Tpo -c -o libmpers_m32_a-sysinfo.o `test -f 'sysinfo.c' || echo '$(srcdir)/'`sysinfo.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-sysinfo.Tpo $(DEPDIR)/libmpers_m32_a-sysinfo.Po
-#	$(AM_V_CC)source='sysinfo.c' object='libmpers_m32_a-sysinfo.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-sysinfo.o `test -f 'sysinfo.c' || echo '$(srcdir)/'`sysinfo.c
-
-libmpers_m32_a-sysinfo.obj: sysinfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-sysinfo.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-sysinfo.Tpo -c -o libmpers_m32_a-sysinfo.obj `if test -f 'sysinfo.c'; then $(CYGPATH_W) 'sysinfo.c'; else $(CYGPATH_W) '$(srcdir)/sysinfo.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-sysinfo.Tpo $(DEPDIR)/libmpers_m32_a-sysinfo.Po
-#	$(AM_V_CC)source='sysinfo.c' object='libmpers_m32_a-sysinfo.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-sysinfo.obj `if test -f 'sysinfo.c'; then $(CYGPATH_W) 'sysinfo.c'; else $(CYGPATH_W) '$(srcdir)/sysinfo.c'; fi`
-
-libmpers_m32_a-times.o: times.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-times.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-times.Tpo -c -o libmpers_m32_a-times.o `test -f 'times.c' || echo '$(srcdir)/'`times.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-times.Tpo $(DEPDIR)/libmpers_m32_a-times.Po
-#	$(AM_V_CC)source='times.c' object='libmpers_m32_a-times.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-times.o `test -f 'times.c' || echo '$(srcdir)/'`times.c
-
-libmpers_m32_a-times.obj: times.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-times.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-times.Tpo -c -o libmpers_m32_a-times.obj `if test -f 'times.c'; then $(CYGPATH_W) 'times.c'; else $(CYGPATH_W) '$(srcdir)/times.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-times.Tpo $(DEPDIR)/libmpers_m32_a-times.Po
-#	$(AM_V_CC)source='times.c' object='libmpers_m32_a-times.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-times.obj `if test -f 'times.c'; then $(CYGPATH_W) 'times.c'; else $(CYGPATH_W) '$(srcdir)/times.c'; fi`
-
-libmpers_m32_a-ustat.o: ustat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-ustat.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-ustat.Tpo -c -o libmpers_m32_a-ustat.o `test -f 'ustat.c' || echo '$(srcdir)/'`ustat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-ustat.Tpo $(DEPDIR)/libmpers_m32_a-ustat.Po
-#	$(AM_V_CC)source='ustat.c' object='libmpers_m32_a-ustat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-ustat.o `test -f 'ustat.c' || echo '$(srcdir)/'`ustat.c
-
-libmpers_m32_a-ustat.obj: ustat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-ustat.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-ustat.Tpo -c -o libmpers_m32_a-ustat.obj `if test -f 'ustat.c'; then $(CYGPATH_W) 'ustat.c'; else $(CYGPATH_W) '$(srcdir)/ustat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-ustat.Tpo $(DEPDIR)/libmpers_m32_a-ustat.Po
-#	$(AM_V_CC)source='ustat.c' object='libmpers_m32_a-ustat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-ustat.obj `if test -f 'ustat.c'; then $(CYGPATH_W) 'ustat.c'; else $(CYGPATH_W) '$(srcdir)/ustat.c'; fi`
-
-libmpers_m32_a-utime.o: utime.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-utime.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-utime.Tpo -c -o libmpers_m32_a-utime.o `test -f 'utime.c' || echo '$(srcdir)/'`utime.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-utime.Tpo $(DEPDIR)/libmpers_m32_a-utime.Po
-#	$(AM_V_CC)source='utime.c' object='libmpers_m32_a-utime.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-utime.o `test -f 'utime.c' || echo '$(srcdir)/'`utime.c
-
-libmpers_m32_a-utime.obj: utime.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-utime.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-utime.Tpo -c -o libmpers_m32_a-utime.obj `if test -f 'utime.c'; then $(CYGPATH_W) 'utime.c'; else $(CYGPATH_W) '$(srcdir)/utime.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-utime.Tpo $(DEPDIR)/libmpers_m32_a-utime.Po
-#	$(AM_V_CC)source='utime.c' object='libmpers_m32_a-utime.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-utime.obj `if test -f 'utime.c'; then $(CYGPATH_W) 'utime.c'; else $(CYGPATH_W) '$(srcdir)/utime.c'; fi`
-
-libmpers_m32_a-v4l2.o: v4l2.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-v4l2.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-v4l2.Tpo -c -o libmpers_m32_a-v4l2.o `test -f 'v4l2.c' || echo '$(srcdir)/'`v4l2.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-v4l2.Tpo $(DEPDIR)/libmpers_m32_a-v4l2.Po
-#	$(AM_V_CC)source='v4l2.c' object='libmpers_m32_a-v4l2.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-v4l2.o `test -f 'v4l2.c' || echo '$(srcdir)/'`v4l2.c
-
-libmpers_m32_a-v4l2.obj: v4l2.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-v4l2.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-v4l2.Tpo -c -o libmpers_m32_a-v4l2.obj `if test -f 'v4l2.c'; then $(CYGPATH_W) 'v4l2.c'; else $(CYGPATH_W) '$(srcdir)/v4l2.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-v4l2.Tpo $(DEPDIR)/libmpers_m32_a-v4l2.Po
-#	$(AM_V_CC)source='v4l2.c' object='libmpers_m32_a-v4l2.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-v4l2.obj `if test -f 'v4l2.c'; then $(CYGPATH_W) 'v4l2.c'; else $(CYGPATH_W) '$(srcdir)/v4l2.c'; fi`
-
-libmpers_mx32_a-block.o: block.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-block.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-block.Tpo -c -o libmpers_mx32_a-block.o `test -f 'block.c' || echo '$(srcdir)/'`block.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-block.Tpo $(DEPDIR)/libmpers_mx32_a-block.Po
-#	$(AM_V_CC)source='block.c' object='libmpers_mx32_a-block.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-block.o `test -f 'block.c' || echo '$(srcdir)/'`block.c
-
-libmpers_mx32_a-block.obj: block.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-block.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-block.Tpo -c -o libmpers_mx32_a-block.obj `if test -f 'block.c'; then $(CYGPATH_W) 'block.c'; else $(CYGPATH_W) '$(srcdir)/block.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-block.Tpo $(DEPDIR)/libmpers_mx32_a-block.Po
-#	$(AM_V_CC)source='block.c' object='libmpers_mx32_a-block.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-block.obj `if test -f 'block.c'; then $(CYGPATH_W) 'block.c'; else $(CYGPATH_W) '$(srcdir)/block.c'; fi`
-
-libmpers_mx32_a-btrfs.o: btrfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-btrfs.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-btrfs.Tpo -c -o libmpers_mx32_a-btrfs.o `test -f 'btrfs.c' || echo '$(srcdir)/'`btrfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-btrfs.Tpo $(DEPDIR)/libmpers_mx32_a-btrfs.Po
-#	$(AM_V_CC)source='btrfs.c' object='libmpers_mx32_a-btrfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-btrfs.o `test -f 'btrfs.c' || echo '$(srcdir)/'`btrfs.c
-
-libmpers_mx32_a-btrfs.obj: btrfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-btrfs.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-btrfs.Tpo -c -o libmpers_mx32_a-btrfs.obj `if test -f 'btrfs.c'; then $(CYGPATH_W) 'btrfs.c'; else $(CYGPATH_W) '$(srcdir)/btrfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-btrfs.Tpo $(DEPDIR)/libmpers_mx32_a-btrfs.Po
-#	$(AM_V_CC)source='btrfs.c' object='libmpers_mx32_a-btrfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-btrfs.obj `if test -f 'btrfs.c'; then $(CYGPATH_W) 'btrfs.c'; else $(CYGPATH_W) '$(srcdir)/btrfs.c'; fi`
-
-libmpers_mx32_a-dirent.o: dirent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-dirent.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-dirent.Tpo -c -o libmpers_mx32_a-dirent.o `test -f 'dirent.c' || echo '$(srcdir)/'`dirent.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-dirent.Tpo $(DEPDIR)/libmpers_mx32_a-dirent.Po
-#	$(AM_V_CC)source='dirent.c' object='libmpers_mx32_a-dirent.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-dirent.o `test -f 'dirent.c' || echo '$(srcdir)/'`dirent.c
-
-libmpers_mx32_a-dirent.obj: dirent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-dirent.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-dirent.Tpo -c -o libmpers_mx32_a-dirent.obj `if test -f 'dirent.c'; then $(CYGPATH_W) 'dirent.c'; else $(CYGPATH_W) '$(srcdir)/dirent.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-dirent.Tpo $(DEPDIR)/libmpers_mx32_a-dirent.Po
-#	$(AM_V_CC)source='dirent.c' object='libmpers_mx32_a-dirent.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-dirent.obj `if test -f 'dirent.c'; then $(CYGPATH_W) 'dirent.c'; else $(CYGPATH_W) '$(srcdir)/dirent.c'; fi`
-
-libmpers_mx32_a-evdev.o: evdev.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-evdev.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-evdev.Tpo -c -o libmpers_mx32_a-evdev.o `test -f 'evdev.c' || echo '$(srcdir)/'`evdev.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-evdev.Tpo $(DEPDIR)/libmpers_mx32_a-evdev.Po
-#	$(AM_V_CC)source='evdev.c' object='libmpers_mx32_a-evdev.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-evdev.o `test -f 'evdev.c' || echo '$(srcdir)/'`evdev.c
-
-libmpers_mx32_a-evdev.obj: evdev.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-evdev.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-evdev.Tpo -c -o libmpers_mx32_a-evdev.obj `if test -f 'evdev.c'; then $(CYGPATH_W) 'evdev.c'; else $(CYGPATH_W) '$(srcdir)/evdev.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-evdev.Tpo $(DEPDIR)/libmpers_mx32_a-evdev.Po
-#	$(AM_V_CC)source='evdev.c' object='libmpers_mx32_a-evdev.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-evdev.obj `if test -f 'evdev.c'; then $(CYGPATH_W) 'evdev.c'; else $(CYGPATH_W) '$(srcdir)/evdev.c'; fi`
-
-libmpers_mx32_a-fetch_seccomp_fprog.o: fetch_seccomp_fprog.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_seccomp_fprog.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Tpo -c -o libmpers_mx32_a-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Po
-#	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='libmpers_mx32_a-fetch_seccomp_fprog.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
-
-libmpers_mx32_a-fetch_seccomp_fprog.obj: fetch_seccomp_fprog.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_seccomp_fprog.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Tpo -c -o libmpers_mx32_a-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Po
-#	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='libmpers_mx32_a-fetch_seccomp_fprog.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
-
-libmpers_mx32_a-fetch_struct_flock.o: fetch_struct_flock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_flock.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_flock.Tpo -c -o libmpers_mx32_a-fetch_struct_flock.o `test -f 'fetch_struct_flock.c' || echo '$(srcdir)/'`fetch_struct_flock.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_flock.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_flock.Po
-#	$(AM_V_CC)source='fetch_struct_flock.c' object='libmpers_mx32_a-fetch_struct_flock.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_flock.o `test -f 'fetch_struct_flock.c' || echo '$(srcdir)/'`fetch_struct_flock.c
-
-libmpers_mx32_a-fetch_struct_flock.obj: fetch_struct_flock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_flock.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_flock.Tpo -c -o libmpers_mx32_a-fetch_struct_flock.obj `if test -f 'fetch_struct_flock.c'; then $(CYGPATH_W) 'fetch_struct_flock.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_flock.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_flock.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_flock.Po
-#	$(AM_V_CC)source='fetch_struct_flock.c' object='libmpers_mx32_a-fetch_struct_flock.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_flock.obj `if test -f 'fetch_struct_flock.c'; then $(CYGPATH_W) 'fetch_struct_flock.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_flock.c'; fi`
-
-libmpers_mx32_a-fetch_struct_mmsghdr.o: fetch_struct_mmsghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_mmsghdr.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Tpo -c -o libmpers_mx32_a-fetch_struct_mmsghdr.o `test -f 'fetch_struct_mmsghdr.c' || echo '$(srcdir)/'`fetch_struct_mmsghdr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Po
-#	$(AM_V_CC)source='fetch_struct_mmsghdr.c' object='libmpers_mx32_a-fetch_struct_mmsghdr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_mmsghdr.o `test -f 'fetch_struct_mmsghdr.c' || echo '$(srcdir)/'`fetch_struct_mmsghdr.c
-
-libmpers_mx32_a-fetch_struct_mmsghdr.obj: fetch_struct_mmsghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_mmsghdr.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Tpo -c -o libmpers_mx32_a-fetch_struct_mmsghdr.obj `if test -f 'fetch_struct_mmsghdr.c'; then $(CYGPATH_W) 'fetch_struct_mmsghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_mmsghdr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Po
-#	$(AM_V_CC)source='fetch_struct_mmsghdr.c' object='libmpers_mx32_a-fetch_struct_mmsghdr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_mmsghdr.obj `if test -f 'fetch_struct_mmsghdr.c'; then $(CYGPATH_W) 'fetch_struct_mmsghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_mmsghdr.c'; fi`
-
-libmpers_mx32_a-fetch_struct_msghdr.o: fetch_struct_msghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_msghdr.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_msghdr.Tpo -c -o libmpers_mx32_a-fetch_struct_msghdr.o `test -f 'fetch_struct_msghdr.c' || echo '$(srcdir)/'`fetch_struct_msghdr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_msghdr.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_msghdr.Po
-#	$(AM_V_CC)source='fetch_struct_msghdr.c' object='libmpers_mx32_a-fetch_struct_msghdr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_msghdr.o `test -f 'fetch_struct_msghdr.c' || echo '$(srcdir)/'`fetch_struct_msghdr.c
-
-libmpers_mx32_a-fetch_struct_msghdr.obj: fetch_struct_msghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_msghdr.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_msghdr.Tpo -c -o libmpers_mx32_a-fetch_struct_msghdr.obj `if test -f 'fetch_struct_msghdr.c'; then $(CYGPATH_W) 'fetch_struct_msghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_msghdr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_msghdr.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_msghdr.Po
-#	$(AM_V_CC)source='fetch_struct_msghdr.c' object='libmpers_mx32_a-fetch_struct_msghdr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_msghdr.obj `if test -f 'fetch_struct_msghdr.c'; then $(CYGPATH_W) 'fetch_struct_msghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_msghdr.c'; fi`
-
-libmpers_mx32_a-fetch_struct_stat.o: fetch_struct_stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_stat.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat.Tpo -c -o libmpers_mx32_a-fetch_struct_stat.o `test -f 'fetch_struct_stat.c' || echo '$(srcdir)/'`fetch_struct_stat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat.Po
-#	$(AM_V_CC)source='fetch_struct_stat.c' object='libmpers_mx32_a-fetch_struct_stat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_stat.o `test -f 'fetch_struct_stat.c' || echo '$(srcdir)/'`fetch_struct_stat.c
-
-libmpers_mx32_a-fetch_struct_stat.obj: fetch_struct_stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_stat.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat.Tpo -c -o libmpers_mx32_a-fetch_struct_stat.obj `if test -f 'fetch_struct_stat.c'; then $(CYGPATH_W) 'fetch_struct_stat.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat.Po
-#	$(AM_V_CC)source='fetch_struct_stat.c' object='libmpers_mx32_a-fetch_struct_stat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_stat.obj `if test -f 'fetch_struct_stat.c'; then $(CYGPATH_W) 'fetch_struct_stat.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat.c'; fi`
-
-libmpers_mx32_a-fetch_struct_stat64.o: fetch_struct_stat64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_stat64.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat64.Tpo -c -o libmpers_mx32_a-fetch_struct_stat64.o `test -f 'fetch_struct_stat64.c' || echo '$(srcdir)/'`fetch_struct_stat64.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat64.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat64.Po
-#	$(AM_V_CC)source='fetch_struct_stat64.c' object='libmpers_mx32_a-fetch_struct_stat64.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_stat64.o `test -f 'fetch_struct_stat64.c' || echo '$(srcdir)/'`fetch_struct_stat64.c
-
-libmpers_mx32_a-fetch_struct_stat64.obj: fetch_struct_stat64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_stat64.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat64.Tpo -c -o libmpers_mx32_a-fetch_struct_stat64.obj `if test -f 'fetch_struct_stat64.c'; then $(CYGPATH_W) 'fetch_struct_stat64.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat64.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat64.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_stat64.Po
-#	$(AM_V_CC)source='fetch_struct_stat64.c' object='libmpers_mx32_a-fetch_struct_stat64.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_stat64.obj `if test -f 'fetch_struct_stat64.c'; then $(CYGPATH_W) 'fetch_struct_stat64.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat64.c'; fi`
-
-libmpers_mx32_a-fetch_struct_statfs.o: fetch_struct_statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_statfs.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_statfs.Tpo -c -o libmpers_mx32_a-fetch_struct_statfs.o `test -f 'fetch_struct_statfs.c' || echo '$(srcdir)/'`fetch_struct_statfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_statfs.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_statfs.Po
-#	$(AM_V_CC)source='fetch_struct_statfs.c' object='libmpers_mx32_a-fetch_struct_statfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_statfs.o `test -f 'fetch_struct_statfs.c' || echo '$(srcdir)/'`fetch_struct_statfs.c
-
-libmpers_mx32_a-fetch_struct_statfs.obj: fetch_struct_statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_statfs.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_statfs.Tpo -c -o libmpers_mx32_a-fetch_struct_statfs.obj `if test -f 'fetch_struct_statfs.c'; then $(CYGPATH_W) 'fetch_struct_statfs.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_statfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_statfs.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_statfs.Po
-#	$(AM_V_CC)source='fetch_struct_statfs.c' object='libmpers_mx32_a-fetch_struct_statfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_statfs.obj `if test -f 'fetch_struct_statfs.c'; then $(CYGPATH_W) 'fetch_struct_statfs.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_statfs.c'; fi`
-
-libmpers_mx32_a-hdio.o: hdio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-hdio.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-hdio.Tpo -c -o libmpers_mx32_a-hdio.o `test -f 'hdio.c' || echo '$(srcdir)/'`hdio.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-hdio.Tpo $(DEPDIR)/libmpers_mx32_a-hdio.Po
-#	$(AM_V_CC)source='hdio.c' object='libmpers_mx32_a-hdio.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-hdio.o `test -f 'hdio.c' || echo '$(srcdir)/'`hdio.c
-
-libmpers_mx32_a-hdio.obj: hdio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-hdio.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-hdio.Tpo -c -o libmpers_mx32_a-hdio.obj `if test -f 'hdio.c'; then $(CYGPATH_W) 'hdio.c'; else $(CYGPATH_W) '$(srcdir)/hdio.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-hdio.Tpo $(DEPDIR)/libmpers_mx32_a-hdio.Po
-#	$(AM_V_CC)source='hdio.c' object='libmpers_mx32_a-hdio.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-hdio.obj `if test -f 'hdio.c'; then $(CYGPATH_W) 'hdio.c'; else $(CYGPATH_W) '$(srcdir)/hdio.c'; fi`
-
-libmpers_mx32_a-ipc_msgctl.o: ipc_msgctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-ipc_msgctl.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-ipc_msgctl.Tpo -c -o libmpers_mx32_a-ipc_msgctl.o `test -f 'ipc_msgctl.c' || echo '$(srcdir)/'`ipc_msgctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-ipc_msgctl.Tpo $(DEPDIR)/libmpers_mx32_a-ipc_msgctl.Po
-#	$(AM_V_CC)source='ipc_msgctl.c' object='libmpers_mx32_a-ipc_msgctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-ipc_msgctl.o `test -f 'ipc_msgctl.c' || echo '$(srcdir)/'`ipc_msgctl.c
-
-libmpers_mx32_a-ipc_msgctl.obj: ipc_msgctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-ipc_msgctl.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-ipc_msgctl.Tpo -c -o libmpers_mx32_a-ipc_msgctl.obj `if test -f 'ipc_msgctl.c'; then $(CYGPATH_W) 'ipc_msgctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_msgctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-ipc_msgctl.Tpo $(DEPDIR)/libmpers_mx32_a-ipc_msgctl.Po
-#	$(AM_V_CC)source='ipc_msgctl.c' object='libmpers_mx32_a-ipc_msgctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-ipc_msgctl.obj `if test -f 'ipc_msgctl.c'; then $(CYGPATH_W) 'ipc_msgctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_msgctl.c'; fi`
-
-libmpers_mx32_a-ipc_shmctl.o: ipc_shmctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-ipc_shmctl.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-ipc_shmctl.Tpo -c -o libmpers_mx32_a-ipc_shmctl.o `test -f 'ipc_shmctl.c' || echo '$(srcdir)/'`ipc_shmctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-ipc_shmctl.Tpo $(DEPDIR)/libmpers_mx32_a-ipc_shmctl.Po
-#	$(AM_V_CC)source='ipc_shmctl.c' object='libmpers_mx32_a-ipc_shmctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-ipc_shmctl.o `test -f 'ipc_shmctl.c' || echo '$(srcdir)/'`ipc_shmctl.c
-
-libmpers_mx32_a-ipc_shmctl.obj: ipc_shmctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-ipc_shmctl.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-ipc_shmctl.Tpo -c -o libmpers_mx32_a-ipc_shmctl.obj `if test -f 'ipc_shmctl.c'; then $(CYGPATH_W) 'ipc_shmctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_shmctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-ipc_shmctl.Tpo $(DEPDIR)/libmpers_mx32_a-ipc_shmctl.Po
-#	$(AM_V_CC)source='ipc_shmctl.c' object='libmpers_mx32_a-ipc_shmctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-ipc_shmctl.obj `if test -f 'ipc_shmctl.c'; then $(CYGPATH_W) 'ipc_shmctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_shmctl.c'; fi`
-
-libmpers_mx32_a-loop.o: loop.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-loop.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-loop.Tpo -c -o libmpers_mx32_a-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-loop.Tpo $(DEPDIR)/libmpers_mx32_a-loop.Po
-#	$(AM_V_CC)source='loop.c' object='libmpers_mx32_a-loop.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
-
-libmpers_mx32_a-loop.obj: loop.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-loop.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-loop.Tpo -c -o libmpers_mx32_a-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-loop.Tpo $(DEPDIR)/libmpers_mx32_a-loop.Po
-#	$(AM_V_CC)source='loop.c' object='libmpers_mx32_a-loop.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
-
-libmpers_mx32_a-mtd.o: mtd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-mtd.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-mtd.Tpo -c -o libmpers_mx32_a-mtd.o `test -f 'mtd.c' || echo '$(srcdir)/'`mtd.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-mtd.Tpo $(DEPDIR)/libmpers_mx32_a-mtd.Po
-#	$(AM_V_CC)source='mtd.c' object='libmpers_mx32_a-mtd.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-mtd.o `test -f 'mtd.c' || echo '$(srcdir)/'`mtd.c
-
-libmpers_mx32_a-mtd.obj: mtd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-mtd.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-mtd.Tpo -c -o libmpers_mx32_a-mtd.obj `if test -f 'mtd.c'; then $(CYGPATH_W) 'mtd.c'; else $(CYGPATH_W) '$(srcdir)/mtd.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-mtd.Tpo $(DEPDIR)/libmpers_mx32_a-mtd.Po
-#	$(AM_V_CC)source='mtd.c' object='libmpers_mx32_a-mtd.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-mtd.obj `if test -f 'mtd.c'; then $(CYGPATH_W) 'mtd.c'; else $(CYGPATH_W) '$(srcdir)/mtd.c'; fi`
-
-libmpers_mx32_a-print_mq_attr.o: print_mq_attr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_mq_attr.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_mq_attr.Tpo -c -o libmpers_mx32_a-print_mq_attr.o `test -f 'print_mq_attr.c' || echo '$(srcdir)/'`print_mq_attr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_mq_attr.Tpo $(DEPDIR)/libmpers_mx32_a-print_mq_attr.Po
-#	$(AM_V_CC)source='print_mq_attr.c' object='libmpers_mx32_a-print_mq_attr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_mq_attr.o `test -f 'print_mq_attr.c' || echo '$(srcdir)/'`print_mq_attr.c
-
-libmpers_mx32_a-print_mq_attr.obj: print_mq_attr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_mq_attr.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_mq_attr.Tpo -c -o libmpers_mx32_a-print_mq_attr.obj `if test -f 'print_mq_attr.c'; then $(CYGPATH_W) 'print_mq_attr.c'; else $(CYGPATH_W) '$(srcdir)/print_mq_attr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_mq_attr.Tpo $(DEPDIR)/libmpers_mx32_a-print_mq_attr.Po
-#	$(AM_V_CC)source='print_mq_attr.c' object='libmpers_mx32_a-print_mq_attr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_mq_attr.obj `if test -f 'print_mq_attr.c'; then $(CYGPATH_W) 'print_mq_attr.c'; else $(CYGPATH_W) '$(srcdir)/print_mq_attr.c'; fi`
-
-libmpers_mx32_a-print_msgbuf.o: print_msgbuf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_msgbuf.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_msgbuf.Tpo -c -o libmpers_mx32_a-print_msgbuf.o `test -f 'print_msgbuf.c' || echo '$(srcdir)/'`print_msgbuf.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_msgbuf.Tpo $(DEPDIR)/libmpers_mx32_a-print_msgbuf.Po
-#	$(AM_V_CC)source='print_msgbuf.c' object='libmpers_mx32_a-print_msgbuf.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_msgbuf.o `test -f 'print_msgbuf.c' || echo '$(srcdir)/'`print_msgbuf.c
-
-libmpers_mx32_a-print_msgbuf.obj: print_msgbuf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_msgbuf.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_msgbuf.Tpo -c -o libmpers_mx32_a-print_msgbuf.obj `if test -f 'print_msgbuf.c'; then $(CYGPATH_W) 'print_msgbuf.c'; else $(CYGPATH_W) '$(srcdir)/print_msgbuf.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_msgbuf.Tpo $(DEPDIR)/libmpers_mx32_a-print_msgbuf.Po
-#	$(AM_V_CC)source='print_msgbuf.c' object='libmpers_mx32_a-print_msgbuf.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_msgbuf.obj `if test -f 'print_msgbuf.c'; then $(CYGPATH_W) 'print_msgbuf.c'; else $(CYGPATH_W) '$(srcdir)/print_msgbuf.c'; fi`
-
-libmpers_mx32_a-print_sg_req_info.o: print_sg_req_info.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_sg_req_info.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_sg_req_info.Tpo -c -o libmpers_mx32_a-print_sg_req_info.o `test -f 'print_sg_req_info.c' || echo '$(srcdir)/'`print_sg_req_info.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_sg_req_info.Tpo $(DEPDIR)/libmpers_mx32_a-print_sg_req_info.Po
-#	$(AM_V_CC)source='print_sg_req_info.c' object='libmpers_mx32_a-print_sg_req_info.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_sg_req_info.o `test -f 'print_sg_req_info.c' || echo '$(srcdir)/'`print_sg_req_info.c
-
-libmpers_mx32_a-print_sg_req_info.obj: print_sg_req_info.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_sg_req_info.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_sg_req_info.Tpo -c -o libmpers_mx32_a-print_sg_req_info.obj `if test -f 'print_sg_req_info.c'; then $(CYGPATH_W) 'print_sg_req_info.c'; else $(CYGPATH_W) '$(srcdir)/print_sg_req_info.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_sg_req_info.Tpo $(DEPDIR)/libmpers_mx32_a-print_sg_req_info.Po
-#	$(AM_V_CC)source='print_sg_req_info.c' object='libmpers_mx32_a-print_sg_req_info.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_sg_req_info.obj `if test -f 'print_sg_req_info.c'; then $(CYGPATH_W) 'print_sg_req_info.c'; else $(CYGPATH_W) '$(srcdir)/print_sg_req_info.c'; fi`
-
-libmpers_mx32_a-print_sigevent.o: print_sigevent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_sigevent.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_sigevent.Tpo -c -o libmpers_mx32_a-print_sigevent.o `test -f 'print_sigevent.c' || echo '$(srcdir)/'`print_sigevent.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_sigevent.Tpo $(DEPDIR)/libmpers_mx32_a-print_sigevent.Po
-#	$(AM_V_CC)source='print_sigevent.c' object='libmpers_mx32_a-print_sigevent.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_sigevent.o `test -f 'print_sigevent.c' || echo '$(srcdir)/'`print_sigevent.c
-
-libmpers_mx32_a-print_sigevent.obj: print_sigevent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_sigevent.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_sigevent.Tpo -c -o libmpers_mx32_a-print_sigevent.obj `if test -f 'print_sigevent.c'; then $(CYGPATH_W) 'print_sigevent.c'; else $(CYGPATH_W) '$(srcdir)/print_sigevent.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_sigevent.Tpo $(DEPDIR)/libmpers_mx32_a-print_sigevent.Po
-#	$(AM_V_CC)source='print_sigevent.c' object='libmpers_mx32_a-print_sigevent.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_sigevent.obj `if test -f 'print_sigevent.c'; then $(CYGPATH_W) 'print_sigevent.c'; else $(CYGPATH_W) '$(srcdir)/print_sigevent.c'; fi`
-
-libmpers_mx32_a-print_time.o: print_time.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_time.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_time.Tpo -c -o libmpers_mx32_a-print_time.o `test -f 'print_time.c' || echo '$(srcdir)/'`print_time.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_time.Tpo $(DEPDIR)/libmpers_mx32_a-print_time.Po
-#	$(AM_V_CC)source='print_time.c' object='libmpers_mx32_a-print_time.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_time.o `test -f 'print_time.c' || echo '$(srcdir)/'`print_time.c
-
-libmpers_mx32_a-print_time.obj: print_time.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_time.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_time.Tpo -c -o libmpers_mx32_a-print_time.obj `if test -f 'print_time.c'; then $(CYGPATH_W) 'print_time.c'; else $(CYGPATH_W) '$(srcdir)/print_time.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_time.Tpo $(DEPDIR)/libmpers_mx32_a-print_time.Po
-#	$(AM_V_CC)source='print_time.c' object='libmpers_mx32_a-print_time.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_time.obj `if test -f 'print_time.c'; then $(CYGPATH_W) 'print_time.c'; else $(CYGPATH_W) '$(srcdir)/print_time.c'; fi`
-
-libmpers_mx32_a-print_timespec.o: print_timespec.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_timespec.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_timespec.Tpo -c -o libmpers_mx32_a-print_timespec.o `test -f 'print_timespec.c' || echo '$(srcdir)/'`print_timespec.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_timespec.Tpo $(DEPDIR)/libmpers_mx32_a-print_timespec.Po
-#	$(AM_V_CC)source='print_timespec.c' object='libmpers_mx32_a-print_timespec.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_timespec.o `test -f 'print_timespec.c' || echo '$(srcdir)/'`print_timespec.c
-
-libmpers_mx32_a-print_timespec.obj: print_timespec.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_timespec.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_timespec.Tpo -c -o libmpers_mx32_a-print_timespec.obj `if test -f 'print_timespec.c'; then $(CYGPATH_W) 'print_timespec.c'; else $(CYGPATH_W) '$(srcdir)/print_timespec.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_timespec.Tpo $(DEPDIR)/libmpers_mx32_a-print_timespec.Po
-#	$(AM_V_CC)source='print_timespec.c' object='libmpers_mx32_a-print_timespec.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_timespec.obj `if test -f 'print_timespec.c'; then $(CYGPATH_W) 'print_timespec.c'; else $(CYGPATH_W) '$(srcdir)/print_timespec.c'; fi`
-
-libmpers_mx32_a-print_timeval.o: print_timeval.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_timeval.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_timeval.Tpo -c -o libmpers_mx32_a-print_timeval.o `test -f 'print_timeval.c' || echo '$(srcdir)/'`print_timeval.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_timeval.Tpo $(DEPDIR)/libmpers_mx32_a-print_timeval.Po
-#	$(AM_V_CC)source='print_timeval.c' object='libmpers_mx32_a-print_timeval.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_timeval.o `test -f 'print_timeval.c' || echo '$(srcdir)/'`print_timeval.c
-
-libmpers_mx32_a-print_timeval.obj: print_timeval.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_timeval.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_timeval.Tpo -c -o libmpers_mx32_a-print_timeval.obj `if test -f 'print_timeval.c'; then $(CYGPATH_W) 'print_timeval.c'; else $(CYGPATH_W) '$(srcdir)/print_timeval.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_timeval.Tpo $(DEPDIR)/libmpers_mx32_a-print_timeval.Po
-#	$(AM_V_CC)source='print_timeval.c' object='libmpers_mx32_a-print_timeval.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_timeval.obj `if test -f 'print_timeval.c'; then $(CYGPATH_W) 'print_timeval.c'; else $(CYGPATH_W) '$(srcdir)/print_timeval.c'; fi`
-
-libmpers_mx32_a-print_timex.o: print_timex.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_timex.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_timex.Tpo -c -o libmpers_mx32_a-print_timex.o `test -f 'print_timex.c' || echo '$(srcdir)/'`print_timex.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_timex.Tpo $(DEPDIR)/libmpers_mx32_a-print_timex.Po
-#	$(AM_V_CC)source='print_timex.c' object='libmpers_mx32_a-print_timex.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_timex.o `test -f 'print_timex.c' || echo '$(srcdir)/'`print_timex.c
-
-libmpers_mx32_a-print_timex.obj: print_timex.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_timex.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_timex.Tpo -c -o libmpers_mx32_a-print_timex.obj `if test -f 'print_timex.c'; then $(CYGPATH_W) 'print_timex.c'; else $(CYGPATH_W) '$(srcdir)/print_timex.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_timex.Tpo $(DEPDIR)/libmpers_mx32_a-print_timex.Po
-#	$(AM_V_CC)source='print_timex.c' object='libmpers_mx32_a-print_timex.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_timex.obj `if test -f 'print_timex.c'; then $(CYGPATH_W) 'print_timex.c'; else $(CYGPATH_W) '$(srcdir)/print_timex.c'; fi`
-
-libmpers_mx32_a-printrusage.o: printrusage.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-printrusage.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-printrusage.Tpo -c -o libmpers_mx32_a-printrusage.o `test -f 'printrusage.c' || echo '$(srcdir)/'`printrusage.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-printrusage.Tpo $(DEPDIR)/libmpers_mx32_a-printrusage.Po
-#	$(AM_V_CC)source='printrusage.c' object='libmpers_mx32_a-printrusage.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-printrusage.o `test -f 'printrusage.c' || echo '$(srcdir)/'`printrusage.c
-
-libmpers_mx32_a-printrusage.obj: printrusage.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-printrusage.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-printrusage.Tpo -c -o libmpers_mx32_a-printrusage.obj `if test -f 'printrusage.c'; then $(CYGPATH_W) 'printrusage.c'; else $(CYGPATH_W) '$(srcdir)/printrusage.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-printrusage.Tpo $(DEPDIR)/libmpers_mx32_a-printrusage.Po
-#	$(AM_V_CC)source='printrusage.c' object='libmpers_mx32_a-printrusage.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-printrusage.obj `if test -f 'printrusage.c'; then $(CYGPATH_W) 'printrusage.c'; else $(CYGPATH_W) '$(srcdir)/printrusage.c'; fi`
-
-libmpers_mx32_a-printsiginfo.o: printsiginfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-printsiginfo.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-printsiginfo.Tpo -c -o libmpers_mx32_a-printsiginfo.o `test -f 'printsiginfo.c' || echo '$(srcdir)/'`printsiginfo.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-printsiginfo.Tpo $(DEPDIR)/libmpers_mx32_a-printsiginfo.Po
-#	$(AM_V_CC)source='printsiginfo.c' object='libmpers_mx32_a-printsiginfo.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-printsiginfo.o `test -f 'printsiginfo.c' || echo '$(srcdir)/'`printsiginfo.c
-
-libmpers_mx32_a-printsiginfo.obj: printsiginfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-printsiginfo.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-printsiginfo.Tpo -c -o libmpers_mx32_a-printsiginfo.obj `if test -f 'printsiginfo.c'; then $(CYGPATH_W) 'printsiginfo.c'; else $(CYGPATH_W) '$(srcdir)/printsiginfo.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-printsiginfo.Tpo $(DEPDIR)/libmpers_mx32_a-printsiginfo.Po
-#	$(AM_V_CC)source='printsiginfo.c' object='libmpers_mx32_a-printsiginfo.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-printsiginfo.obj `if test -f 'printsiginfo.c'; then $(CYGPATH_W) 'printsiginfo.c'; else $(CYGPATH_W) '$(srcdir)/printsiginfo.c'; fi`
-
-libmpers_mx32_a-rt_sigreturn.o: rt_sigreturn.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-rt_sigreturn.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-rt_sigreturn.Tpo -c -o libmpers_mx32_a-rt_sigreturn.o `test -f 'rt_sigreturn.c' || echo '$(srcdir)/'`rt_sigreturn.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-rt_sigreturn.Tpo $(DEPDIR)/libmpers_mx32_a-rt_sigreturn.Po
-#	$(AM_V_CC)source='rt_sigreturn.c' object='libmpers_mx32_a-rt_sigreturn.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-rt_sigreturn.o `test -f 'rt_sigreturn.c' || echo '$(srcdir)/'`rt_sigreturn.c
-
-libmpers_mx32_a-rt_sigreturn.obj: rt_sigreturn.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-rt_sigreturn.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-rt_sigreturn.Tpo -c -o libmpers_mx32_a-rt_sigreturn.obj `if test -f 'rt_sigreturn.c'; then $(CYGPATH_W) 'rt_sigreturn.c'; else $(CYGPATH_W) '$(srcdir)/rt_sigreturn.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-rt_sigreturn.Tpo $(DEPDIR)/libmpers_mx32_a-rt_sigreturn.Po
-#	$(AM_V_CC)source='rt_sigreturn.c' object='libmpers_mx32_a-rt_sigreturn.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-rt_sigreturn.obj `if test -f 'rt_sigreturn.c'; then $(CYGPATH_W) 'rt_sigreturn.c'; else $(CYGPATH_W) '$(srcdir)/rt_sigreturn.c'; fi`
-
-libmpers_mx32_a-rtc.o: rtc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-rtc.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-rtc.Tpo -c -o libmpers_mx32_a-rtc.o `test -f 'rtc.c' || echo '$(srcdir)/'`rtc.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-rtc.Tpo $(DEPDIR)/libmpers_mx32_a-rtc.Po
-#	$(AM_V_CC)source='rtc.c' object='libmpers_mx32_a-rtc.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-rtc.o `test -f 'rtc.c' || echo '$(srcdir)/'`rtc.c
-
-libmpers_mx32_a-rtc.obj: rtc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-rtc.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-rtc.Tpo -c -o libmpers_mx32_a-rtc.obj `if test -f 'rtc.c'; then $(CYGPATH_W) 'rtc.c'; else $(CYGPATH_W) '$(srcdir)/rtc.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-rtc.Tpo $(DEPDIR)/libmpers_mx32_a-rtc.Po
-#	$(AM_V_CC)source='rtc.c' object='libmpers_mx32_a-rtc.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-rtc.obj `if test -f 'rtc.c'; then $(CYGPATH_W) 'rtc.c'; else $(CYGPATH_W) '$(srcdir)/rtc.c'; fi`
-
-libmpers_mx32_a-sg_io_v3.o: sg_io_v3.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-sg_io_v3.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-sg_io_v3.Tpo -c -o libmpers_mx32_a-sg_io_v3.o `test -f 'sg_io_v3.c' || echo '$(srcdir)/'`sg_io_v3.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-sg_io_v3.Tpo $(DEPDIR)/libmpers_mx32_a-sg_io_v3.Po
-#	$(AM_V_CC)source='sg_io_v3.c' object='libmpers_mx32_a-sg_io_v3.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-sg_io_v3.o `test -f 'sg_io_v3.c' || echo '$(srcdir)/'`sg_io_v3.c
-
-libmpers_mx32_a-sg_io_v3.obj: sg_io_v3.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-sg_io_v3.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-sg_io_v3.Tpo -c -o libmpers_mx32_a-sg_io_v3.obj `if test -f 'sg_io_v3.c'; then $(CYGPATH_W) 'sg_io_v3.c'; else $(CYGPATH_W) '$(srcdir)/sg_io_v3.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-sg_io_v3.Tpo $(DEPDIR)/libmpers_mx32_a-sg_io_v3.Po
-#	$(AM_V_CC)source='sg_io_v3.c' object='libmpers_mx32_a-sg_io_v3.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-sg_io_v3.obj `if test -f 'sg_io_v3.c'; then $(CYGPATH_W) 'sg_io_v3.c'; else $(CYGPATH_W) '$(srcdir)/sg_io_v3.c'; fi`
-
-libmpers_mx32_a-sigaltstack.o: sigaltstack.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-sigaltstack.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-sigaltstack.Tpo -c -o libmpers_mx32_a-sigaltstack.o `test -f 'sigaltstack.c' || echo '$(srcdir)/'`sigaltstack.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-sigaltstack.Tpo $(DEPDIR)/libmpers_mx32_a-sigaltstack.Po
-#	$(AM_V_CC)source='sigaltstack.c' object='libmpers_mx32_a-sigaltstack.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-sigaltstack.o `test -f 'sigaltstack.c' || echo '$(srcdir)/'`sigaltstack.c
-
-libmpers_mx32_a-sigaltstack.obj: sigaltstack.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-sigaltstack.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-sigaltstack.Tpo -c -o libmpers_mx32_a-sigaltstack.obj `if test -f 'sigaltstack.c'; then $(CYGPATH_W) 'sigaltstack.c'; else $(CYGPATH_W) '$(srcdir)/sigaltstack.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-sigaltstack.Tpo $(DEPDIR)/libmpers_mx32_a-sigaltstack.Po
-#	$(AM_V_CC)source='sigaltstack.c' object='libmpers_mx32_a-sigaltstack.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-sigaltstack.obj `if test -f 'sigaltstack.c'; then $(CYGPATH_W) 'sigaltstack.c'; else $(CYGPATH_W) '$(srcdir)/sigaltstack.c'; fi`
-
-libmpers_mx32_a-sock.o: sock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-sock.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-sock.Tpo -c -o libmpers_mx32_a-sock.o `test -f 'sock.c' || echo '$(srcdir)/'`sock.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-sock.Tpo $(DEPDIR)/libmpers_mx32_a-sock.Po
-#	$(AM_V_CC)source='sock.c' object='libmpers_mx32_a-sock.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-sock.o `test -f 'sock.c' || echo '$(srcdir)/'`sock.c
-
-libmpers_mx32_a-sock.obj: sock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-sock.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-sock.Tpo -c -o libmpers_mx32_a-sock.obj `if test -f 'sock.c'; then $(CYGPATH_W) 'sock.c'; else $(CYGPATH_W) '$(srcdir)/sock.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-sock.Tpo $(DEPDIR)/libmpers_mx32_a-sock.Po
-#	$(AM_V_CC)source='sock.c' object='libmpers_mx32_a-sock.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-sock.obj `if test -f 'sock.c'; then $(CYGPATH_W) 'sock.c'; else $(CYGPATH_W) '$(srcdir)/sock.c'; fi`
-
-libmpers_mx32_a-sysinfo.o: sysinfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-sysinfo.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-sysinfo.Tpo -c -o libmpers_mx32_a-sysinfo.o `test -f 'sysinfo.c' || echo '$(srcdir)/'`sysinfo.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-sysinfo.Tpo $(DEPDIR)/libmpers_mx32_a-sysinfo.Po
-#	$(AM_V_CC)source='sysinfo.c' object='libmpers_mx32_a-sysinfo.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-sysinfo.o `test -f 'sysinfo.c' || echo '$(srcdir)/'`sysinfo.c
-
-libmpers_mx32_a-sysinfo.obj: sysinfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-sysinfo.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-sysinfo.Tpo -c -o libmpers_mx32_a-sysinfo.obj `if test -f 'sysinfo.c'; then $(CYGPATH_W) 'sysinfo.c'; else $(CYGPATH_W) '$(srcdir)/sysinfo.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-sysinfo.Tpo $(DEPDIR)/libmpers_mx32_a-sysinfo.Po
-#	$(AM_V_CC)source='sysinfo.c' object='libmpers_mx32_a-sysinfo.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-sysinfo.obj `if test -f 'sysinfo.c'; then $(CYGPATH_W) 'sysinfo.c'; else $(CYGPATH_W) '$(srcdir)/sysinfo.c'; fi`
-
-libmpers_mx32_a-times.o: times.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-times.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-times.Tpo -c -o libmpers_mx32_a-times.o `test -f 'times.c' || echo '$(srcdir)/'`times.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-times.Tpo $(DEPDIR)/libmpers_mx32_a-times.Po
-#	$(AM_V_CC)source='times.c' object='libmpers_mx32_a-times.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-times.o `test -f 'times.c' || echo '$(srcdir)/'`times.c
-
-libmpers_mx32_a-times.obj: times.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-times.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-times.Tpo -c -o libmpers_mx32_a-times.obj `if test -f 'times.c'; then $(CYGPATH_W) 'times.c'; else $(CYGPATH_W) '$(srcdir)/times.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-times.Tpo $(DEPDIR)/libmpers_mx32_a-times.Po
-#	$(AM_V_CC)source='times.c' object='libmpers_mx32_a-times.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-times.obj `if test -f 'times.c'; then $(CYGPATH_W) 'times.c'; else $(CYGPATH_W) '$(srcdir)/times.c'; fi`
-
-libmpers_mx32_a-ustat.o: ustat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-ustat.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-ustat.Tpo -c -o libmpers_mx32_a-ustat.o `test -f 'ustat.c' || echo '$(srcdir)/'`ustat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-ustat.Tpo $(DEPDIR)/libmpers_mx32_a-ustat.Po
-#	$(AM_V_CC)source='ustat.c' object='libmpers_mx32_a-ustat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-ustat.o `test -f 'ustat.c' || echo '$(srcdir)/'`ustat.c
-
-libmpers_mx32_a-ustat.obj: ustat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-ustat.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-ustat.Tpo -c -o libmpers_mx32_a-ustat.obj `if test -f 'ustat.c'; then $(CYGPATH_W) 'ustat.c'; else $(CYGPATH_W) '$(srcdir)/ustat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-ustat.Tpo $(DEPDIR)/libmpers_mx32_a-ustat.Po
-#	$(AM_V_CC)source='ustat.c' object='libmpers_mx32_a-ustat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-ustat.obj `if test -f 'ustat.c'; then $(CYGPATH_W) 'ustat.c'; else $(CYGPATH_W) '$(srcdir)/ustat.c'; fi`
-
-libmpers_mx32_a-utime.o: utime.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-utime.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-utime.Tpo -c -o libmpers_mx32_a-utime.o `test -f 'utime.c' || echo '$(srcdir)/'`utime.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-utime.Tpo $(DEPDIR)/libmpers_mx32_a-utime.Po
-#	$(AM_V_CC)source='utime.c' object='libmpers_mx32_a-utime.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-utime.o `test -f 'utime.c' || echo '$(srcdir)/'`utime.c
-
-libmpers_mx32_a-utime.obj: utime.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-utime.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-utime.Tpo -c -o libmpers_mx32_a-utime.obj `if test -f 'utime.c'; then $(CYGPATH_W) 'utime.c'; else $(CYGPATH_W) '$(srcdir)/utime.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-utime.Tpo $(DEPDIR)/libmpers_mx32_a-utime.Po
-#	$(AM_V_CC)source='utime.c' object='libmpers_mx32_a-utime.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-utime.obj `if test -f 'utime.c'; then $(CYGPATH_W) 'utime.c'; else $(CYGPATH_W) '$(srcdir)/utime.c'; fi`
-
-libmpers_mx32_a-v4l2.o: v4l2.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-v4l2.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-v4l2.Tpo -c -o libmpers_mx32_a-v4l2.o `test -f 'v4l2.c' || echo '$(srcdir)/'`v4l2.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-v4l2.Tpo $(DEPDIR)/libmpers_mx32_a-v4l2.Po
-#	$(AM_V_CC)source='v4l2.c' object='libmpers_mx32_a-v4l2.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-v4l2.o `test -f 'v4l2.c' || echo '$(srcdir)/'`v4l2.c
-
-libmpers_mx32_a-v4l2.obj: v4l2.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-v4l2.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-v4l2.Tpo -c -o libmpers_mx32_a-v4l2.obj `if test -f 'v4l2.c'; then $(CYGPATH_W) 'v4l2.c'; else $(CYGPATH_W) '$(srcdir)/v4l2.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-v4l2.Tpo $(DEPDIR)/libmpers_mx32_a-v4l2.Po
-#	$(AM_V_CC)source='v4l2.c' object='libmpers_mx32_a-v4l2.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-v4l2.obj `if test -f 'v4l2.c'; then $(CYGPATH_W) 'v4l2.c'; else $(CYGPATH_W) '$(srcdir)/v4l2.c'; fi`
-
-libstrace_a-fstatfs.o: fstatfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-fstatfs.o -MD -MP -MF $(DEPDIR)/libstrace_a-fstatfs.Tpo -c -o libstrace_a-fstatfs.o `test -f 'fstatfs.c' || echo '$(srcdir)/'`fstatfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-fstatfs.Tpo $(DEPDIR)/libstrace_a-fstatfs.Po
-#	$(AM_V_CC)source='fstatfs.c' object='libstrace_a-fstatfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-fstatfs.o `test -f 'fstatfs.c' || echo '$(srcdir)/'`fstatfs.c
-
-libstrace_a-fstatfs.obj: fstatfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-fstatfs.obj -MD -MP -MF $(DEPDIR)/libstrace_a-fstatfs.Tpo -c -o libstrace_a-fstatfs.obj `if test -f 'fstatfs.c'; then $(CYGPATH_W) 'fstatfs.c'; else $(CYGPATH_W) '$(srcdir)/fstatfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-fstatfs.Tpo $(DEPDIR)/libstrace_a-fstatfs.Po
-#	$(AM_V_CC)source='fstatfs.c' object='libstrace_a-fstatfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-fstatfs.obj `if test -f 'fstatfs.c'; then $(CYGPATH_W) 'fstatfs.c'; else $(CYGPATH_W) '$(srcdir)/fstatfs.c'; fi`
-
-libstrace_a-fstatfs64.o: fstatfs64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-fstatfs64.o -MD -MP -MF $(DEPDIR)/libstrace_a-fstatfs64.Tpo -c -o libstrace_a-fstatfs64.o `test -f 'fstatfs64.c' || echo '$(srcdir)/'`fstatfs64.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-fstatfs64.Tpo $(DEPDIR)/libstrace_a-fstatfs64.Po
-#	$(AM_V_CC)source='fstatfs64.c' object='libstrace_a-fstatfs64.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-fstatfs64.o `test -f 'fstatfs64.c' || echo '$(srcdir)/'`fstatfs64.c
-
-libstrace_a-fstatfs64.obj: fstatfs64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-fstatfs64.obj -MD -MP -MF $(DEPDIR)/libstrace_a-fstatfs64.Tpo -c -o libstrace_a-fstatfs64.obj `if test -f 'fstatfs64.c'; then $(CYGPATH_W) 'fstatfs64.c'; else $(CYGPATH_W) '$(srcdir)/fstatfs64.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-fstatfs64.Tpo $(DEPDIR)/libstrace_a-fstatfs64.Po
-#	$(AM_V_CC)source='fstatfs64.c' object='libstrace_a-fstatfs64.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-fstatfs64.obj `if test -f 'fstatfs64.c'; then $(CYGPATH_W) 'fstatfs64.c'; else $(CYGPATH_W) '$(srcdir)/fstatfs64.c'; fi`
-
-libstrace_a-ipc.o: ipc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-ipc.o -MD -MP -MF $(DEPDIR)/libstrace_a-ipc.Tpo -c -o libstrace_a-ipc.o `test -f 'ipc.c' || echo '$(srcdir)/'`ipc.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-ipc.Tpo $(DEPDIR)/libstrace_a-ipc.Po
-#	$(AM_V_CC)source='ipc.c' object='libstrace_a-ipc.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-ipc.o `test -f 'ipc.c' || echo '$(srcdir)/'`ipc.c
-
-libstrace_a-ipc.obj: ipc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-ipc.obj -MD -MP -MF $(DEPDIR)/libstrace_a-ipc.Tpo -c -o libstrace_a-ipc.obj `if test -f 'ipc.c'; then $(CYGPATH_W) 'ipc.c'; else $(CYGPATH_W) '$(srcdir)/ipc.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-ipc.Tpo $(DEPDIR)/libstrace_a-ipc.Po
-#	$(AM_V_CC)source='ipc.c' object='libstrace_a-ipc.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-ipc.obj `if test -f 'ipc.c'; then $(CYGPATH_W) 'ipc.c'; else $(CYGPATH_W) '$(srcdir)/ipc.c'; fi`
-
-libstrace_a-sigreturn.o: sigreturn.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-sigreturn.o -MD -MP -MF $(DEPDIR)/libstrace_a-sigreturn.Tpo -c -o libstrace_a-sigreturn.o `test -f 'sigreturn.c' || echo '$(srcdir)/'`sigreturn.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-sigreturn.Tpo $(DEPDIR)/libstrace_a-sigreturn.Po
-#	$(AM_V_CC)source='sigreturn.c' object='libstrace_a-sigreturn.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-sigreturn.o `test -f 'sigreturn.c' || echo '$(srcdir)/'`sigreturn.c
-
-libstrace_a-sigreturn.obj: sigreturn.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-sigreturn.obj -MD -MP -MF $(DEPDIR)/libstrace_a-sigreturn.Tpo -c -o libstrace_a-sigreturn.obj `if test -f 'sigreturn.c'; then $(CYGPATH_W) 'sigreturn.c'; else $(CYGPATH_W) '$(srcdir)/sigreturn.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-sigreturn.Tpo $(DEPDIR)/libstrace_a-sigreturn.Po
-#	$(AM_V_CC)source='sigreturn.c' object='libstrace_a-sigreturn.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-sigreturn.obj `if test -f 'sigreturn.c'; then $(CYGPATH_W) 'sigreturn.c'; else $(CYGPATH_W) '$(srcdir)/sigreturn.c'; fi`
-
-libstrace_a-socketcall.o: socketcall.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-socketcall.o -MD -MP -MF $(DEPDIR)/libstrace_a-socketcall.Tpo -c -o libstrace_a-socketcall.o `test -f 'socketcall.c' || echo '$(srcdir)/'`socketcall.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-socketcall.Tpo $(DEPDIR)/libstrace_a-socketcall.Po
-#	$(AM_V_CC)source='socketcall.c' object='libstrace_a-socketcall.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-socketcall.o `test -f 'socketcall.c' || echo '$(srcdir)/'`socketcall.c
-
-libstrace_a-socketcall.obj: socketcall.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-socketcall.obj -MD -MP -MF $(DEPDIR)/libstrace_a-socketcall.Tpo -c -o libstrace_a-socketcall.obj `if test -f 'socketcall.c'; then $(CYGPATH_W) 'socketcall.c'; else $(CYGPATH_W) '$(srcdir)/socketcall.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-socketcall.Tpo $(DEPDIR)/libstrace_a-socketcall.Po
-#	$(AM_V_CC)source='socketcall.c' object='libstrace_a-socketcall.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-socketcall.obj `if test -f 'socketcall.c'; then $(CYGPATH_W) 'socketcall.c'; else $(CYGPATH_W) '$(srcdir)/socketcall.c'; fi`
-
-libstrace_a-statfs.o: statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-statfs.o -MD -MP -MF $(DEPDIR)/libstrace_a-statfs.Tpo -c -o libstrace_a-statfs.o `test -f 'statfs.c' || echo '$(srcdir)/'`statfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-statfs.Tpo $(DEPDIR)/libstrace_a-statfs.Po
-#	$(AM_V_CC)source='statfs.c' object='libstrace_a-statfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-statfs.o `test -f 'statfs.c' || echo '$(srcdir)/'`statfs.c
-
-libstrace_a-statfs.obj: statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-statfs.obj -MD -MP -MF $(DEPDIR)/libstrace_a-statfs.Tpo -c -o libstrace_a-statfs.obj `if test -f 'statfs.c'; then $(CYGPATH_W) 'statfs.c'; else $(CYGPATH_W) '$(srcdir)/statfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-statfs.Tpo $(DEPDIR)/libstrace_a-statfs.Po
-#	$(AM_V_CC)source='statfs.c' object='libstrace_a-statfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-statfs.obj `if test -f 'statfs.c'; then $(CYGPATH_W) 'statfs.c'; else $(CYGPATH_W) '$(srcdir)/statfs.c'; fi`
-
-libstrace_a-statfs64.o: statfs64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-statfs64.o -MD -MP -MF $(DEPDIR)/libstrace_a-statfs64.Tpo -c -o libstrace_a-statfs64.o `test -f 'statfs64.c' || echo '$(srcdir)/'`statfs64.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-statfs64.Tpo $(DEPDIR)/libstrace_a-statfs64.Po
-#	$(AM_V_CC)source='statfs64.c' object='libstrace_a-statfs64.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-statfs64.o `test -f 'statfs64.c' || echo '$(srcdir)/'`statfs64.c
-
-libstrace_a-statfs64.obj: statfs64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-statfs64.obj -MD -MP -MF $(DEPDIR)/libstrace_a-statfs64.Tpo -c -o libstrace_a-statfs64.obj `if test -f 'statfs64.c'; then $(CYGPATH_W) 'statfs64.c'; else $(CYGPATH_W) '$(srcdir)/statfs64.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-statfs64.Tpo $(DEPDIR)/libstrace_a-statfs64.Po
-#	$(AM_V_CC)source='statfs64.c' object='libstrace_a-statfs64.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-statfs64.obj `if test -f 'statfs64.c'; then $(CYGPATH_W) 'statfs64.c'; else $(CYGPATH_W) '$(srcdir)/statfs64.c'; fi`
-
-libstrace_a-sync_file_range.o: sync_file_range.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-sync_file_range.o -MD -MP -MF $(DEPDIR)/libstrace_a-sync_file_range.Tpo -c -o libstrace_a-sync_file_range.o `test -f 'sync_file_range.c' || echo '$(srcdir)/'`sync_file_range.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-sync_file_range.Tpo $(DEPDIR)/libstrace_a-sync_file_range.Po
-#	$(AM_V_CC)source='sync_file_range.c' object='libstrace_a-sync_file_range.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-sync_file_range.o `test -f 'sync_file_range.c' || echo '$(srcdir)/'`sync_file_range.c
-
-libstrace_a-sync_file_range.obj: sync_file_range.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-sync_file_range.obj -MD -MP -MF $(DEPDIR)/libstrace_a-sync_file_range.Tpo -c -o libstrace_a-sync_file_range.obj `if test -f 'sync_file_range.c'; then $(CYGPATH_W) 'sync_file_range.c'; else $(CYGPATH_W) '$(srcdir)/sync_file_range.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-sync_file_range.Tpo $(DEPDIR)/libstrace_a-sync_file_range.Po
-#	$(AM_V_CC)source='sync_file_range.c' object='libstrace_a-sync_file_range.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-sync_file_range.obj `if test -f 'sync_file_range.c'; then $(CYGPATH_W) 'sync_file_range.c'; else $(CYGPATH_W) '$(srcdir)/sync_file_range.c'; fi`
-
-libstrace_a-sync_file_range2.o: sync_file_range2.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-sync_file_range2.o -MD -MP -MF $(DEPDIR)/libstrace_a-sync_file_range2.Tpo -c -o libstrace_a-sync_file_range2.o `test -f 'sync_file_range2.c' || echo '$(srcdir)/'`sync_file_range2.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-sync_file_range2.Tpo $(DEPDIR)/libstrace_a-sync_file_range2.Po
-#	$(AM_V_CC)source='sync_file_range2.c' object='libstrace_a-sync_file_range2.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-sync_file_range2.o `test -f 'sync_file_range2.c' || echo '$(srcdir)/'`sync_file_range2.c
-
-libstrace_a-sync_file_range2.obj: sync_file_range2.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-sync_file_range2.obj -MD -MP -MF $(DEPDIR)/libstrace_a-sync_file_range2.Tpo -c -o libstrace_a-sync_file_range2.obj `if test -f 'sync_file_range2.c'; then $(CYGPATH_W) 'sync_file_range2.c'; else $(CYGPATH_W) '$(srcdir)/sync_file_range2.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-sync_file_range2.Tpo $(DEPDIR)/libstrace_a-sync_file_range2.Po
-#	$(AM_V_CC)source='sync_file_range2.c' object='libstrace_a-sync_file_range2.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-sync_file_range2.obj `if test -f 'sync_file_range2.c'; then $(CYGPATH_W) 'sync_file_range2.c'; else $(CYGPATH_W) '$(srcdir)/sync_file_range2.c'; fi`
-
-libstrace_a-upeek.o: upeek.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-upeek.o -MD -MP -MF $(DEPDIR)/libstrace_a-upeek.Tpo -c -o libstrace_a-upeek.o `test -f 'upeek.c' || echo '$(srcdir)/'`upeek.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-upeek.Tpo $(DEPDIR)/libstrace_a-upeek.Po
-#	$(AM_V_CC)source='upeek.c' object='libstrace_a-upeek.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-upeek.o `test -f 'upeek.c' || echo '$(srcdir)/'`upeek.c
-
-libstrace_a-upeek.obj: upeek.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-upeek.obj -MD -MP -MF $(DEPDIR)/libstrace_a-upeek.Tpo -c -o libstrace_a-upeek.obj `if test -f 'upeek.c'; then $(CYGPATH_W) 'upeek.c'; else $(CYGPATH_W) '$(srcdir)/upeek.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-upeek.Tpo $(DEPDIR)/libstrace_a-upeek.Po
-#	$(AM_V_CC)source='upeek.c' object='libstrace_a-upeek.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-upeek.obj `if test -f 'upeek.c'; then $(CYGPATH_W) 'upeek.c'; else $(CYGPATH_W) '$(srcdir)/upeek.c'; fi`
-
-libstrace_a-upoke.o: upoke.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-upoke.o -MD -MP -MF $(DEPDIR)/libstrace_a-upoke.Tpo -c -o libstrace_a-upoke.o `test -f 'upoke.c' || echo '$(srcdir)/'`upoke.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-upoke.Tpo $(DEPDIR)/libstrace_a-upoke.Po
-#	$(AM_V_CC)source='upoke.c' object='libstrace_a-upoke.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-upoke.o `test -f 'upoke.c' || echo '$(srcdir)/'`upoke.c
-
-libstrace_a-upoke.obj: upoke.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-upoke.obj -MD -MP -MF $(DEPDIR)/libstrace_a-upoke.Tpo -c -o libstrace_a-upoke.obj `if test -f 'upoke.c'; then $(CYGPATH_W) 'upoke.c'; else $(CYGPATH_W) '$(srcdir)/upoke.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-upoke.Tpo $(DEPDIR)/libstrace_a-upoke.Po
-#	$(AM_V_CC)source='upoke.c' object='libstrace_a-upoke.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-upoke.obj `if test -f 'upoke.c'; then $(CYGPATH_W) 'upoke.c'; else $(CYGPATH_W) '$(srcdir)/upoke.c'; fi`
-
-strace-access.o: access.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-access.o -MD -MP -MF $(DEPDIR)/strace-access.Tpo -c -o strace-access.o `test -f 'access.c' || echo '$(srcdir)/'`access.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-access.Tpo $(DEPDIR)/strace-access.Po
-#	$(AM_V_CC)source='access.c' object='strace-access.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-access.o `test -f 'access.c' || echo '$(srcdir)/'`access.c
-
-strace-access.obj: access.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-access.obj -MD -MP -MF $(DEPDIR)/strace-access.Tpo -c -o strace-access.obj `if test -f 'access.c'; then $(CYGPATH_W) 'access.c'; else $(CYGPATH_W) '$(srcdir)/access.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-access.Tpo $(DEPDIR)/strace-access.Po
-#	$(AM_V_CC)source='access.c' object='strace-access.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-access.obj `if test -f 'access.c'; then $(CYGPATH_W) 'access.c'; else $(CYGPATH_W) '$(srcdir)/access.c'; fi`
-
-strace-affinity.o: affinity.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-affinity.o -MD -MP -MF $(DEPDIR)/strace-affinity.Tpo -c -o strace-affinity.o `test -f 'affinity.c' || echo '$(srcdir)/'`affinity.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-affinity.Tpo $(DEPDIR)/strace-affinity.Po
-#	$(AM_V_CC)source='affinity.c' object='strace-affinity.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-affinity.o `test -f 'affinity.c' || echo '$(srcdir)/'`affinity.c
-
-strace-affinity.obj: affinity.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-affinity.obj -MD -MP -MF $(DEPDIR)/strace-affinity.Tpo -c -o strace-affinity.obj `if test -f 'affinity.c'; then $(CYGPATH_W) 'affinity.c'; else $(CYGPATH_W) '$(srcdir)/affinity.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-affinity.Tpo $(DEPDIR)/strace-affinity.Po
-#	$(AM_V_CC)source='affinity.c' object='strace-affinity.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-affinity.obj `if test -f 'affinity.c'; then $(CYGPATH_W) 'affinity.c'; else $(CYGPATH_W) '$(srcdir)/affinity.c'; fi`
-
-strace-aio.o: aio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-aio.o -MD -MP -MF $(DEPDIR)/strace-aio.Tpo -c -o strace-aio.o `test -f 'aio.c' || echo '$(srcdir)/'`aio.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-aio.Tpo $(DEPDIR)/strace-aio.Po
-#	$(AM_V_CC)source='aio.c' object='strace-aio.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-aio.o `test -f 'aio.c' || echo '$(srcdir)/'`aio.c
-
-strace-aio.obj: aio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-aio.obj -MD -MP -MF $(DEPDIR)/strace-aio.Tpo -c -o strace-aio.obj `if test -f 'aio.c'; then $(CYGPATH_W) 'aio.c'; else $(CYGPATH_W) '$(srcdir)/aio.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-aio.Tpo $(DEPDIR)/strace-aio.Po
-#	$(AM_V_CC)source='aio.c' object='strace-aio.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-aio.obj `if test -f 'aio.c'; then $(CYGPATH_W) 'aio.c'; else $(CYGPATH_W) '$(srcdir)/aio.c'; fi`
-
-strace-alpha.o: alpha.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-alpha.o -MD -MP -MF $(DEPDIR)/strace-alpha.Tpo -c -o strace-alpha.o `test -f 'alpha.c' || echo '$(srcdir)/'`alpha.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-alpha.Tpo $(DEPDIR)/strace-alpha.Po
-#	$(AM_V_CC)source='alpha.c' object='strace-alpha.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-alpha.o `test -f 'alpha.c' || echo '$(srcdir)/'`alpha.c
-
-strace-alpha.obj: alpha.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-alpha.obj -MD -MP -MF $(DEPDIR)/strace-alpha.Tpo -c -o strace-alpha.obj `if test -f 'alpha.c'; then $(CYGPATH_W) 'alpha.c'; else $(CYGPATH_W) '$(srcdir)/alpha.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-alpha.Tpo $(DEPDIR)/strace-alpha.Po
-#	$(AM_V_CC)source='alpha.c' object='strace-alpha.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-alpha.obj `if test -f 'alpha.c'; then $(CYGPATH_W) 'alpha.c'; else $(CYGPATH_W) '$(srcdir)/alpha.c'; fi`
-
-strace-bjm.o: bjm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bjm.o -MD -MP -MF $(DEPDIR)/strace-bjm.Tpo -c -o strace-bjm.o `test -f 'bjm.c' || echo '$(srcdir)/'`bjm.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bjm.Tpo $(DEPDIR)/strace-bjm.Po
-#	$(AM_V_CC)source='bjm.c' object='strace-bjm.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bjm.o `test -f 'bjm.c' || echo '$(srcdir)/'`bjm.c
-
-strace-bjm.obj: bjm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bjm.obj -MD -MP -MF $(DEPDIR)/strace-bjm.Tpo -c -o strace-bjm.obj `if test -f 'bjm.c'; then $(CYGPATH_W) 'bjm.c'; else $(CYGPATH_W) '$(srcdir)/bjm.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bjm.Tpo $(DEPDIR)/strace-bjm.Po
-#	$(AM_V_CC)source='bjm.c' object='strace-bjm.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bjm.obj `if test -f 'bjm.c'; then $(CYGPATH_W) 'bjm.c'; else $(CYGPATH_W) '$(srcdir)/bjm.c'; fi`
-
-strace-block.o: block.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-block.o -MD -MP -MF $(DEPDIR)/strace-block.Tpo -c -o strace-block.o `test -f 'block.c' || echo '$(srcdir)/'`block.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-block.Tpo $(DEPDIR)/strace-block.Po
-#	$(AM_V_CC)source='block.c' object='strace-block.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-block.o `test -f 'block.c' || echo '$(srcdir)/'`block.c
-
-strace-block.obj: block.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-block.obj -MD -MP -MF $(DEPDIR)/strace-block.Tpo -c -o strace-block.obj `if test -f 'block.c'; then $(CYGPATH_W) 'block.c'; else $(CYGPATH_W) '$(srcdir)/block.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-block.Tpo $(DEPDIR)/strace-block.Po
-#	$(AM_V_CC)source='block.c' object='strace-block.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-block.obj `if test -f 'block.c'; then $(CYGPATH_W) 'block.c'; else $(CYGPATH_W) '$(srcdir)/block.c'; fi`
-
-strace-bpf.o: bpf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bpf.o -MD -MP -MF $(DEPDIR)/strace-bpf.Tpo -c -o strace-bpf.o `test -f 'bpf.c' || echo '$(srcdir)/'`bpf.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bpf.Tpo $(DEPDIR)/strace-bpf.Po
-#	$(AM_V_CC)source='bpf.c' object='strace-bpf.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bpf.o `test -f 'bpf.c' || echo '$(srcdir)/'`bpf.c
-
-strace-bpf.obj: bpf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bpf.obj -MD -MP -MF $(DEPDIR)/strace-bpf.Tpo -c -o strace-bpf.obj `if test -f 'bpf.c'; then $(CYGPATH_W) 'bpf.c'; else $(CYGPATH_W) '$(srcdir)/bpf.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bpf.Tpo $(DEPDIR)/strace-bpf.Po
-#	$(AM_V_CC)source='bpf.c' object='strace-bpf.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bpf.obj `if test -f 'bpf.c'; then $(CYGPATH_W) 'bpf.c'; else $(CYGPATH_W) '$(srcdir)/bpf.c'; fi`
-
-strace-btrfs.o: btrfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-btrfs.o -MD -MP -MF $(DEPDIR)/strace-btrfs.Tpo -c -o strace-btrfs.o `test -f 'btrfs.c' || echo '$(srcdir)/'`btrfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-btrfs.Tpo $(DEPDIR)/strace-btrfs.Po
-#	$(AM_V_CC)source='btrfs.c' object='strace-btrfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-btrfs.o `test -f 'btrfs.c' || echo '$(srcdir)/'`btrfs.c
-
-strace-btrfs.obj: btrfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-btrfs.obj -MD -MP -MF $(DEPDIR)/strace-btrfs.Tpo -c -o strace-btrfs.obj `if test -f 'btrfs.c'; then $(CYGPATH_W) 'btrfs.c'; else $(CYGPATH_W) '$(srcdir)/btrfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-btrfs.Tpo $(DEPDIR)/strace-btrfs.Po
-#	$(AM_V_CC)source='btrfs.c' object='strace-btrfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-btrfs.obj `if test -f 'btrfs.c'; then $(CYGPATH_W) 'btrfs.c'; else $(CYGPATH_W) '$(srcdir)/btrfs.c'; fi`
-
-strace-cacheflush.o: cacheflush.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-cacheflush.o -MD -MP -MF $(DEPDIR)/strace-cacheflush.Tpo -c -o strace-cacheflush.o `test -f 'cacheflush.c' || echo '$(srcdir)/'`cacheflush.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-cacheflush.Tpo $(DEPDIR)/strace-cacheflush.Po
-#	$(AM_V_CC)source='cacheflush.c' object='strace-cacheflush.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-cacheflush.o `test -f 'cacheflush.c' || echo '$(srcdir)/'`cacheflush.c
-
-strace-cacheflush.obj: cacheflush.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-cacheflush.obj -MD -MP -MF $(DEPDIR)/strace-cacheflush.Tpo -c -o strace-cacheflush.obj `if test -f 'cacheflush.c'; then $(CYGPATH_W) 'cacheflush.c'; else $(CYGPATH_W) '$(srcdir)/cacheflush.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-cacheflush.Tpo $(DEPDIR)/strace-cacheflush.Po
-#	$(AM_V_CC)source='cacheflush.c' object='strace-cacheflush.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-cacheflush.obj `if test -f 'cacheflush.c'; then $(CYGPATH_W) 'cacheflush.c'; else $(CYGPATH_W) '$(srcdir)/cacheflush.c'; fi`
-
-strace-capability.o: capability.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-capability.o -MD -MP -MF $(DEPDIR)/strace-capability.Tpo -c -o strace-capability.o `test -f 'capability.c' || echo '$(srcdir)/'`capability.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-capability.Tpo $(DEPDIR)/strace-capability.Po
-#	$(AM_V_CC)source='capability.c' object='strace-capability.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-capability.o `test -f 'capability.c' || echo '$(srcdir)/'`capability.c
-
-strace-capability.obj: capability.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-capability.obj -MD -MP -MF $(DEPDIR)/strace-capability.Tpo -c -o strace-capability.obj `if test -f 'capability.c'; then $(CYGPATH_W) 'capability.c'; else $(CYGPATH_W) '$(srcdir)/capability.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-capability.Tpo $(DEPDIR)/strace-capability.Po
-#	$(AM_V_CC)source='capability.c' object='strace-capability.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-capability.obj `if test -f 'capability.c'; then $(CYGPATH_W) 'capability.c'; else $(CYGPATH_W) '$(srcdir)/capability.c'; fi`
-
-strace-chdir.o: chdir.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-chdir.o -MD -MP -MF $(DEPDIR)/strace-chdir.Tpo -c -o strace-chdir.o `test -f 'chdir.c' || echo '$(srcdir)/'`chdir.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-chdir.Tpo $(DEPDIR)/strace-chdir.Po
-#	$(AM_V_CC)source='chdir.c' object='strace-chdir.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-chdir.o `test -f 'chdir.c' || echo '$(srcdir)/'`chdir.c
-
-strace-chdir.obj: chdir.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-chdir.obj -MD -MP -MF $(DEPDIR)/strace-chdir.Tpo -c -o strace-chdir.obj `if test -f 'chdir.c'; then $(CYGPATH_W) 'chdir.c'; else $(CYGPATH_W) '$(srcdir)/chdir.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-chdir.Tpo $(DEPDIR)/strace-chdir.Po
-#	$(AM_V_CC)source='chdir.c' object='strace-chdir.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-chdir.obj `if test -f 'chdir.c'; then $(CYGPATH_W) 'chdir.c'; else $(CYGPATH_W) '$(srcdir)/chdir.c'; fi`
-
-strace-chmod.o: chmod.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-chmod.o -MD -MP -MF $(DEPDIR)/strace-chmod.Tpo -c -o strace-chmod.o `test -f 'chmod.c' || echo '$(srcdir)/'`chmod.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-chmod.Tpo $(DEPDIR)/strace-chmod.Po
-#	$(AM_V_CC)source='chmod.c' object='strace-chmod.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-chmod.o `test -f 'chmod.c' || echo '$(srcdir)/'`chmod.c
-
-strace-chmod.obj: chmod.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-chmod.obj -MD -MP -MF $(DEPDIR)/strace-chmod.Tpo -c -o strace-chmod.obj `if test -f 'chmod.c'; then $(CYGPATH_W) 'chmod.c'; else $(CYGPATH_W) '$(srcdir)/chmod.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-chmod.Tpo $(DEPDIR)/strace-chmod.Po
-#	$(AM_V_CC)source='chmod.c' object='strace-chmod.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-chmod.obj `if test -f 'chmod.c'; then $(CYGPATH_W) 'chmod.c'; else $(CYGPATH_W) '$(srcdir)/chmod.c'; fi`
-
-strace-clone.o: clone.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-clone.o -MD -MP -MF $(DEPDIR)/strace-clone.Tpo -c -o strace-clone.o `test -f 'clone.c' || echo '$(srcdir)/'`clone.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-clone.Tpo $(DEPDIR)/strace-clone.Po
-#	$(AM_V_CC)source='clone.c' object='strace-clone.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-clone.o `test -f 'clone.c' || echo '$(srcdir)/'`clone.c
-
-strace-clone.obj: clone.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-clone.obj -MD -MP -MF $(DEPDIR)/strace-clone.Tpo -c -o strace-clone.obj `if test -f 'clone.c'; then $(CYGPATH_W) 'clone.c'; else $(CYGPATH_W) '$(srcdir)/clone.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-clone.Tpo $(DEPDIR)/strace-clone.Po
-#	$(AM_V_CC)source='clone.c' object='strace-clone.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-clone.obj `if test -f 'clone.c'; then $(CYGPATH_W) 'clone.c'; else $(CYGPATH_W) '$(srcdir)/clone.c'; fi`
-
-strace-copy_file_range.o: copy_file_range.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-copy_file_range.o -MD -MP -MF $(DEPDIR)/strace-copy_file_range.Tpo -c -o strace-copy_file_range.o `test -f 'copy_file_range.c' || echo '$(srcdir)/'`copy_file_range.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-copy_file_range.Tpo $(DEPDIR)/strace-copy_file_range.Po
-#	$(AM_V_CC)source='copy_file_range.c' object='strace-copy_file_range.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-copy_file_range.o `test -f 'copy_file_range.c' || echo '$(srcdir)/'`copy_file_range.c
-
-strace-copy_file_range.obj: copy_file_range.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-copy_file_range.obj -MD -MP -MF $(DEPDIR)/strace-copy_file_range.Tpo -c -o strace-copy_file_range.obj `if test -f 'copy_file_range.c'; then $(CYGPATH_W) 'copy_file_range.c'; else $(CYGPATH_W) '$(srcdir)/copy_file_range.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-copy_file_range.Tpo $(DEPDIR)/strace-copy_file_range.Po
-#	$(AM_V_CC)source='copy_file_range.c' object='strace-copy_file_range.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-copy_file_range.obj `if test -f 'copy_file_range.c'; then $(CYGPATH_W) 'copy_file_range.c'; else $(CYGPATH_W) '$(srcdir)/copy_file_range.c'; fi`
-
-strace-count.o: count.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-count.o -MD -MP -MF $(DEPDIR)/strace-count.Tpo -c -o strace-count.o `test -f 'count.c' || echo '$(srcdir)/'`count.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-count.Tpo $(DEPDIR)/strace-count.Po
-#	$(AM_V_CC)source='count.c' object='strace-count.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-count.o `test -f 'count.c' || echo '$(srcdir)/'`count.c
-
-strace-count.obj: count.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-count.obj -MD -MP -MF $(DEPDIR)/strace-count.Tpo -c -o strace-count.obj `if test -f 'count.c'; then $(CYGPATH_W) 'count.c'; else $(CYGPATH_W) '$(srcdir)/count.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-count.Tpo $(DEPDIR)/strace-count.Po
-#	$(AM_V_CC)source='count.c' object='strace-count.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-count.obj `if test -f 'count.c'; then $(CYGPATH_W) 'count.c'; else $(CYGPATH_W) '$(srcdir)/count.c'; fi`
-
-strace-desc.o: desc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-desc.o -MD -MP -MF $(DEPDIR)/strace-desc.Tpo -c -o strace-desc.o `test -f 'desc.c' || echo '$(srcdir)/'`desc.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-desc.Tpo $(DEPDIR)/strace-desc.Po
-#	$(AM_V_CC)source='desc.c' object='strace-desc.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-desc.o `test -f 'desc.c' || echo '$(srcdir)/'`desc.c
-
-strace-desc.obj: desc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-desc.obj -MD -MP -MF $(DEPDIR)/strace-desc.Tpo -c -o strace-desc.obj `if test -f 'desc.c'; then $(CYGPATH_W) 'desc.c'; else $(CYGPATH_W) '$(srcdir)/desc.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-desc.Tpo $(DEPDIR)/strace-desc.Po
-#	$(AM_V_CC)source='desc.c' object='strace-desc.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-desc.obj `if test -f 'desc.c'; then $(CYGPATH_W) 'desc.c'; else $(CYGPATH_W) '$(srcdir)/desc.c'; fi`
-
-strace-dirent.o: dirent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-dirent.o -MD -MP -MF $(DEPDIR)/strace-dirent.Tpo -c -o strace-dirent.o `test -f 'dirent.c' || echo '$(srcdir)/'`dirent.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-dirent.Tpo $(DEPDIR)/strace-dirent.Po
-#	$(AM_V_CC)source='dirent.c' object='strace-dirent.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-dirent.o `test -f 'dirent.c' || echo '$(srcdir)/'`dirent.c
-
-strace-dirent.obj: dirent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-dirent.obj -MD -MP -MF $(DEPDIR)/strace-dirent.Tpo -c -o strace-dirent.obj `if test -f 'dirent.c'; then $(CYGPATH_W) 'dirent.c'; else $(CYGPATH_W) '$(srcdir)/dirent.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-dirent.Tpo $(DEPDIR)/strace-dirent.Po
-#	$(AM_V_CC)source='dirent.c' object='strace-dirent.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-dirent.obj `if test -f 'dirent.c'; then $(CYGPATH_W) 'dirent.c'; else $(CYGPATH_W) '$(srcdir)/dirent.c'; fi`
-
-strace-dirent64.o: dirent64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-dirent64.o -MD -MP -MF $(DEPDIR)/strace-dirent64.Tpo -c -o strace-dirent64.o `test -f 'dirent64.c' || echo '$(srcdir)/'`dirent64.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-dirent64.Tpo $(DEPDIR)/strace-dirent64.Po
-#	$(AM_V_CC)source='dirent64.c' object='strace-dirent64.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-dirent64.o `test -f 'dirent64.c' || echo '$(srcdir)/'`dirent64.c
-
-strace-dirent64.obj: dirent64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-dirent64.obj -MD -MP -MF $(DEPDIR)/strace-dirent64.Tpo -c -o strace-dirent64.obj `if test -f 'dirent64.c'; then $(CYGPATH_W) 'dirent64.c'; else $(CYGPATH_W) '$(srcdir)/dirent64.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-dirent64.Tpo $(DEPDIR)/strace-dirent64.Po
-#	$(AM_V_CC)source='dirent64.c' object='strace-dirent64.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-dirent64.obj `if test -f 'dirent64.c'; then $(CYGPATH_W) 'dirent64.c'; else $(CYGPATH_W) '$(srcdir)/dirent64.c'; fi`
-
-strace-dm.o: dm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-dm.o -MD -MP -MF $(DEPDIR)/strace-dm.Tpo -c -o strace-dm.o `test -f 'dm.c' || echo '$(srcdir)/'`dm.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-dm.Tpo $(DEPDIR)/strace-dm.Po
-#	$(AM_V_CC)source='dm.c' object='strace-dm.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-dm.o `test -f 'dm.c' || echo '$(srcdir)/'`dm.c
-
-strace-dm.obj: dm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-dm.obj -MD -MP -MF $(DEPDIR)/strace-dm.Tpo -c -o strace-dm.obj `if test -f 'dm.c'; then $(CYGPATH_W) 'dm.c'; else $(CYGPATH_W) '$(srcdir)/dm.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-dm.Tpo $(DEPDIR)/strace-dm.Po
-#	$(AM_V_CC)source='dm.c' object='strace-dm.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-dm.obj `if test -f 'dm.c'; then $(CYGPATH_W) 'dm.c'; else $(CYGPATH_W) '$(srcdir)/dm.c'; fi`
-
-strace-epoll.o: epoll.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-epoll.o -MD -MP -MF $(DEPDIR)/strace-epoll.Tpo -c -o strace-epoll.o `test -f 'epoll.c' || echo '$(srcdir)/'`epoll.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-epoll.Tpo $(DEPDIR)/strace-epoll.Po
-#	$(AM_V_CC)source='epoll.c' object='strace-epoll.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-epoll.o `test -f 'epoll.c' || echo '$(srcdir)/'`epoll.c
-
-strace-epoll.obj: epoll.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-epoll.obj -MD -MP -MF $(DEPDIR)/strace-epoll.Tpo -c -o strace-epoll.obj `if test -f 'epoll.c'; then $(CYGPATH_W) 'epoll.c'; else $(CYGPATH_W) '$(srcdir)/epoll.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-epoll.Tpo $(DEPDIR)/strace-epoll.Po
-#	$(AM_V_CC)source='epoll.c' object='strace-epoll.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-epoll.obj `if test -f 'epoll.c'; then $(CYGPATH_W) 'epoll.c'; else $(CYGPATH_W) '$(srcdir)/epoll.c'; fi`
-
-strace-evdev.o: evdev.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-evdev.o -MD -MP -MF $(DEPDIR)/strace-evdev.Tpo -c -o strace-evdev.o `test -f 'evdev.c' || echo '$(srcdir)/'`evdev.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-evdev.Tpo $(DEPDIR)/strace-evdev.Po
-#	$(AM_V_CC)source='evdev.c' object='strace-evdev.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-evdev.o `test -f 'evdev.c' || echo '$(srcdir)/'`evdev.c
-
-strace-evdev.obj: evdev.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-evdev.obj -MD -MP -MF $(DEPDIR)/strace-evdev.Tpo -c -o strace-evdev.obj `if test -f 'evdev.c'; then $(CYGPATH_W) 'evdev.c'; else $(CYGPATH_W) '$(srcdir)/evdev.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-evdev.Tpo $(DEPDIR)/strace-evdev.Po
-#	$(AM_V_CC)source='evdev.c' object='strace-evdev.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-evdev.obj `if test -f 'evdev.c'; then $(CYGPATH_W) 'evdev.c'; else $(CYGPATH_W) '$(srcdir)/evdev.c'; fi`
-
-strace-eventfd.o: eventfd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-eventfd.o -MD -MP -MF $(DEPDIR)/strace-eventfd.Tpo -c -o strace-eventfd.o `test -f 'eventfd.c' || echo '$(srcdir)/'`eventfd.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-eventfd.Tpo $(DEPDIR)/strace-eventfd.Po
-#	$(AM_V_CC)source='eventfd.c' object='strace-eventfd.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-eventfd.o `test -f 'eventfd.c' || echo '$(srcdir)/'`eventfd.c
-
-strace-eventfd.obj: eventfd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-eventfd.obj -MD -MP -MF $(DEPDIR)/strace-eventfd.Tpo -c -o strace-eventfd.obj `if test -f 'eventfd.c'; then $(CYGPATH_W) 'eventfd.c'; else $(CYGPATH_W) '$(srcdir)/eventfd.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-eventfd.Tpo $(DEPDIR)/strace-eventfd.Po
-#	$(AM_V_CC)source='eventfd.c' object='strace-eventfd.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-eventfd.obj `if test -f 'eventfd.c'; then $(CYGPATH_W) 'eventfd.c'; else $(CYGPATH_W) '$(srcdir)/eventfd.c'; fi`
-
-strace-execve.o: execve.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-execve.o -MD -MP -MF $(DEPDIR)/strace-execve.Tpo -c -o strace-execve.o `test -f 'execve.c' || echo '$(srcdir)/'`execve.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-execve.Tpo $(DEPDIR)/strace-execve.Po
-#	$(AM_V_CC)source='execve.c' object='strace-execve.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-execve.o `test -f 'execve.c' || echo '$(srcdir)/'`execve.c
-
-strace-execve.obj: execve.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-execve.obj -MD -MP -MF $(DEPDIR)/strace-execve.Tpo -c -o strace-execve.obj `if test -f 'execve.c'; then $(CYGPATH_W) 'execve.c'; else $(CYGPATH_W) '$(srcdir)/execve.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-execve.Tpo $(DEPDIR)/strace-execve.Po
-#	$(AM_V_CC)source='execve.c' object='strace-execve.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-execve.obj `if test -f 'execve.c'; then $(CYGPATH_W) 'execve.c'; else $(CYGPATH_W) '$(srcdir)/execve.c'; fi`
-
-strace-fadvise.o: fadvise.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fadvise.o -MD -MP -MF $(DEPDIR)/strace-fadvise.Tpo -c -o strace-fadvise.o `test -f 'fadvise.c' || echo '$(srcdir)/'`fadvise.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fadvise.Tpo $(DEPDIR)/strace-fadvise.Po
-#	$(AM_V_CC)source='fadvise.c' object='strace-fadvise.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fadvise.o `test -f 'fadvise.c' || echo '$(srcdir)/'`fadvise.c
-
-strace-fadvise.obj: fadvise.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fadvise.obj -MD -MP -MF $(DEPDIR)/strace-fadvise.Tpo -c -o strace-fadvise.obj `if test -f 'fadvise.c'; then $(CYGPATH_W) 'fadvise.c'; else $(CYGPATH_W) '$(srcdir)/fadvise.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fadvise.Tpo $(DEPDIR)/strace-fadvise.Po
-#	$(AM_V_CC)source='fadvise.c' object='strace-fadvise.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fadvise.obj `if test -f 'fadvise.c'; then $(CYGPATH_W) 'fadvise.c'; else $(CYGPATH_W) '$(srcdir)/fadvise.c'; fi`
-
-strace-fallocate.o: fallocate.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fallocate.o -MD -MP -MF $(DEPDIR)/strace-fallocate.Tpo -c -o strace-fallocate.o `test -f 'fallocate.c' || echo '$(srcdir)/'`fallocate.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fallocate.Tpo $(DEPDIR)/strace-fallocate.Po
-#	$(AM_V_CC)source='fallocate.c' object='strace-fallocate.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fallocate.o `test -f 'fallocate.c' || echo '$(srcdir)/'`fallocate.c
-
-strace-fallocate.obj: fallocate.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fallocate.obj -MD -MP -MF $(DEPDIR)/strace-fallocate.Tpo -c -o strace-fallocate.obj `if test -f 'fallocate.c'; then $(CYGPATH_W) 'fallocate.c'; else $(CYGPATH_W) '$(srcdir)/fallocate.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fallocate.Tpo $(DEPDIR)/strace-fallocate.Po
-#	$(AM_V_CC)source='fallocate.c' object='strace-fallocate.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fallocate.obj `if test -f 'fallocate.c'; then $(CYGPATH_W) 'fallocate.c'; else $(CYGPATH_W) '$(srcdir)/fallocate.c'; fi`
-
-strace-fanotify.o: fanotify.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fanotify.o -MD -MP -MF $(DEPDIR)/strace-fanotify.Tpo -c -o strace-fanotify.o `test -f 'fanotify.c' || echo '$(srcdir)/'`fanotify.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fanotify.Tpo $(DEPDIR)/strace-fanotify.Po
-#	$(AM_V_CC)source='fanotify.c' object='strace-fanotify.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fanotify.o `test -f 'fanotify.c' || echo '$(srcdir)/'`fanotify.c
-
-strace-fanotify.obj: fanotify.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fanotify.obj -MD -MP -MF $(DEPDIR)/strace-fanotify.Tpo -c -o strace-fanotify.obj `if test -f 'fanotify.c'; then $(CYGPATH_W) 'fanotify.c'; else $(CYGPATH_W) '$(srcdir)/fanotify.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fanotify.Tpo $(DEPDIR)/strace-fanotify.Po
-#	$(AM_V_CC)source='fanotify.c' object='strace-fanotify.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fanotify.obj `if test -f 'fanotify.c'; then $(CYGPATH_W) 'fanotify.c'; else $(CYGPATH_W) '$(srcdir)/fanotify.c'; fi`
-
-strace-fchownat.o: fchownat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fchownat.o -MD -MP -MF $(DEPDIR)/strace-fchownat.Tpo -c -o strace-fchownat.o `test -f 'fchownat.c' || echo '$(srcdir)/'`fchownat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fchownat.Tpo $(DEPDIR)/strace-fchownat.Po
-#	$(AM_V_CC)source='fchownat.c' object='strace-fchownat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fchownat.o `test -f 'fchownat.c' || echo '$(srcdir)/'`fchownat.c
-
-strace-fchownat.obj: fchownat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fchownat.obj -MD -MP -MF $(DEPDIR)/strace-fchownat.Tpo -c -o strace-fchownat.obj `if test -f 'fchownat.c'; then $(CYGPATH_W) 'fchownat.c'; else $(CYGPATH_W) '$(srcdir)/fchownat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fchownat.Tpo $(DEPDIR)/strace-fchownat.Po
-#	$(AM_V_CC)source='fchownat.c' object='strace-fchownat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fchownat.obj `if test -f 'fchownat.c'; then $(CYGPATH_W) 'fchownat.c'; else $(CYGPATH_W) '$(srcdir)/fchownat.c'; fi`
-
-strace-fcntl.o: fcntl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fcntl.o -MD -MP -MF $(DEPDIR)/strace-fcntl.Tpo -c -o strace-fcntl.o `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fcntl.Tpo $(DEPDIR)/strace-fcntl.Po
-#	$(AM_V_CC)source='fcntl.c' object='strace-fcntl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fcntl.o `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c
-
-strace-fcntl.obj: fcntl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fcntl.obj -MD -MP -MF $(DEPDIR)/strace-fcntl.Tpo -c -o strace-fcntl.obj `if test -f 'fcntl.c'; then $(CYGPATH_W) 'fcntl.c'; else $(CYGPATH_W) '$(srcdir)/fcntl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fcntl.Tpo $(DEPDIR)/strace-fcntl.Po
-#	$(AM_V_CC)source='fcntl.c' object='strace-fcntl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fcntl.obj `if test -f 'fcntl.c'; then $(CYGPATH_W) 'fcntl.c'; else $(CYGPATH_W) '$(srcdir)/fcntl.c'; fi`
-
-strace-fetch_seccomp_fprog.o: fetch_seccomp_fprog.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_seccomp_fprog.o -MD -MP -MF $(DEPDIR)/strace-fetch_seccomp_fprog.Tpo -c -o strace-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_seccomp_fprog.Tpo $(DEPDIR)/strace-fetch_seccomp_fprog.Po
-#	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='strace-fetch_seccomp_fprog.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
-
-strace-fetch_seccomp_fprog.obj: fetch_seccomp_fprog.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_seccomp_fprog.obj -MD -MP -MF $(DEPDIR)/strace-fetch_seccomp_fprog.Tpo -c -o strace-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_seccomp_fprog.Tpo $(DEPDIR)/strace-fetch_seccomp_fprog.Po
-#	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='strace-fetch_seccomp_fprog.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
-
-strace-fetch_struct_flock.o: fetch_struct_flock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_flock.o -MD -MP -MF $(DEPDIR)/strace-fetch_struct_flock.Tpo -c -o strace-fetch_struct_flock.o `test -f 'fetch_struct_flock.c' || echo '$(srcdir)/'`fetch_struct_flock.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_flock.Tpo $(DEPDIR)/strace-fetch_struct_flock.Po
-#	$(AM_V_CC)source='fetch_struct_flock.c' object='strace-fetch_struct_flock.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_flock.o `test -f 'fetch_struct_flock.c' || echo '$(srcdir)/'`fetch_struct_flock.c
-
-strace-fetch_struct_flock.obj: fetch_struct_flock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_flock.obj -MD -MP -MF $(DEPDIR)/strace-fetch_struct_flock.Tpo -c -o strace-fetch_struct_flock.obj `if test -f 'fetch_struct_flock.c'; then $(CYGPATH_W) 'fetch_struct_flock.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_flock.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_flock.Tpo $(DEPDIR)/strace-fetch_struct_flock.Po
-#	$(AM_V_CC)source='fetch_struct_flock.c' object='strace-fetch_struct_flock.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_flock.obj `if test -f 'fetch_struct_flock.c'; then $(CYGPATH_W) 'fetch_struct_flock.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_flock.c'; fi`
-
-strace-fetch_struct_mmsghdr.o: fetch_struct_mmsghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_mmsghdr.o -MD -MP -MF $(DEPDIR)/strace-fetch_struct_mmsghdr.Tpo -c -o strace-fetch_struct_mmsghdr.o `test -f 'fetch_struct_mmsghdr.c' || echo '$(srcdir)/'`fetch_struct_mmsghdr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_mmsghdr.Tpo $(DEPDIR)/strace-fetch_struct_mmsghdr.Po
-#	$(AM_V_CC)source='fetch_struct_mmsghdr.c' object='strace-fetch_struct_mmsghdr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_mmsghdr.o `test -f 'fetch_struct_mmsghdr.c' || echo '$(srcdir)/'`fetch_struct_mmsghdr.c
-
-strace-fetch_struct_mmsghdr.obj: fetch_struct_mmsghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_mmsghdr.obj -MD -MP -MF $(DEPDIR)/strace-fetch_struct_mmsghdr.Tpo -c -o strace-fetch_struct_mmsghdr.obj `if test -f 'fetch_struct_mmsghdr.c'; then $(CYGPATH_W) 'fetch_struct_mmsghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_mmsghdr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_mmsghdr.Tpo $(DEPDIR)/strace-fetch_struct_mmsghdr.Po
-#	$(AM_V_CC)source='fetch_struct_mmsghdr.c' object='strace-fetch_struct_mmsghdr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_mmsghdr.obj `if test -f 'fetch_struct_mmsghdr.c'; then $(CYGPATH_W) 'fetch_struct_mmsghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_mmsghdr.c'; fi`
-
-strace-fetch_struct_msghdr.o: fetch_struct_msghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_msghdr.o -MD -MP -MF $(DEPDIR)/strace-fetch_struct_msghdr.Tpo -c -o strace-fetch_struct_msghdr.o `test -f 'fetch_struct_msghdr.c' || echo '$(srcdir)/'`fetch_struct_msghdr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_msghdr.Tpo $(DEPDIR)/strace-fetch_struct_msghdr.Po
-#	$(AM_V_CC)source='fetch_struct_msghdr.c' object='strace-fetch_struct_msghdr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_msghdr.o `test -f 'fetch_struct_msghdr.c' || echo '$(srcdir)/'`fetch_struct_msghdr.c
-
-strace-fetch_struct_msghdr.obj: fetch_struct_msghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_msghdr.obj -MD -MP -MF $(DEPDIR)/strace-fetch_struct_msghdr.Tpo -c -o strace-fetch_struct_msghdr.obj `if test -f 'fetch_struct_msghdr.c'; then $(CYGPATH_W) 'fetch_struct_msghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_msghdr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_msghdr.Tpo $(DEPDIR)/strace-fetch_struct_msghdr.Po
-#	$(AM_V_CC)source='fetch_struct_msghdr.c' object='strace-fetch_struct_msghdr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_msghdr.obj `if test -f 'fetch_struct_msghdr.c'; then $(CYGPATH_W) 'fetch_struct_msghdr.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_msghdr.c'; fi`
-
-strace-fetch_struct_stat.o: fetch_struct_stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_stat.o -MD -MP -MF $(DEPDIR)/strace-fetch_struct_stat.Tpo -c -o strace-fetch_struct_stat.o `test -f 'fetch_struct_stat.c' || echo '$(srcdir)/'`fetch_struct_stat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_stat.Tpo $(DEPDIR)/strace-fetch_struct_stat.Po
-#	$(AM_V_CC)source='fetch_struct_stat.c' object='strace-fetch_struct_stat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_stat.o `test -f 'fetch_struct_stat.c' || echo '$(srcdir)/'`fetch_struct_stat.c
-
-strace-fetch_struct_stat.obj: fetch_struct_stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_stat.obj -MD -MP -MF $(DEPDIR)/strace-fetch_struct_stat.Tpo -c -o strace-fetch_struct_stat.obj `if test -f 'fetch_struct_stat.c'; then $(CYGPATH_W) 'fetch_struct_stat.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_stat.Tpo $(DEPDIR)/strace-fetch_struct_stat.Po
-#	$(AM_V_CC)source='fetch_struct_stat.c' object='strace-fetch_struct_stat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_stat.obj `if test -f 'fetch_struct_stat.c'; then $(CYGPATH_W) 'fetch_struct_stat.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat.c'; fi`
-
-strace-fetch_struct_stat64.o: fetch_struct_stat64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_stat64.o -MD -MP -MF $(DEPDIR)/strace-fetch_struct_stat64.Tpo -c -o strace-fetch_struct_stat64.o `test -f 'fetch_struct_stat64.c' || echo '$(srcdir)/'`fetch_struct_stat64.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_stat64.Tpo $(DEPDIR)/strace-fetch_struct_stat64.Po
-#	$(AM_V_CC)source='fetch_struct_stat64.c' object='strace-fetch_struct_stat64.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_stat64.o `test -f 'fetch_struct_stat64.c' || echo '$(srcdir)/'`fetch_struct_stat64.c
-
-strace-fetch_struct_stat64.obj: fetch_struct_stat64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_stat64.obj -MD -MP -MF $(DEPDIR)/strace-fetch_struct_stat64.Tpo -c -o strace-fetch_struct_stat64.obj `if test -f 'fetch_struct_stat64.c'; then $(CYGPATH_W) 'fetch_struct_stat64.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat64.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_stat64.Tpo $(DEPDIR)/strace-fetch_struct_stat64.Po
-#	$(AM_V_CC)source='fetch_struct_stat64.c' object='strace-fetch_struct_stat64.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_stat64.obj `if test -f 'fetch_struct_stat64.c'; then $(CYGPATH_W) 'fetch_struct_stat64.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_stat64.c'; fi`
-
-strace-fetch_struct_statfs.o: fetch_struct_statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_statfs.o -MD -MP -MF $(DEPDIR)/strace-fetch_struct_statfs.Tpo -c -o strace-fetch_struct_statfs.o `test -f 'fetch_struct_statfs.c' || echo '$(srcdir)/'`fetch_struct_statfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_statfs.Tpo $(DEPDIR)/strace-fetch_struct_statfs.Po
-#	$(AM_V_CC)source='fetch_struct_statfs.c' object='strace-fetch_struct_statfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_statfs.o `test -f 'fetch_struct_statfs.c' || echo '$(srcdir)/'`fetch_struct_statfs.c
-
-strace-fetch_struct_statfs.obj: fetch_struct_statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_statfs.obj -MD -MP -MF $(DEPDIR)/strace-fetch_struct_statfs.Tpo -c -o strace-fetch_struct_statfs.obj `if test -f 'fetch_struct_statfs.c'; then $(CYGPATH_W) 'fetch_struct_statfs.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_statfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_statfs.Tpo $(DEPDIR)/strace-fetch_struct_statfs.Po
-#	$(AM_V_CC)source='fetch_struct_statfs.c' object='strace-fetch_struct_statfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_statfs.obj `if test -f 'fetch_struct_statfs.c'; then $(CYGPATH_W) 'fetch_struct_statfs.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_statfs.c'; fi`
-
-strace-file_handle.o: file_handle.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-file_handle.o -MD -MP -MF $(DEPDIR)/strace-file_handle.Tpo -c -o strace-file_handle.o `test -f 'file_handle.c' || echo '$(srcdir)/'`file_handle.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-file_handle.Tpo $(DEPDIR)/strace-file_handle.Po
-#	$(AM_V_CC)source='file_handle.c' object='strace-file_handle.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-file_handle.o `test -f 'file_handle.c' || echo '$(srcdir)/'`file_handle.c
-
-strace-file_handle.obj: file_handle.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-file_handle.obj -MD -MP -MF $(DEPDIR)/strace-file_handle.Tpo -c -o strace-file_handle.obj `if test -f 'file_handle.c'; then $(CYGPATH_W) 'file_handle.c'; else $(CYGPATH_W) '$(srcdir)/file_handle.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-file_handle.Tpo $(DEPDIR)/strace-file_handle.Po
-#	$(AM_V_CC)source='file_handle.c' object='strace-file_handle.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-file_handle.obj `if test -f 'file_handle.c'; then $(CYGPATH_W) 'file_handle.c'; else $(CYGPATH_W) '$(srcdir)/file_handle.c'; fi`
-
-strace-file_ioctl.o: file_ioctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-file_ioctl.o -MD -MP -MF $(DEPDIR)/strace-file_ioctl.Tpo -c -o strace-file_ioctl.o `test -f 'file_ioctl.c' || echo '$(srcdir)/'`file_ioctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-file_ioctl.Tpo $(DEPDIR)/strace-file_ioctl.Po
-#	$(AM_V_CC)source='file_ioctl.c' object='strace-file_ioctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-file_ioctl.o `test -f 'file_ioctl.c' || echo '$(srcdir)/'`file_ioctl.c
-
-strace-file_ioctl.obj: file_ioctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-file_ioctl.obj -MD -MP -MF $(DEPDIR)/strace-file_ioctl.Tpo -c -o strace-file_ioctl.obj `if test -f 'file_ioctl.c'; then $(CYGPATH_W) 'file_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/file_ioctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-file_ioctl.Tpo $(DEPDIR)/strace-file_ioctl.Po
-#	$(AM_V_CC)source='file_ioctl.c' object='strace-file_ioctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-file_ioctl.obj `if test -f 'file_ioctl.c'; then $(CYGPATH_W) 'file_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/file_ioctl.c'; fi`
-
-strace-fs_x_ioctl.o: fs_x_ioctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fs_x_ioctl.o -MD -MP -MF $(DEPDIR)/strace-fs_x_ioctl.Tpo -c -o strace-fs_x_ioctl.o `test -f 'fs_x_ioctl.c' || echo '$(srcdir)/'`fs_x_ioctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fs_x_ioctl.Tpo $(DEPDIR)/strace-fs_x_ioctl.Po
-#	$(AM_V_CC)source='fs_x_ioctl.c' object='strace-fs_x_ioctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fs_x_ioctl.o `test -f 'fs_x_ioctl.c' || echo '$(srcdir)/'`fs_x_ioctl.c
-
-strace-fs_x_ioctl.obj: fs_x_ioctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fs_x_ioctl.obj -MD -MP -MF $(DEPDIR)/strace-fs_x_ioctl.Tpo -c -o strace-fs_x_ioctl.obj `if test -f 'fs_x_ioctl.c'; then $(CYGPATH_W) 'fs_x_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/fs_x_ioctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fs_x_ioctl.Tpo $(DEPDIR)/strace-fs_x_ioctl.Po
-#	$(AM_V_CC)source='fs_x_ioctl.c' object='strace-fs_x_ioctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fs_x_ioctl.obj `if test -f 'fs_x_ioctl.c'; then $(CYGPATH_W) 'fs_x_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/fs_x_ioctl.c'; fi`
-
-strace-flock.o: flock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-flock.o -MD -MP -MF $(DEPDIR)/strace-flock.Tpo -c -o strace-flock.o `test -f 'flock.c' || echo '$(srcdir)/'`flock.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-flock.Tpo $(DEPDIR)/strace-flock.Po
-#	$(AM_V_CC)source='flock.c' object='strace-flock.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-flock.o `test -f 'flock.c' || echo '$(srcdir)/'`flock.c
-
-strace-flock.obj: flock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-flock.obj -MD -MP -MF $(DEPDIR)/strace-flock.Tpo -c -o strace-flock.obj `if test -f 'flock.c'; then $(CYGPATH_W) 'flock.c'; else $(CYGPATH_W) '$(srcdir)/flock.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-flock.Tpo $(DEPDIR)/strace-flock.Po
-#	$(AM_V_CC)source='flock.c' object='strace-flock.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-flock.obj `if test -f 'flock.c'; then $(CYGPATH_W) 'flock.c'; else $(CYGPATH_W) '$(srcdir)/flock.c'; fi`
-
-strace-futex.o: futex.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-futex.o -MD -MP -MF $(DEPDIR)/strace-futex.Tpo -c -o strace-futex.o `test -f 'futex.c' || echo '$(srcdir)/'`futex.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-futex.Tpo $(DEPDIR)/strace-futex.Po
-#	$(AM_V_CC)source='futex.c' object='strace-futex.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-futex.o `test -f 'futex.c' || echo '$(srcdir)/'`futex.c
-
-strace-futex.obj: futex.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-futex.obj -MD -MP -MF $(DEPDIR)/strace-futex.Tpo -c -o strace-futex.obj `if test -f 'futex.c'; then $(CYGPATH_W) 'futex.c'; else $(CYGPATH_W) '$(srcdir)/futex.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-futex.Tpo $(DEPDIR)/strace-futex.Po
-#	$(AM_V_CC)source='futex.c' object='strace-futex.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-futex.obj `if test -f 'futex.c'; then $(CYGPATH_W) 'futex.c'; else $(CYGPATH_W) '$(srcdir)/futex.c'; fi`
-
-strace-get_robust_list.o: get_robust_list.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-get_robust_list.o -MD -MP -MF $(DEPDIR)/strace-get_robust_list.Tpo -c -o strace-get_robust_list.o `test -f 'get_robust_list.c' || echo '$(srcdir)/'`get_robust_list.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-get_robust_list.Tpo $(DEPDIR)/strace-get_robust_list.Po
-#	$(AM_V_CC)source='get_robust_list.c' object='strace-get_robust_list.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-get_robust_list.o `test -f 'get_robust_list.c' || echo '$(srcdir)/'`get_robust_list.c
-
-strace-get_robust_list.obj: get_robust_list.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-get_robust_list.obj -MD -MP -MF $(DEPDIR)/strace-get_robust_list.Tpo -c -o strace-get_robust_list.obj `if test -f 'get_robust_list.c'; then $(CYGPATH_W) 'get_robust_list.c'; else $(CYGPATH_W) '$(srcdir)/get_robust_list.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-get_robust_list.Tpo $(DEPDIR)/strace-get_robust_list.Po
-#	$(AM_V_CC)source='get_robust_list.c' object='strace-get_robust_list.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-get_robust_list.obj `if test -f 'get_robust_list.c'; then $(CYGPATH_W) 'get_robust_list.c'; else $(CYGPATH_W) '$(srcdir)/get_robust_list.c'; fi`
-
-strace-getcpu.o: getcpu.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-getcpu.o -MD -MP -MF $(DEPDIR)/strace-getcpu.Tpo -c -o strace-getcpu.o `test -f 'getcpu.c' || echo '$(srcdir)/'`getcpu.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-getcpu.Tpo $(DEPDIR)/strace-getcpu.Po
-#	$(AM_V_CC)source='getcpu.c' object='strace-getcpu.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-getcpu.o `test -f 'getcpu.c' || echo '$(srcdir)/'`getcpu.c
-
-strace-getcpu.obj: getcpu.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-getcpu.obj -MD -MP -MF $(DEPDIR)/strace-getcpu.Tpo -c -o strace-getcpu.obj `if test -f 'getcpu.c'; then $(CYGPATH_W) 'getcpu.c'; else $(CYGPATH_W) '$(srcdir)/getcpu.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-getcpu.Tpo $(DEPDIR)/strace-getcpu.Po
-#	$(AM_V_CC)source='getcpu.c' object='strace-getcpu.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-getcpu.obj `if test -f 'getcpu.c'; then $(CYGPATH_W) 'getcpu.c'; else $(CYGPATH_W) '$(srcdir)/getcpu.c'; fi`
-
-strace-getcwd.o: getcwd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-getcwd.o -MD -MP -MF $(DEPDIR)/strace-getcwd.Tpo -c -o strace-getcwd.o `test -f 'getcwd.c' || echo '$(srcdir)/'`getcwd.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-getcwd.Tpo $(DEPDIR)/strace-getcwd.Po
-#	$(AM_V_CC)source='getcwd.c' object='strace-getcwd.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-getcwd.o `test -f 'getcwd.c' || echo '$(srcdir)/'`getcwd.c
-
-strace-getcwd.obj: getcwd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-getcwd.obj -MD -MP -MF $(DEPDIR)/strace-getcwd.Tpo -c -o strace-getcwd.obj `if test -f 'getcwd.c'; then $(CYGPATH_W) 'getcwd.c'; else $(CYGPATH_W) '$(srcdir)/getcwd.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-getcwd.Tpo $(DEPDIR)/strace-getcwd.Po
-#	$(AM_V_CC)source='getcwd.c' object='strace-getcwd.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-getcwd.obj `if test -f 'getcwd.c'; then $(CYGPATH_W) 'getcwd.c'; else $(CYGPATH_W) '$(srcdir)/getcwd.c'; fi`
-
-strace-getrandom.o: getrandom.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-getrandom.o -MD -MP -MF $(DEPDIR)/strace-getrandom.Tpo -c -o strace-getrandom.o `test -f 'getrandom.c' || echo '$(srcdir)/'`getrandom.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-getrandom.Tpo $(DEPDIR)/strace-getrandom.Po
-#	$(AM_V_CC)source='getrandom.c' object='strace-getrandom.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-getrandom.o `test -f 'getrandom.c' || echo '$(srcdir)/'`getrandom.c
-
-strace-getrandom.obj: getrandom.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-getrandom.obj -MD -MP -MF $(DEPDIR)/strace-getrandom.Tpo -c -o strace-getrandom.obj `if test -f 'getrandom.c'; then $(CYGPATH_W) 'getrandom.c'; else $(CYGPATH_W) '$(srcdir)/getrandom.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-getrandom.Tpo $(DEPDIR)/strace-getrandom.Po
-#	$(AM_V_CC)source='getrandom.c' object='strace-getrandom.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-getrandom.obj `if test -f 'getrandom.c'; then $(CYGPATH_W) 'getrandom.c'; else $(CYGPATH_W) '$(srcdir)/getrandom.c'; fi`
-
-strace-hdio.o: hdio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-hdio.o -MD -MP -MF $(DEPDIR)/strace-hdio.Tpo -c -o strace-hdio.o `test -f 'hdio.c' || echo '$(srcdir)/'`hdio.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-hdio.Tpo $(DEPDIR)/strace-hdio.Po
-#	$(AM_V_CC)source='hdio.c' object='strace-hdio.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-hdio.o `test -f 'hdio.c' || echo '$(srcdir)/'`hdio.c
-
-strace-hdio.obj: hdio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-hdio.obj -MD -MP -MF $(DEPDIR)/strace-hdio.Tpo -c -o strace-hdio.obj `if test -f 'hdio.c'; then $(CYGPATH_W) 'hdio.c'; else $(CYGPATH_W) '$(srcdir)/hdio.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-hdio.Tpo $(DEPDIR)/strace-hdio.Po
-#	$(AM_V_CC)source='hdio.c' object='strace-hdio.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-hdio.obj `if test -f 'hdio.c'; then $(CYGPATH_W) 'hdio.c'; else $(CYGPATH_W) '$(srcdir)/hdio.c'; fi`
-
-strace-hostname.o: hostname.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-hostname.o -MD -MP -MF $(DEPDIR)/strace-hostname.Tpo -c -o strace-hostname.o `test -f 'hostname.c' || echo '$(srcdir)/'`hostname.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-hostname.Tpo $(DEPDIR)/strace-hostname.Po
-#	$(AM_V_CC)source='hostname.c' object='strace-hostname.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-hostname.o `test -f 'hostname.c' || echo '$(srcdir)/'`hostname.c
-
-strace-hostname.obj: hostname.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-hostname.obj -MD -MP -MF $(DEPDIR)/strace-hostname.Tpo -c -o strace-hostname.obj `if test -f 'hostname.c'; then $(CYGPATH_W) 'hostname.c'; else $(CYGPATH_W) '$(srcdir)/hostname.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-hostname.Tpo $(DEPDIR)/strace-hostname.Po
-#	$(AM_V_CC)source='hostname.c' object='strace-hostname.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-hostname.obj `if test -f 'hostname.c'; then $(CYGPATH_W) 'hostname.c'; else $(CYGPATH_W) '$(srcdir)/hostname.c'; fi`
-
-strace-inotify.o: inotify.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-inotify.o -MD -MP -MF $(DEPDIR)/strace-inotify.Tpo -c -o strace-inotify.o `test -f 'inotify.c' || echo '$(srcdir)/'`inotify.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-inotify.Tpo $(DEPDIR)/strace-inotify.Po
-#	$(AM_V_CC)source='inotify.c' object='strace-inotify.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-inotify.o `test -f 'inotify.c' || echo '$(srcdir)/'`inotify.c
-
-strace-inotify.obj: inotify.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-inotify.obj -MD -MP -MF $(DEPDIR)/strace-inotify.Tpo -c -o strace-inotify.obj `if test -f 'inotify.c'; then $(CYGPATH_W) 'inotify.c'; else $(CYGPATH_W) '$(srcdir)/inotify.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-inotify.Tpo $(DEPDIR)/strace-inotify.Po
-#	$(AM_V_CC)source='inotify.c' object='strace-inotify.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-inotify.obj `if test -f 'inotify.c'; then $(CYGPATH_W) 'inotify.c'; else $(CYGPATH_W) '$(srcdir)/inotify.c'; fi`
-
-strace-io.o: io.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-io.o -MD -MP -MF $(DEPDIR)/strace-io.Tpo -c -o strace-io.o `test -f 'io.c' || echo '$(srcdir)/'`io.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-io.Tpo $(DEPDIR)/strace-io.Po
-#	$(AM_V_CC)source='io.c' object='strace-io.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-io.o `test -f 'io.c' || echo '$(srcdir)/'`io.c
-
-strace-io.obj: io.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-io.obj -MD -MP -MF $(DEPDIR)/strace-io.Tpo -c -o strace-io.obj `if test -f 'io.c'; then $(CYGPATH_W) 'io.c'; else $(CYGPATH_W) '$(srcdir)/io.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-io.Tpo $(DEPDIR)/strace-io.Po
-#	$(AM_V_CC)source='io.c' object='strace-io.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-io.obj `if test -f 'io.c'; then $(CYGPATH_W) 'io.c'; else $(CYGPATH_W) '$(srcdir)/io.c'; fi`
-
-strace-ioctl.o: ioctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ioctl.o -MD -MP -MF $(DEPDIR)/strace-ioctl.Tpo -c -o strace-ioctl.o `test -f 'ioctl.c' || echo '$(srcdir)/'`ioctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ioctl.Tpo $(DEPDIR)/strace-ioctl.Po
-#	$(AM_V_CC)source='ioctl.c' object='strace-ioctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ioctl.o `test -f 'ioctl.c' || echo '$(srcdir)/'`ioctl.c
-
-strace-ioctl.obj: ioctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ioctl.obj -MD -MP -MF $(DEPDIR)/strace-ioctl.Tpo -c -o strace-ioctl.obj `if test -f 'ioctl.c'; then $(CYGPATH_W) 'ioctl.c'; else $(CYGPATH_W) '$(srcdir)/ioctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ioctl.Tpo $(DEPDIR)/strace-ioctl.Po
-#	$(AM_V_CC)source='ioctl.c' object='strace-ioctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ioctl.obj `if test -f 'ioctl.c'; then $(CYGPATH_W) 'ioctl.c'; else $(CYGPATH_W) '$(srcdir)/ioctl.c'; fi`
-
-strace-ioperm.o: ioperm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ioperm.o -MD -MP -MF $(DEPDIR)/strace-ioperm.Tpo -c -o strace-ioperm.o `test -f 'ioperm.c' || echo '$(srcdir)/'`ioperm.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ioperm.Tpo $(DEPDIR)/strace-ioperm.Po
-#	$(AM_V_CC)source='ioperm.c' object='strace-ioperm.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ioperm.o `test -f 'ioperm.c' || echo '$(srcdir)/'`ioperm.c
-
-strace-ioperm.obj: ioperm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ioperm.obj -MD -MP -MF $(DEPDIR)/strace-ioperm.Tpo -c -o strace-ioperm.obj `if test -f 'ioperm.c'; then $(CYGPATH_W) 'ioperm.c'; else $(CYGPATH_W) '$(srcdir)/ioperm.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ioperm.Tpo $(DEPDIR)/strace-ioperm.Po
-#	$(AM_V_CC)source='ioperm.c' object='strace-ioperm.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ioperm.obj `if test -f 'ioperm.c'; then $(CYGPATH_W) 'ioperm.c'; else $(CYGPATH_W) '$(srcdir)/ioperm.c'; fi`
-
-strace-iopl.o: iopl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-iopl.o -MD -MP -MF $(DEPDIR)/strace-iopl.Tpo -c -o strace-iopl.o `test -f 'iopl.c' || echo '$(srcdir)/'`iopl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-iopl.Tpo $(DEPDIR)/strace-iopl.Po
-#	$(AM_V_CC)source='iopl.c' object='strace-iopl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-iopl.o `test -f 'iopl.c' || echo '$(srcdir)/'`iopl.c
-
-strace-iopl.obj: iopl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-iopl.obj -MD -MP -MF $(DEPDIR)/strace-iopl.Tpo -c -o strace-iopl.obj `if test -f 'iopl.c'; then $(CYGPATH_W) 'iopl.c'; else $(CYGPATH_W) '$(srcdir)/iopl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-iopl.Tpo $(DEPDIR)/strace-iopl.Po
-#	$(AM_V_CC)source='iopl.c' object='strace-iopl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-iopl.obj `if test -f 'iopl.c'; then $(CYGPATH_W) 'iopl.c'; else $(CYGPATH_W) '$(srcdir)/iopl.c'; fi`
-
-strace-ioprio.o: ioprio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ioprio.o -MD -MP -MF $(DEPDIR)/strace-ioprio.Tpo -c -o strace-ioprio.o `test -f 'ioprio.c' || echo '$(srcdir)/'`ioprio.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ioprio.Tpo $(DEPDIR)/strace-ioprio.Po
-#	$(AM_V_CC)source='ioprio.c' object='strace-ioprio.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ioprio.o `test -f 'ioprio.c' || echo '$(srcdir)/'`ioprio.c
-
-strace-ioprio.obj: ioprio.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ioprio.obj -MD -MP -MF $(DEPDIR)/strace-ioprio.Tpo -c -o strace-ioprio.obj `if test -f 'ioprio.c'; then $(CYGPATH_W) 'ioprio.c'; else $(CYGPATH_W) '$(srcdir)/ioprio.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ioprio.Tpo $(DEPDIR)/strace-ioprio.Po
-#	$(AM_V_CC)source='ioprio.c' object='strace-ioprio.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ioprio.obj `if test -f 'ioprio.c'; then $(CYGPATH_W) 'ioprio.c'; else $(CYGPATH_W) '$(srcdir)/ioprio.c'; fi`
-
-strace-ipc_msg.o: ipc_msg.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_msg.o -MD -MP -MF $(DEPDIR)/strace-ipc_msg.Tpo -c -o strace-ipc_msg.o `test -f 'ipc_msg.c' || echo '$(srcdir)/'`ipc_msg.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_msg.Tpo $(DEPDIR)/strace-ipc_msg.Po
-#	$(AM_V_CC)source='ipc_msg.c' object='strace-ipc_msg.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_msg.o `test -f 'ipc_msg.c' || echo '$(srcdir)/'`ipc_msg.c
-
-strace-ipc_msg.obj: ipc_msg.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_msg.obj -MD -MP -MF $(DEPDIR)/strace-ipc_msg.Tpo -c -o strace-ipc_msg.obj `if test -f 'ipc_msg.c'; then $(CYGPATH_W) 'ipc_msg.c'; else $(CYGPATH_W) '$(srcdir)/ipc_msg.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_msg.Tpo $(DEPDIR)/strace-ipc_msg.Po
-#	$(AM_V_CC)source='ipc_msg.c' object='strace-ipc_msg.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_msg.obj `if test -f 'ipc_msg.c'; then $(CYGPATH_W) 'ipc_msg.c'; else $(CYGPATH_W) '$(srcdir)/ipc_msg.c'; fi`
-
-strace-ipc_msgctl.o: ipc_msgctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_msgctl.o -MD -MP -MF $(DEPDIR)/strace-ipc_msgctl.Tpo -c -o strace-ipc_msgctl.o `test -f 'ipc_msgctl.c' || echo '$(srcdir)/'`ipc_msgctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_msgctl.Tpo $(DEPDIR)/strace-ipc_msgctl.Po
-#	$(AM_V_CC)source='ipc_msgctl.c' object='strace-ipc_msgctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_msgctl.o `test -f 'ipc_msgctl.c' || echo '$(srcdir)/'`ipc_msgctl.c
-
-strace-ipc_msgctl.obj: ipc_msgctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_msgctl.obj -MD -MP -MF $(DEPDIR)/strace-ipc_msgctl.Tpo -c -o strace-ipc_msgctl.obj `if test -f 'ipc_msgctl.c'; then $(CYGPATH_W) 'ipc_msgctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_msgctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_msgctl.Tpo $(DEPDIR)/strace-ipc_msgctl.Po
-#	$(AM_V_CC)source='ipc_msgctl.c' object='strace-ipc_msgctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_msgctl.obj `if test -f 'ipc_msgctl.c'; then $(CYGPATH_W) 'ipc_msgctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_msgctl.c'; fi`
-
-strace-ipc_sem.o: ipc_sem.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_sem.o -MD -MP -MF $(DEPDIR)/strace-ipc_sem.Tpo -c -o strace-ipc_sem.o `test -f 'ipc_sem.c' || echo '$(srcdir)/'`ipc_sem.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_sem.Tpo $(DEPDIR)/strace-ipc_sem.Po
-#	$(AM_V_CC)source='ipc_sem.c' object='strace-ipc_sem.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_sem.o `test -f 'ipc_sem.c' || echo '$(srcdir)/'`ipc_sem.c
-
-strace-ipc_sem.obj: ipc_sem.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_sem.obj -MD -MP -MF $(DEPDIR)/strace-ipc_sem.Tpo -c -o strace-ipc_sem.obj `if test -f 'ipc_sem.c'; then $(CYGPATH_W) 'ipc_sem.c'; else $(CYGPATH_W) '$(srcdir)/ipc_sem.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_sem.Tpo $(DEPDIR)/strace-ipc_sem.Po
-#	$(AM_V_CC)source='ipc_sem.c' object='strace-ipc_sem.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_sem.obj `if test -f 'ipc_sem.c'; then $(CYGPATH_W) 'ipc_sem.c'; else $(CYGPATH_W) '$(srcdir)/ipc_sem.c'; fi`
-
-strace-ipc_shm.o: ipc_shm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_shm.o -MD -MP -MF $(DEPDIR)/strace-ipc_shm.Tpo -c -o strace-ipc_shm.o `test -f 'ipc_shm.c' || echo '$(srcdir)/'`ipc_shm.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_shm.Tpo $(DEPDIR)/strace-ipc_shm.Po
-#	$(AM_V_CC)source='ipc_shm.c' object='strace-ipc_shm.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_shm.o `test -f 'ipc_shm.c' || echo '$(srcdir)/'`ipc_shm.c
-
-strace-ipc_shm.obj: ipc_shm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_shm.obj -MD -MP -MF $(DEPDIR)/strace-ipc_shm.Tpo -c -o strace-ipc_shm.obj `if test -f 'ipc_shm.c'; then $(CYGPATH_W) 'ipc_shm.c'; else $(CYGPATH_W) '$(srcdir)/ipc_shm.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_shm.Tpo $(DEPDIR)/strace-ipc_shm.Po
-#	$(AM_V_CC)source='ipc_shm.c' object='strace-ipc_shm.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_shm.obj `if test -f 'ipc_shm.c'; then $(CYGPATH_W) 'ipc_shm.c'; else $(CYGPATH_W) '$(srcdir)/ipc_shm.c'; fi`
-
-strace-ipc_shmctl.o: ipc_shmctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_shmctl.o -MD -MP -MF $(DEPDIR)/strace-ipc_shmctl.Tpo -c -o strace-ipc_shmctl.o `test -f 'ipc_shmctl.c' || echo '$(srcdir)/'`ipc_shmctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_shmctl.Tpo $(DEPDIR)/strace-ipc_shmctl.Po
-#	$(AM_V_CC)source='ipc_shmctl.c' object='strace-ipc_shmctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_shmctl.o `test -f 'ipc_shmctl.c' || echo '$(srcdir)/'`ipc_shmctl.c
-
-strace-ipc_shmctl.obj: ipc_shmctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ipc_shmctl.obj -MD -MP -MF $(DEPDIR)/strace-ipc_shmctl.Tpo -c -o strace-ipc_shmctl.obj `if test -f 'ipc_shmctl.c'; then $(CYGPATH_W) 'ipc_shmctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_shmctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ipc_shmctl.Tpo $(DEPDIR)/strace-ipc_shmctl.Po
-#	$(AM_V_CC)source='ipc_shmctl.c' object='strace-ipc_shmctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ipc_shmctl.obj `if test -f 'ipc_shmctl.c'; then $(CYGPATH_W) 'ipc_shmctl.c'; else $(CYGPATH_W) '$(srcdir)/ipc_shmctl.c'; fi`
-
-strace-kcmp.o: kcmp.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-kcmp.o -MD -MP -MF $(DEPDIR)/strace-kcmp.Tpo -c -o strace-kcmp.o `test -f 'kcmp.c' || echo '$(srcdir)/'`kcmp.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-kcmp.Tpo $(DEPDIR)/strace-kcmp.Po
-#	$(AM_V_CC)source='kcmp.c' object='strace-kcmp.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-kcmp.o `test -f 'kcmp.c' || echo '$(srcdir)/'`kcmp.c
-
-strace-kcmp.obj: kcmp.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-kcmp.obj -MD -MP -MF $(DEPDIR)/strace-kcmp.Tpo -c -o strace-kcmp.obj `if test -f 'kcmp.c'; then $(CYGPATH_W) 'kcmp.c'; else $(CYGPATH_W) '$(srcdir)/kcmp.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-kcmp.Tpo $(DEPDIR)/strace-kcmp.Po
-#	$(AM_V_CC)source='kcmp.c' object='strace-kcmp.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-kcmp.obj `if test -f 'kcmp.c'; then $(CYGPATH_W) 'kcmp.c'; else $(CYGPATH_W) '$(srcdir)/kcmp.c'; fi`
-
-strace-kexec.o: kexec.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-kexec.o -MD -MP -MF $(DEPDIR)/strace-kexec.Tpo -c -o strace-kexec.o `test -f 'kexec.c' || echo '$(srcdir)/'`kexec.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-kexec.Tpo $(DEPDIR)/strace-kexec.Po
-#	$(AM_V_CC)source='kexec.c' object='strace-kexec.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-kexec.o `test -f 'kexec.c' || echo '$(srcdir)/'`kexec.c
-
-strace-kexec.obj: kexec.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-kexec.obj -MD -MP -MF $(DEPDIR)/strace-kexec.Tpo -c -o strace-kexec.obj `if test -f 'kexec.c'; then $(CYGPATH_W) 'kexec.c'; else $(CYGPATH_W) '$(srcdir)/kexec.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-kexec.Tpo $(DEPDIR)/strace-kexec.Po
-#	$(AM_V_CC)source='kexec.c' object='strace-kexec.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-kexec.obj `if test -f 'kexec.c'; then $(CYGPATH_W) 'kexec.c'; else $(CYGPATH_W) '$(srcdir)/kexec.c'; fi`
-
-strace-keyctl.o: keyctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-keyctl.o -MD -MP -MF $(DEPDIR)/strace-keyctl.Tpo -c -o strace-keyctl.o `test -f 'keyctl.c' || echo '$(srcdir)/'`keyctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-keyctl.Tpo $(DEPDIR)/strace-keyctl.Po
-#	$(AM_V_CC)source='keyctl.c' object='strace-keyctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-keyctl.o `test -f 'keyctl.c' || echo '$(srcdir)/'`keyctl.c
-
-strace-keyctl.obj: keyctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-keyctl.obj -MD -MP -MF $(DEPDIR)/strace-keyctl.Tpo -c -o strace-keyctl.obj `if test -f 'keyctl.c'; then $(CYGPATH_W) 'keyctl.c'; else $(CYGPATH_W) '$(srcdir)/keyctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-keyctl.Tpo $(DEPDIR)/strace-keyctl.Po
-#	$(AM_V_CC)source='keyctl.c' object='strace-keyctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-keyctl.obj `if test -f 'keyctl.c'; then $(CYGPATH_W) 'keyctl.c'; else $(CYGPATH_W) '$(srcdir)/keyctl.c'; fi`
-
-strace-ldt.o: ldt.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ldt.o -MD -MP -MF $(DEPDIR)/strace-ldt.Tpo -c -o strace-ldt.o `test -f 'ldt.c' || echo '$(srcdir)/'`ldt.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ldt.Tpo $(DEPDIR)/strace-ldt.Po
-#	$(AM_V_CC)source='ldt.c' object='strace-ldt.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ldt.o `test -f 'ldt.c' || echo '$(srcdir)/'`ldt.c
-
-strace-ldt.obj: ldt.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ldt.obj -MD -MP -MF $(DEPDIR)/strace-ldt.Tpo -c -o strace-ldt.obj `if test -f 'ldt.c'; then $(CYGPATH_W) 'ldt.c'; else $(CYGPATH_W) '$(srcdir)/ldt.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ldt.Tpo $(DEPDIR)/strace-ldt.Po
-#	$(AM_V_CC)source='ldt.c' object='strace-ldt.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ldt.obj `if test -f 'ldt.c'; then $(CYGPATH_W) 'ldt.c'; else $(CYGPATH_W) '$(srcdir)/ldt.c'; fi`
-
-strace-link.o: link.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-link.o -MD -MP -MF $(DEPDIR)/strace-link.Tpo -c -o strace-link.o `test -f 'link.c' || echo '$(srcdir)/'`link.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-link.Tpo $(DEPDIR)/strace-link.Po
-#	$(AM_V_CC)source='link.c' object='strace-link.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-link.o `test -f 'link.c' || echo '$(srcdir)/'`link.c
-
-strace-link.obj: link.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-link.obj -MD -MP -MF $(DEPDIR)/strace-link.Tpo -c -o strace-link.obj `if test -f 'link.c'; then $(CYGPATH_W) 'link.c'; else $(CYGPATH_W) '$(srcdir)/link.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-link.Tpo $(DEPDIR)/strace-link.Po
-#	$(AM_V_CC)source='link.c' object='strace-link.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-link.obj `if test -f 'link.c'; then $(CYGPATH_W) 'link.c'; else $(CYGPATH_W) '$(srcdir)/link.c'; fi`
-
-strace-lookup_dcookie.o: lookup_dcookie.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-lookup_dcookie.o -MD -MP -MF $(DEPDIR)/strace-lookup_dcookie.Tpo -c -o strace-lookup_dcookie.o `test -f 'lookup_dcookie.c' || echo '$(srcdir)/'`lookup_dcookie.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-lookup_dcookie.Tpo $(DEPDIR)/strace-lookup_dcookie.Po
-#	$(AM_V_CC)source='lookup_dcookie.c' object='strace-lookup_dcookie.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-lookup_dcookie.o `test -f 'lookup_dcookie.c' || echo '$(srcdir)/'`lookup_dcookie.c
-
-strace-lookup_dcookie.obj: lookup_dcookie.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-lookup_dcookie.obj -MD -MP -MF $(DEPDIR)/strace-lookup_dcookie.Tpo -c -o strace-lookup_dcookie.obj `if test -f 'lookup_dcookie.c'; then $(CYGPATH_W) 'lookup_dcookie.c'; else $(CYGPATH_W) '$(srcdir)/lookup_dcookie.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-lookup_dcookie.Tpo $(DEPDIR)/strace-lookup_dcookie.Po
-#	$(AM_V_CC)source='lookup_dcookie.c' object='strace-lookup_dcookie.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-lookup_dcookie.obj `if test -f 'lookup_dcookie.c'; then $(CYGPATH_W) 'lookup_dcookie.c'; else $(CYGPATH_W) '$(srcdir)/lookup_dcookie.c'; fi`
-
-strace-loop.o: loop.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-loop.o -MD -MP -MF $(DEPDIR)/strace-loop.Tpo -c -o strace-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-loop.Tpo $(DEPDIR)/strace-loop.Po
-#	$(AM_V_CC)source='loop.c' object='strace-loop.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
-
-strace-loop.obj: loop.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-loop.obj -MD -MP -MF $(DEPDIR)/strace-loop.Tpo -c -o strace-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-loop.Tpo $(DEPDIR)/strace-loop.Po
-#	$(AM_V_CC)source='loop.c' object='strace-loop.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
-
-strace-lseek.o: lseek.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-lseek.o -MD -MP -MF $(DEPDIR)/strace-lseek.Tpo -c -o strace-lseek.o `test -f 'lseek.c' || echo '$(srcdir)/'`lseek.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-lseek.Tpo $(DEPDIR)/strace-lseek.Po
-#	$(AM_V_CC)source='lseek.c' object='strace-lseek.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-lseek.o `test -f 'lseek.c' || echo '$(srcdir)/'`lseek.c
-
-strace-lseek.obj: lseek.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-lseek.obj -MD -MP -MF $(DEPDIR)/strace-lseek.Tpo -c -o strace-lseek.obj `if test -f 'lseek.c'; then $(CYGPATH_W) 'lseek.c'; else $(CYGPATH_W) '$(srcdir)/lseek.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-lseek.Tpo $(DEPDIR)/strace-lseek.Po
-#	$(AM_V_CC)source='lseek.c' object='strace-lseek.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-lseek.obj `if test -f 'lseek.c'; then $(CYGPATH_W) 'lseek.c'; else $(CYGPATH_W) '$(srcdir)/lseek.c'; fi`
-
-strace-mem.o: mem.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mem.o -MD -MP -MF $(DEPDIR)/strace-mem.Tpo -c -o strace-mem.o `test -f 'mem.c' || echo '$(srcdir)/'`mem.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mem.Tpo $(DEPDIR)/strace-mem.Po
-#	$(AM_V_CC)source='mem.c' object='strace-mem.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mem.o `test -f 'mem.c' || echo '$(srcdir)/'`mem.c
-
-strace-mem.obj: mem.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mem.obj -MD -MP -MF $(DEPDIR)/strace-mem.Tpo -c -o strace-mem.obj `if test -f 'mem.c'; then $(CYGPATH_W) 'mem.c'; else $(CYGPATH_W) '$(srcdir)/mem.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mem.Tpo $(DEPDIR)/strace-mem.Po
-#	$(AM_V_CC)source='mem.c' object='strace-mem.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mem.obj `if test -f 'mem.c'; then $(CYGPATH_W) 'mem.c'; else $(CYGPATH_W) '$(srcdir)/mem.c'; fi`
-
-strace-membarrier.o: membarrier.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-membarrier.o -MD -MP -MF $(DEPDIR)/strace-membarrier.Tpo -c -o strace-membarrier.o `test -f 'membarrier.c' || echo '$(srcdir)/'`membarrier.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-membarrier.Tpo $(DEPDIR)/strace-membarrier.Po
-#	$(AM_V_CC)source='membarrier.c' object='strace-membarrier.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-membarrier.o `test -f 'membarrier.c' || echo '$(srcdir)/'`membarrier.c
-
-strace-membarrier.obj: membarrier.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-membarrier.obj -MD -MP -MF $(DEPDIR)/strace-membarrier.Tpo -c -o strace-membarrier.obj `if test -f 'membarrier.c'; then $(CYGPATH_W) 'membarrier.c'; else $(CYGPATH_W) '$(srcdir)/membarrier.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-membarrier.Tpo $(DEPDIR)/strace-membarrier.Po
-#	$(AM_V_CC)source='membarrier.c' object='strace-membarrier.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-membarrier.obj `if test -f 'membarrier.c'; then $(CYGPATH_W) 'membarrier.c'; else $(CYGPATH_W) '$(srcdir)/membarrier.c'; fi`
-
-strace-memfd_create.o: memfd_create.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-memfd_create.o -MD -MP -MF $(DEPDIR)/strace-memfd_create.Tpo -c -o strace-memfd_create.o `test -f 'memfd_create.c' || echo '$(srcdir)/'`memfd_create.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-memfd_create.Tpo $(DEPDIR)/strace-memfd_create.Po
-#	$(AM_V_CC)source='memfd_create.c' object='strace-memfd_create.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-memfd_create.o `test -f 'memfd_create.c' || echo '$(srcdir)/'`memfd_create.c
-
-strace-memfd_create.obj: memfd_create.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-memfd_create.obj -MD -MP -MF $(DEPDIR)/strace-memfd_create.Tpo -c -o strace-memfd_create.obj `if test -f 'memfd_create.c'; then $(CYGPATH_W) 'memfd_create.c'; else $(CYGPATH_W) '$(srcdir)/memfd_create.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-memfd_create.Tpo $(DEPDIR)/strace-memfd_create.Po
-#	$(AM_V_CC)source='memfd_create.c' object='strace-memfd_create.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-memfd_create.obj `if test -f 'memfd_create.c'; then $(CYGPATH_W) 'memfd_create.c'; else $(CYGPATH_W) '$(srcdir)/memfd_create.c'; fi`
-
-strace-mknod.o: mknod.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mknod.o -MD -MP -MF $(DEPDIR)/strace-mknod.Tpo -c -o strace-mknod.o `test -f 'mknod.c' || echo '$(srcdir)/'`mknod.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mknod.Tpo $(DEPDIR)/strace-mknod.Po
-#	$(AM_V_CC)source='mknod.c' object='strace-mknod.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mknod.o `test -f 'mknod.c' || echo '$(srcdir)/'`mknod.c
-
-strace-mknod.obj: mknod.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mknod.obj -MD -MP -MF $(DEPDIR)/strace-mknod.Tpo -c -o strace-mknod.obj `if test -f 'mknod.c'; then $(CYGPATH_W) 'mknod.c'; else $(CYGPATH_W) '$(srcdir)/mknod.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mknod.Tpo $(DEPDIR)/strace-mknod.Po
-#	$(AM_V_CC)source='mknod.c' object='strace-mknod.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mknod.obj `if test -f 'mknod.c'; then $(CYGPATH_W) 'mknod.c'; else $(CYGPATH_W) '$(srcdir)/mknod.c'; fi`
-
-strace-mmsghdr.o: mmsghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmsghdr.o -MD -MP -MF $(DEPDIR)/strace-mmsghdr.Tpo -c -o strace-mmsghdr.o `test -f 'mmsghdr.c' || echo '$(srcdir)/'`mmsghdr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmsghdr.Tpo $(DEPDIR)/strace-mmsghdr.Po
-#	$(AM_V_CC)source='mmsghdr.c' object='strace-mmsghdr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mmsghdr.o `test -f 'mmsghdr.c' || echo '$(srcdir)/'`mmsghdr.c
-
-strace-mmsghdr.obj: mmsghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmsghdr.obj -MD -MP -MF $(DEPDIR)/strace-mmsghdr.Tpo -c -o strace-mmsghdr.obj `if test -f 'mmsghdr.c'; then $(CYGPATH_W) 'mmsghdr.c'; else $(CYGPATH_W) '$(srcdir)/mmsghdr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmsghdr.Tpo $(DEPDIR)/strace-mmsghdr.Po
-#	$(AM_V_CC)source='mmsghdr.c' object='strace-mmsghdr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mmsghdr.obj `if test -f 'mmsghdr.c'; then $(CYGPATH_W) 'mmsghdr.c'; else $(CYGPATH_W) '$(srcdir)/mmsghdr.c'; fi`
-
-strace-mount.o: mount.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mount.o -MD -MP -MF $(DEPDIR)/strace-mount.Tpo -c -o strace-mount.o `test -f 'mount.c' || echo '$(srcdir)/'`mount.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mount.Tpo $(DEPDIR)/strace-mount.Po
-#	$(AM_V_CC)source='mount.c' object='strace-mount.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mount.o `test -f 'mount.c' || echo '$(srcdir)/'`mount.c
-
-strace-mount.obj: mount.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mount.obj -MD -MP -MF $(DEPDIR)/strace-mount.Tpo -c -o strace-mount.obj `if test -f 'mount.c'; then $(CYGPATH_W) 'mount.c'; else $(CYGPATH_W) '$(srcdir)/mount.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mount.Tpo $(DEPDIR)/strace-mount.Po
-#	$(AM_V_CC)source='mount.c' object='strace-mount.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mount.obj `if test -f 'mount.c'; then $(CYGPATH_W) 'mount.c'; else $(CYGPATH_W) '$(srcdir)/mount.c'; fi`
-
-strace-mq.o: mq.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mq.o -MD -MP -MF $(DEPDIR)/strace-mq.Tpo -c -o strace-mq.o `test -f 'mq.c' || echo '$(srcdir)/'`mq.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mq.Tpo $(DEPDIR)/strace-mq.Po
-#	$(AM_V_CC)source='mq.c' object='strace-mq.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mq.o `test -f 'mq.c' || echo '$(srcdir)/'`mq.c
-
-strace-mq.obj: mq.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mq.obj -MD -MP -MF $(DEPDIR)/strace-mq.Tpo -c -o strace-mq.obj `if test -f 'mq.c'; then $(CYGPATH_W) 'mq.c'; else $(CYGPATH_W) '$(srcdir)/mq.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mq.Tpo $(DEPDIR)/strace-mq.Po
-#	$(AM_V_CC)source='mq.c' object='strace-mq.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mq.obj `if test -f 'mq.c'; then $(CYGPATH_W) 'mq.c'; else $(CYGPATH_W) '$(srcdir)/mq.c'; fi`
-
-strace-msghdr.o: msghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-msghdr.o -MD -MP -MF $(DEPDIR)/strace-msghdr.Tpo -c -o strace-msghdr.o `test -f 'msghdr.c' || echo '$(srcdir)/'`msghdr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-msghdr.Tpo $(DEPDIR)/strace-msghdr.Po
-#	$(AM_V_CC)source='msghdr.c' object='strace-msghdr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-msghdr.o `test -f 'msghdr.c' || echo '$(srcdir)/'`msghdr.c
-
-strace-msghdr.obj: msghdr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-msghdr.obj -MD -MP -MF $(DEPDIR)/strace-msghdr.Tpo -c -o strace-msghdr.obj `if test -f 'msghdr.c'; then $(CYGPATH_W) 'msghdr.c'; else $(CYGPATH_W) '$(srcdir)/msghdr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-msghdr.Tpo $(DEPDIR)/strace-msghdr.Po
-#	$(AM_V_CC)source='msghdr.c' object='strace-msghdr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-msghdr.obj `if test -f 'msghdr.c'; then $(CYGPATH_W) 'msghdr.c'; else $(CYGPATH_W) '$(srcdir)/msghdr.c'; fi`
-
-strace-mtd.o: mtd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mtd.o -MD -MP -MF $(DEPDIR)/strace-mtd.Tpo -c -o strace-mtd.o `test -f 'mtd.c' || echo '$(srcdir)/'`mtd.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mtd.Tpo $(DEPDIR)/strace-mtd.Po
-#	$(AM_V_CC)source='mtd.c' object='strace-mtd.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mtd.o `test -f 'mtd.c' || echo '$(srcdir)/'`mtd.c
-
-strace-mtd.obj: mtd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mtd.obj -MD -MP -MF $(DEPDIR)/strace-mtd.Tpo -c -o strace-mtd.obj `if test -f 'mtd.c'; then $(CYGPATH_W) 'mtd.c'; else $(CYGPATH_W) '$(srcdir)/mtd.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mtd.Tpo $(DEPDIR)/strace-mtd.Po
-#	$(AM_V_CC)source='mtd.c' object='strace-mtd.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mtd.obj `if test -f 'mtd.c'; then $(CYGPATH_W) 'mtd.c'; else $(CYGPATH_W) '$(srcdir)/mtd.c'; fi`
-
-strace-net.o: net.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-net.o -MD -MP -MF $(DEPDIR)/strace-net.Tpo -c -o strace-net.o `test -f 'net.c' || echo '$(srcdir)/'`net.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-net.Tpo $(DEPDIR)/strace-net.Po
-#	$(AM_V_CC)source='net.c' object='strace-net.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-net.o `test -f 'net.c' || echo '$(srcdir)/'`net.c
-
-strace-net.obj: net.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-net.obj -MD -MP -MF $(DEPDIR)/strace-net.Tpo -c -o strace-net.obj `if test -f 'net.c'; then $(CYGPATH_W) 'net.c'; else $(CYGPATH_W) '$(srcdir)/net.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-net.Tpo $(DEPDIR)/strace-net.Po
-#	$(AM_V_CC)source='net.c' object='strace-net.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-net.obj `if test -f 'net.c'; then $(CYGPATH_W) 'net.c'; else $(CYGPATH_W) '$(srcdir)/net.c'; fi`
-
-strace-netlink.o: netlink.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink.o -MD -MP -MF $(DEPDIR)/strace-netlink.Tpo -c -o strace-netlink.o `test -f 'netlink.c' || echo '$(srcdir)/'`netlink.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink.Tpo $(DEPDIR)/strace-netlink.Po
-#	$(AM_V_CC)source='netlink.c' object='strace-netlink.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink.o `test -f 'netlink.c' || echo '$(srcdir)/'`netlink.c
-
-strace-netlink.obj: netlink.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink.obj -MD -MP -MF $(DEPDIR)/strace-netlink.Tpo -c -o strace-netlink.obj `if test -f 'netlink.c'; then $(CYGPATH_W) 'netlink.c'; else $(CYGPATH_W) '$(srcdir)/netlink.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink.Tpo $(DEPDIR)/strace-netlink.Po
-#	$(AM_V_CC)source='netlink.c' object='strace-netlink.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink.obj `if test -f 'netlink.c'; then $(CYGPATH_W) 'netlink.c'; else $(CYGPATH_W) '$(srcdir)/netlink.c'; fi`
-
-strace-nsfs.o: nsfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-nsfs.o -MD -MP -MF $(DEPDIR)/strace-nsfs.Tpo -c -o strace-nsfs.o `test -f 'nsfs.c' || echo '$(srcdir)/'`nsfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-nsfs.Tpo $(DEPDIR)/strace-nsfs.Po
-#	$(AM_V_CC)source='nsfs.c' object='strace-nsfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-nsfs.o `test -f 'nsfs.c' || echo '$(srcdir)/'`nsfs.c
-
-strace-nsfs.obj: nsfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-nsfs.obj -MD -MP -MF $(DEPDIR)/strace-nsfs.Tpo -c -o strace-nsfs.obj `if test -f 'nsfs.c'; then $(CYGPATH_W) 'nsfs.c'; else $(CYGPATH_W) '$(srcdir)/nsfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-nsfs.Tpo $(DEPDIR)/strace-nsfs.Po
-#	$(AM_V_CC)source='nsfs.c' object='strace-nsfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-nsfs.obj `if test -f 'nsfs.c'; then $(CYGPATH_W) 'nsfs.c'; else $(CYGPATH_W) '$(srcdir)/nsfs.c'; fi`
-
-strace-numa.o: numa.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-numa.o -MD -MP -MF $(DEPDIR)/strace-numa.Tpo -c -o strace-numa.o `test -f 'numa.c' || echo '$(srcdir)/'`numa.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-numa.Tpo $(DEPDIR)/strace-numa.Po
-#	$(AM_V_CC)source='numa.c' object='strace-numa.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-numa.o `test -f 'numa.c' || echo '$(srcdir)/'`numa.c
-
-strace-numa.obj: numa.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-numa.obj -MD -MP -MF $(DEPDIR)/strace-numa.Tpo -c -o strace-numa.obj `if test -f 'numa.c'; then $(CYGPATH_W) 'numa.c'; else $(CYGPATH_W) '$(srcdir)/numa.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-numa.Tpo $(DEPDIR)/strace-numa.Po
-#	$(AM_V_CC)source='numa.c' object='strace-numa.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-numa.obj `if test -f 'numa.c'; then $(CYGPATH_W) 'numa.c'; else $(CYGPATH_W) '$(srcdir)/numa.c'; fi`
-
-strace-oldstat.o: oldstat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-oldstat.o -MD -MP -MF $(DEPDIR)/strace-oldstat.Tpo -c -o strace-oldstat.o `test -f 'oldstat.c' || echo '$(srcdir)/'`oldstat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-oldstat.Tpo $(DEPDIR)/strace-oldstat.Po
-#	$(AM_V_CC)source='oldstat.c' object='strace-oldstat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-oldstat.o `test -f 'oldstat.c' || echo '$(srcdir)/'`oldstat.c
-
-strace-oldstat.obj: oldstat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-oldstat.obj -MD -MP -MF $(DEPDIR)/strace-oldstat.Tpo -c -o strace-oldstat.obj `if test -f 'oldstat.c'; then $(CYGPATH_W) 'oldstat.c'; else $(CYGPATH_W) '$(srcdir)/oldstat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-oldstat.Tpo $(DEPDIR)/strace-oldstat.Po
-#	$(AM_V_CC)source='oldstat.c' object='strace-oldstat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-oldstat.obj `if test -f 'oldstat.c'; then $(CYGPATH_W) 'oldstat.c'; else $(CYGPATH_W) '$(srcdir)/oldstat.c'; fi`
-
-strace-open.o: open.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-open.o -MD -MP -MF $(DEPDIR)/strace-open.Tpo -c -o strace-open.o `test -f 'open.c' || echo '$(srcdir)/'`open.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-open.Tpo $(DEPDIR)/strace-open.Po
-#	$(AM_V_CC)source='open.c' object='strace-open.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-open.o `test -f 'open.c' || echo '$(srcdir)/'`open.c
-
-strace-open.obj: open.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-open.obj -MD -MP -MF $(DEPDIR)/strace-open.Tpo -c -o strace-open.obj `if test -f 'open.c'; then $(CYGPATH_W) 'open.c'; else $(CYGPATH_W) '$(srcdir)/open.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-open.Tpo $(DEPDIR)/strace-open.Po
-#	$(AM_V_CC)source='open.c' object='strace-open.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-open.obj `if test -f 'open.c'; then $(CYGPATH_W) 'open.c'; else $(CYGPATH_W) '$(srcdir)/open.c'; fi`
-
-strace-or1k_atomic.o: or1k_atomic.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-or1k_atomic.o -MD -MP -MF $(DEPDIR)/strace-or1k_atomic.Tpo -c -o strace-or1k_atomic.o `test -f 'or1k_atomic.c' || echo '$(srcdir)/'`or1k_atomic.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-or1k_atomic.Tpo $(DEPDIR)/strace-or1k_atomic.Po
-#	$(AM_V_CC)source='or1k_atomic.c' object='strace-or1k_atomic.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-or1k_atomic.o `test -f 'or1k_atomic.c' || echo '$(srcdir)/'`or1k_atomic.c
-
-strace-or1k_atomic.obj: or1k_atomic.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-or1k_atomic.obj -MD -MP -MF $(DEPDIR)/strace-or1k_atomic.Tpo -c -o strace-or1k_atomic.obj `if test -f 'or1k_atomic.c'; then $(CYGPATH_W) 'or1k_atomic.c'; else $(CYGPATH_W) '$(srcdir)/or1k_atomic.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-or1k_atomic.Tpo $(DEPDIR)/strace-or1k_atomic.Po
-#	$(AM_V_CC)source='or1k_atomic.c' object='strace-or1k_atomic.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-or1k_atomic.obj `if test -f 'or1k_atomic.c'; then $(CYGPATH_W) 'or1k_atomic.c'; else $(CYGPATH_W) '$(srcdir)/or1k_atomic.c'; fi`
-
-strace-pathtrace.o: pathtrace.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-pathtrace.o -MD -MP -MF $(DEPDIR)/strace-pathtrace.Tpo -c -o strace-pathtrace.o `test -f 'pathtrace.c' || echo '$(srcdir)/'`pathtrace.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-pathtrace.Tpo $(DEPDIR)/strace-pathtrace.Po
-#	$(AM_V_CC)source='pathtrace.c' object='strace-pathtrace.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-pathtrace.o `test -f 'pathtrace.c' || echo '$(srcdir)/'`pathtrace.c
-
-strace-pathtrace.obj: pathtrace.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-pathtrace.obj -MD -MP -MF $(DEPDIR)/strace-pathtrace.Tpo -c -o strace-pathtrace.obj `if test -f 'pathtrace.c'; then $(CYGPATH_W) 'pathtrace.c'; else $(CYGPATH_W) '$(srcdir)/pathtrace.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-pathtrace.Tpo $(DEPDIR)/strace-pathtrace.Po
-#	$(AM_V_CC)source='pathtrace.c' object='strace-pathtrace.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-pathtrace.obj `if test -f 'pathtrace.c'; then $(CYGPATH_W) 'pathtrace.c'; else $(CYGPATH_W) '$(srcdir)/pathtrace.c'; fi`
-
-strace-perf.o: perf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-perf.o -MD -MP -MF $(DEPDIR)/strace-perf.Tpo -c -o strace-perf.o `test -f 'perf.c' || echo '$(srcdir)/'`perf.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-perf.Tpo $(DEPDIR)/strace-perf.Po
-#	$(AM_V_CC)source='perf.c' object='strace-perf.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-perf.o `test -f 'perf.c' || echo '$(srcdir)/'`perf.c
-
-strace-perf.obj: perf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-perf.obj -MD -MP -MF $(DEPDIR)/strace-perf.Tpo -c -o strace-perf.obj `if test -f 'perf.c'; then $(CYGPATH_W) 'perf.c'; else $(CYGPATH_W) '$(srcdir)/perf.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-perf.Tpo $(DEPDIR)/strace-perf.Po
-#	$(AM_V_CC)source='perf.c' object='strace-perf.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-perf.obj `if test -f 'perf.c'; then $(CYGPATH_W) 'perf.c'; else $(CYGPATH_W) '$(srcdir)/perf.c'; fi`
-
-strace-personality.o: personality.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-personality.o -MD -MP -MF $(DEPDIR)/strace-personality.Tpo -c -o strace-personality.o `test -f 'personality.c' || echo '$(srcdir)/'`personality.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-personality.Tpo $(DEPDIR)/strace-personality.Po
-#	$(AM_V_CC)source='personality.c' object='strace-personality.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-personality.o `test -f 'personality.c' || echo '$(srcdir)/'`personality.c
-
-strace-personality.obj: personality.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-personality.obj -MD -MP -MF $(DEPDIR)/strace-personality.Tpo -c -o strace-personality.obj `if test -f 'personality.c'; then $(CYGPATH_W) 'personality.c'; else $(CYGPATH_W) '$(srcdir)/personality.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-personality.Tpo $(DEPDIR)/strace-personality.Po
-#	$(AM_V_CC)source='personality.c' object='strace-personality.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-personality.obj `if test -f 'personality.c'; then $(CYGPATH_W) 'personality.c'; else $(CYGPATH_W) '$(srcdir)/personality.c'; fi`
-
-strace-pkeys.o: pkeys.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-pkeys.o -MD -MP -MF $(DEPDIR)/strace-pkeys.Tpo -c -o strace-pkeys.o `test -f 'pkeys.c' || echo '$(srcdir)/'`pkeys.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-pkeys.Tpo $(DEPDIR)/strace-pkeys.Po
-#	$(AM_V_CC)source='pkeys.c' object='strace-pkeys.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-pkeys.o `test -f 'pkeys.c' || echo '$(srcdir)/'`pkeys.c
-
-strace-pkeys.obj: pkeys.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-pkeys.obj -MD -MP -MF $(DEPDIR)/strace-pkeys.Tpo -c -o strace-pkeys.obj `if test -f 'pkeys.c'; then $(CYGPATH_W) 'pkeys.c'; else $(CYGPATH_W) '$(srcdir)/pkeys.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-pkeys.Tpo $(DEPDIR)/strace-pkeys.Po
-#	$(AM_V_CC)source='pkeys.c' object='strace-pkeys.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-pkeys.obj `if test -f 'pkeys.c'; then $(CYGPATH_W) 'pkeys.c'; else $(CYGPATH_W) '$(srcdir)/pkeys.c'; fi`
-
-strace-poll.o: poll.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-poll.o -MD -MP -MF $(DEPDIR)/strace-poll.Tpo -c -o strace-poll.o `test -f 'poll.c' || echo '$(srcdir)/'`poll.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-poll.Tpo $(DEPDIR)/strace-poll.Po
-#	$(AM_V_CC)source='poll.c' object='strace-poll.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-poll.o `test -f 'poll.c' || echo '$(srcdir)/'`poll.c
-
-strace-poll.obj: poll.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-poll.obj -MD -MP -MF $(DEPDIR)/strace-poll.Tpo -c -o strace-poll.obj `if test -f 'poll.c'; then $(CYGPATH_W) 'poll.c'; else $(CYGPATH_W) '$(srcdir)/poll.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-poll.Tpo $(DEPDIR)/strace-poll.Po
-#	$(AM_V_CC)source='poll.c' object='strace-poll.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-poll.obj `if test -f 'poll.c'; then $(CYGPATH_W) 'poll.c'; else $(CYGPATH_W) '$(srcdir)/poll.c'; fi`
-
-strace-prctl.o: prctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-prctl.o -MD -MP -MF $(DEPDIR)/strace-prctl.Tpo -c -o strace-prctl.o `test -f 'prctl.c' || echo '$(srcdir)/'`prctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-prctl.Tpo $(DEPDIR)/strace-prctl.Po
-#	$(AM_V_CC)source='prctl.c' object='strace-prctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-prctl.o `test -f 'prctl.c' || echo '$(srcdir)/'`prctl.c
-
-strace-prctl.obj: prctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-prctl.obj -MD -MP -MF $(DEPDIR)/strace-prctl.Tpo -c -o strace-prctl.obj `if test -f 'prctl.c'; then $(CYGPATH_W) 'prctl.c'; else $(CYGPATH_W) '$(srcdir)/prctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-prctl.Tpo $(DEPDIR)/strace-prctl.Po
-#	$(AM_V_CC)source='prctl.c' object='strace-prctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-prctl.obj `if test -f 'prctl.c'; then $(CYGPATH_W) 'prctl.c'; else $(CYGPATH_W) '$(srcdir)/prctl.c'; fi`
-
-strace-print_dev_t.o: print_dev_t.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_dev_t.o -MD -MP -MF $(DEPDIR)/strace-print_dev_t.Tpo -c -o strace-print_dev_t.o `test -f 'print_dev_t.c' || echo '$(srcdir)/'`print_dev_t.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_dev_t.Tpo $(DEPDIR)/strace-print_dev_t.Po
-#	$(AM_V_CC)source='print_dev_t.c' object='strace-print_dev_t.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_dev_t.o `test -f 'print_dev_t.c' || echo '$(srcdir)/'`print_dev_t.c
-
-strace-print_dev_t.obj: print_dev_t.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_dev_t.obj -MD -MP -MF $(DEPDIR)/strace-print_dev_t.Tpo -c -o strace-print_dev_t.obj `if test -f 'print_dev_t.c'; then $(CYGPATH_W) 'print_dev_t.c'; else $(CYGPATH_W) '$(srcdir)/print_dev_t.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_dev_t.Tpo $(DEPDIR)/strace-print_dev_t.Po
-#	$(AM_V_CC)source='print_dev_t.c' object='strace-print_dev_t.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_dev_t.obj `if test -f 'print_dev_t.c'; then $(CYGPATH_W) 'print_dev_t.c'; else $(CYGPATH_W) '$(srcdir)/print_dev_t.c'; fi`
-
-strace-print_mq_attr.o: print_mq_attr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_mq_attr.o -MD -MP -MF $(DEPDIR)/strace-print_mq_attr.Tpo -c -o strace-print_mq_attr.o `test -f 'print_mq_attr.c' || echo '$(srcdir)/'`print_mq_attr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_mq_attr.Tpo $(DEPDIR)/strace-print_mq_attr.Po
-#	$(AM_V_CC)source='print_mq_attr.c' object='strace-print_mq_attr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_mq_attr.o `test -f 'print_mq_attr.c' || echo '$(srcdir)/'`print_mq_attr.c
-
-strace-print_mq_attr.obj: print_mq_attr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_mq_attr.obj -MD -MP -MF $(DEPDIR)/strace-print_mq_attr.Tpo -c -o strace-print_mq_attr.obj `if test -f 'print_mq_attr.c'; then $(CYGPATH_W) 'print_mq_attr.c'; else $(CYGPATH_W) '$(srcdir)/print_mq_attr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_mq_attr.Tpo $(DEPDIR)/strace-print_mq_attr.Po
-#	$(AM_V_CC)source='print_mq_attr.c' object='strace-print_mq_attr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_mq_attr.obj `if test -f 'print_mq_attr.c'; then $(CYGPATH_W) 'print_mq_attr.c'; else $(CYGPATH_W) '$(srcdir)/print_mq_attr.c'; fi`
-
-strace-print_msgbuf.o: print_msgbuf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_msgbuf.o -MD -MP -MF $(DEPDIR)/strace-print_msgbuf.Tpo -c -o strace-print_msgbuf.o `test -f 'print_msgbuf.c' || echo '$(srcdir)/'`print_msgbuf.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_msgbuf.Tpo $(DEPDIR)/strace-print_msgbuf.Po
-#	$(AM_V_CC)source='print_msgbuf.c' object='strace-print_msgbuf.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_msgbuf.o `test -f 'print_msgbuf.c' || echo '$(srcdir)/'`print_msgbuf.c
-
-strace-print_msgbuf.obj: print_msgbuf.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_msgbuf.obj -MD -MP -MF $(DEPDIR)/strace-print_msgbuf.Tpo -c -o strace-print_msgbuf.obj `if test -f 'print_msgbuf.c'; then $(CYGPATH_W) 'print_msgbuf.c'; else $(CYGPATH_W) '$(srcdir)/print_msgbuf.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_msgbuf.Tpo $(DEPDIR)/strace-print_msgbuf.Po
-#	$(AM_V_CC)source='print_msgbuf.c' object='strace-print_msgbuf.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_msgbuf.obj `if test -f 'print_msgbuf.c'; then $(CYGPATH_W) 'print_msgbuf.c'; else $(CYGPATH_W) '$(srcdir)/print_msgbuf.c'; fi`
-
-strace-print_sg_req_info.o: print_sg_req_info.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_sg_req_info.o -MD -MP -MF $(DEPDIR)/strace-print_sg_req_info.Tpo -c -o strace-print_sg_req_info.o `test -f 'print_sg_req_info.c' || echo '$(srcdir)/'`print_sg_req_info.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_sg_req_info.Tpo $(DEPDIR)/strace-print_sg_req_info.Po
-#	$(AM_V_CC)source='print_sg_req_info.c' object='strace-print_sg_req_info.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_sg_req_info.o `test -f 'print_sg_req_info.c' || echo '$(srcdir)/'`print_sg_req_info.c
-
-strace-print_sg_req_info.obj: print_sg_req_info.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_sg_req_info.obj -MD -MP -MF $(DEPDIR)/strace-print_sg_req_info.Tpo -c -o strace-print_sg_req_info.obj `if test -f 'print_sg_req_info.c'; then $(CYGPATH_W) 'print_sg_req_info.c'; else $(CYGPATH_W) '$(srcdir)/print_sg_req_info.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_sg_req_info.Tpo $(DEPDIR)/strace-print_sg_req_info.Po
-#	$(AM_V_CC)source='print_sg_req_info.c' object='strace-print_sg_req_info.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_sg_req_info.obj `if test -f 'print_sg_req_info.c'; then $(CYGPATH_W) 'print_sg_req_info.c'; else $(CYGPATH_W) '$(srcdir)/print_sg_req_info.c'; fi`
-
-strace-print_sigevent.o: print_sigevent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_sigevent.o -MD -MP -MF $(DEPDIR)/strace-print_sigevent.Tpo -c -o strace-print_sigevent.o `test -f 'print_sigevent.c' || echo '$(srcdir)/'`print_sigevent.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_sigevent.Tpo $(DEPDIR)/strace-print_sigevent.Po
-#	$(AM_V_CC)source='print_sigevent.c' object='strace-print_sigevent.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_sigevent.o `test -f 'print_sigevent.c' || echo '$(srcdir)/'`print_sigevent.c
-
-strace-print_sigevent.obj: print_sigevent.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_sigevent.obj -MD -MP -MF $(DEPDIR)/strace-print_sigevent.Tpo -c -o strace-print_sigevent.obj `if test -f 'print_sigevent.c'; then $(CYGPATH_W) 'print_sigevent.c'; else $(CYGPATH_W) '$(srcdir)/print_sigevent.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_sigevent.Tpo $(DEPDIR)/strace-print_sigevent.Po
-#	$(AM_V_CC)source='print_sigevent.c' object='strace-print_sigevent.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_sigevent.obj `if test -f 'print_sigevent.c'; then $(CYGPATH_W) 'print_sigevent.c'; else $(CYGPATH_W) '$(srcdir)/print_sigevent.c'; fi`
-
-strace-print_statfs.o: print_statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_statfs.o -MD -MP -MF $(DEPDIR)/strace-print_statfs.Tpo -c -o strace-print_statfs.o `test -f 'print_statfs.c' || echo '$(srcdir)/'`print_statfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_statfs.Tpo $(DEPDIR)/strace-print_statfs.Po
-#	$(AM_V_CC)source='print_statfs.c' object='strace-print_statfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_statfs.o `test -f 'print_statfs.c' || echo '$(srcdir)/'`print_statfs.c
-
-strace-print_statfs.obj: print_statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_statfs.obj -MD -MP -MF $(DEPDIR)/strace-print_statfs.Tpo -c -o strace-print_statfs.obj `if test -f 'print_statfs.c'; then $(CYGPATH_W) 'print_statfs.c'; else $(CYGPATH_W) '$(srcdir)/print_statfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_statfs.Tpo $(DEPDIR)/strace-print_statfs.Po
-#	$(AM_V_CC)source='print_statfs.c' object='strace-print_statfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_statfs.obj `if test -f 'print_statfs.c'; then $(CYGPATH_W) 'print_statfs.c'; else $(CYGPATH_W) '$(srcdir)/print_statfs.c'; fi`
-
-strace-print_struct_stat.o: print_struct_stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_struct_stat.o -MD -MP -MF $(DEPDIR)/strace-print_struct_stat.Tpo -c -o strace-print_struct_stat.o `test -f 'print_struct_stat.c' || echo '$(srcdir)/'`print_struct_stat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_struct_stat.Tpo $(DEPDIR)/strace-print_struct_stat.Po
-#	$(AM_V_CC)source='print_struct_stat.c' object='strace-print_struct_stat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_struct_stat.o `test -f 'print_struct_stat.c' || echo '$(srcdir)/'`print_struct_stat.c
-
-strace-print_struct_stat.obj: print_struct_stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_struct_stat.obj -MD -MP -MF $(DEPDIR)/strace-print_struct_stat.Tpo -c -o strace-print_struct_stat.obj `if test -f 'print_struct_stat.c'; then $(CYGPATH_W) 'print_struct_stat.c'; else $(CYGPATH_W) '$(srcdir)/print_struct_stat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_struct_stat.Tpo $(DEPDIR)/strace-print_struct_stat.Po
-#	$(AM_V_CC)source='print_struct_stat.c' object='strace-print_struct_stat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_struct_stat.obj `if test -f 'print_struct_stat.c'; then $(CYGPATH_W) 'print_struct_stat.c'; else $(CYGPATH_W) '$(srcdir)/print_struct_stat.c'; fi`
-
-strace-print_time.o: print_time.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_time.o -MD -MP -MF $(DEPDIR)/strace-print_time.Tpo -c -o strace-print_time.o `test -f 'print_time.c' || echo '$(srcdir)/'`print_time.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_time.Tpo $(DEPDIR)/strace-print_time.Po
-#	$(AM_V_CC)source='print_time.c' object='strace-print_time.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_time.o `test -f 'print_time.c' || echo '$(srcdir)/'`print_time.c
-
-strace-print_time.obj: print_time.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_time.obj -MD -MP -MF $(DEPDIR)/strace-print_time.Tpo -c -o strace-print_time.obj `if test -f 'print_time.c'; then $(CYGPATH_W) 'print_time.c'; else $(CYGPATH_W) '$(srcdir)/print_time.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_time.Tpo $(DEPDIR)/strace-print_time.Po
-#	$(AM_V_CC)source='print_time.c' object='strace-print_time.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_time.obj `if test -f 'print_time.c'; then $(CYGPATH_W) 'print_time.c'; else $(CYGPATH_W) '$(srcdir)/print_time.c'; fi`
-
-strace-print_timespec.o: print_timespec.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_timespec.o -MD -MP -MF $(DEPDIR)/strace-print_timespec.Tpo -c -o strace-print_timespec.o `test -f 'print_timespec.c' || echo '$(srcdir)/'`print_timespec.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_timespec.Tpo $(DEPDIR)/strace-print_timespec.Po
-#	$(AM_V_CC)source='print_timespec.c' object='strace-print_timespec.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_timespec.o `test -f 'print_timespec.c' || echo '$(srcdir)/'`print_timespec.c
-
-strace-print_timespec.obj: print_timespec.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_timespec.obj -MD -MP -MF $(DEPDIR)/strace-print_timespec.Tpo -c -o strace-print_timespec.obj `if test -f 'print_timespec.c'; then $(CYGPATH_W) 'print_timespec.c'; else $(CYGPATH_W) '$(srcdir)/print_timespec.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_timespec.Tpo $(DEPDIR)/strace-print_timespec.Po
-#	$(AM_V_CC)source='print_timespec.c' object='strace-print_timespec.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_timespec.obj `if test -f 'print_timespec.c'; then $(CYGPATH_W) 'print_timespec.c'; else $(CYGPATH_W) '$(srcdir)/print_timespec.c'; fi`
-
-strace-print_timeval.o: print_timeval.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_timeval.o -MD -MP -MF $(DEPDIR)/strace-print_timeval.Tpo -c -o strace-print_timeval.o `test -f 'print_timeval.c' || echo '$(srcdir)/'`print_timeval.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_timeval.Tpo $(DEPDIR)/strace-print_timeval.Po
-#	$(AM_V_CC)source='print_timeval.c' object='strace-print_timeval.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_timeval.o `test -f 'print_timeval.c' || echo '$(srcdir)/'`print_timeval.c
-
-strace-print_timeval.obj: print_timeval.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_timeval.obj -MD -MP -MF $(DEPDIR)/strace-print_timeval.Tpo -c -o strace-print_timeval.obj `if test -f 'print_timeval.c'; then $(CYGPATH_W) 'print_timeval.c'; else $(CYGPATH_W) '$(srcdir)/print_timeval.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_timeval.Tpo $(DEPDIR)/strace-print_timeval.Po
-#	$(AM_V_CC)source='print_timeval.c' object='strace-print_timeval.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_timeval.obj `if test -f 'print_timeval.c'; then $(CYGPATH_W) 'print_timeval.c'; else $(CYGPATH_W) '$(srcdir)/print_timeval.c'; fi`
-
-strace-print_timex.o: print_timex.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_timex.o -MD -MP -MF $(DEPDIR)/strace-print_timex.Tpo -c -o strace-print_timex.o `test -f 'print_timex.c' || echo '$(srcdir)/'`print_timex.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_timex.Tpo $(DEPDIR)/strace-print_timex.Po
-#	$(AM_V_CC)source='print_timex.c' object='strace-print_timex.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_timex.o `test -f 'print_timex.c' || echo '$(srcdir)/'`print_timex.c
-
-strace-print_timex.obj: print_timex.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_timex.obj -MD -MP -MF $(DEPDIR)/strace-print_timex.Tpo -c -o strace-print_timex.obj `if test -f 'print_timex.c'; then $(CYGPATH_W) 'print_timex.c'; else $(CYGPATH_W) '$(srcdir)/print_timex.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_timex.Tpo $(DEPDIR)/strace-print_timex.Po
-#	$(AM_V_CC)source='print_timex.c' object='strace-print_timex.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_timex.obj `if test -f 'print_timex.c'; then $(CYGPATH_W) 'print_timex.c'; else $(CYGPATH_W) '$(srcdir)/print_timex.c'; fi`
-
-strace-printmode.o: printmode.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-printmode.o -MD -MP -MF $(DEPDIR)/strace-printmode.Tpo -c -o strace-printmode.o `test -f 'printmode.c' || echo '$(srcdir)/'`printmode.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-printmode.Tpo $(DEPDIR)/strace-printmode.Po
-#	$(AM_V_CC)source='printmode.c' object='strace-printmode.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-printmode.o `test -f 'printmode.c' || echo '$(srcdir)/'`printmode.c
-
-strace-printmode.obj: printmode.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-printmode.obj -MD -MP -MF $(DEPDIR)/strace-printmode.Tpo -c -o strace-printmode.obj `if test -f 'printmode.c'; then $(CYGPATH_W) 'printmode.c'; else $(CYGPATH_W) '$(srcdir)/printmode.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-printmode.Tpo $(DEPDIR)/strace-printmode.Po
-#	$(AM_V_CC)source='printmode.c' object='strace-printmode.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-printmode.obj `if test -f 'printmode.c'; then $(CYGPATH_W) 'printmode.c'; else $(CYGPATH_W) '$(srcdir)/printmode.c'; fi`
-
-strace-printrusage.o: printrusage.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-printrusage.o -MD -MP -MF $(DEPDIR)/strace-printrusage.Tpo -c -o strace-printrusage.o `test -f 'printrusage.c' || echo '$(srcdir)/'`printrusage.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-printrusage.Tpo $(DEPDIR)/strace-printrusage.Po
-#	$(AM_V_CC)source='printrusage.c' object='strace-printrusage.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-printrusage.o `test -f 'printrusage.c' || echo '$(srcdir)/'`printrusage.c
-
-strace-printrusage.obj: printrusage.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-printrusage.obj -MD -MP -MF $(DEPDIR)/strace-printrusage.Tpo -c -o strace-printrusage.obj `if test -f 'printrusage.c'; then $(CYGPATH_W) 'printrusage.c'; else $(CYGPATH_W) '$(srcdir)/printrusage.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-printrusage.Tpo $(DEPDIR)/strace-printrusage.Po
-#	$(AM_V_CC)source='printrusage.c' object='strace-printrusage.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-printrusage.obj `if test -f 'printrusage.c'; then $(CYGPATH_W) 'printrusage.c'; else $(CYGPATH_W) '$(srcdir)/printrusage.c'; fi`
-
-strace-printsiginfo.o: printsiginfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-printsiginfo.o -MD -MP -MF $(DEPDIR)/strace-printsiginfo.Tpo -c -o strace-printsiginfo.o `test -f 'printsiginfo.c' || echo '$(srcdir)/'`printsiginfo.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-printsiginfo.Tpo $(DEPDIR)/strace-printsiginfo.Po
-#	$(AM_V_CC)source='printsiginfo.c' object='strace-printsiginfo.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-printsiginfo.o `test -f 'printsiginfo.c' || echo '$(srcdir)/'`printsiginfo.c
-
-strace-printsiginfo.obj: printsiginfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-printsiginfo.obj -MD -MP -MF $(DEPDIR)/strace-printsiginfo.Tpo -c -o strace-printsiginfo.obj `if test -f 'printsiginfo.c'; then $(CYGPATH_W) 'printsiginfo.c'; else $(CYGPATH_W) '$(srcdir)/printsiginfo.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-printsiginfo.Tpo $(DEPDIR)/strace-printsiginfo.Po
-#	$(AM_V_CC)source='printsiginfo.c' object='strace-printsiginfo.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-printsiginfo.obj `if test -f 'printsiginfo.c'; then $(CYGPATH_W) 'printsiginfo.c'; else $(CYGPATH_W) '$(srcdir)/printsiginfo.c'; fi`
-
-strace-process.o: process.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-process.o -MD -MP -MF $(DEPDIR)/strace-process.Tpo -c -o strace-process.o `test -f 'process.c' || echo '$(srcdir)/'`process.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-process.Tpo $(DEPDIR)/strace-process.Po
-#	$(AM_V_CC)source='process.c' object='strace-process.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-process.o `test -f 'process.c' || echo '$(srcdir)/'`process.c
-
-strace-process.obj: process.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-process.obj -MD -MP -MF $(DEPDIR)/strace-process.Tpo -c -o strace-process.obj `if test -f 'process.c'; then $(CYGPATH_W) 'process.c'; else $(CYGPATH_W) '$(srcdir)/process.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-process.Tpo $(DEPDIR)/strace-process.Po
-#	$(AM_V_CC)source='process.c' object='strace-process.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-process.obj `if test -f 'process.c'; then $(CYGPATH_W) 'process.c'; else $(CYGPATH_W) '$(srcdir)/process.c'; fi`
-
-strace-process_vm.o: process_vm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-process_vm.o -MD -MP -MF $(DEPDIR)/strace-process_vm.Tpo -c -o strace-process_vm.o `test -f 'process_vm.c' || echo '$(srcdir)/'`process_vm.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-process_vm.Tpo $(DEPDIR)/strace-process_vm.Po
-#	$(AM_V_CC)source='process_vm.c' object='strace-process_vm.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-process_vm.o `test -f 'process_vm.c' || echo '$(srcdir)/'`process_vm.c
-
-strace-process_vm.obj: process_vm.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-process_vm.obj -MD -MP -MF $(DEPDIR)/strace-process_vm.Tpo -c -o strace-process_vm.obj `if test -f 'process_vm.c'; then $(CYGPATH_W) 'process_vm.c'; else $(CYGPATH_W) '$(srcdir)/process_vm.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-process_vm.Tpo $(DEPDIR)/strace-process_vm.Po
-#	$(AM_V_CC)source='process_vm.c' object='strace-process_vm.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-process_vm.obj `if test -f 'process_vm.c'; then $(CYGPATH_W) 'process_vm.c'; else $(CYGPATH_W) '$(srcdir)/process_vm.c'; fi`
-
-strace-ptp.o: ptp.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ptp.o -MD -MP -MF $(DEPDIR)/strace-ptp.Tpo -c -o strace-ptp.o `test -f 'ptp.c' || echo '$(srcdir)/'`ptp.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ptp.Tpo $(DEPDIR)/strace-ptp.Po
-#	$(AM_V_CC)source='ptp.c' object='strace-ptp.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ptp.o `test -f 'ptp.c' || echo '$(srcdir)/'`ptp.c
-
-strace-ptp.obj: ptp.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ptp.obj -MD -MP -MF $(DEPDIR)/strace-ptp.Tpo -c -o strace-ptp.obj `if test -f 'ptp.c'; then $(CYGPATH_W) 'ptp.c'; else $(CYGPATH_W) '$(srcdir)/ptp.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ptp.Tpo $(DEPDIR)/strace-ptp.Po
-#	$(AM_V_CC)source='ptp.c' object='strace-ptp.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ptp.obj `if test -f 'ptp.c'; then $(CYGPATH_W) 'ptp.c'; else $(CYGPATH_W) '$(srcdir)/ptp.c'; fi`
-
-strace-qualify.o: qualify.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-qualify.o -MD -MP -MF $(DEPDIR)/strace-qualify.Tpo -c -o strace-qualify.o `test -f 'qualify.c' || echo '$(srcdir)/'`qualify.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-qualify.Tpo $(DEPDIR)/strace-qualify.Po
-#	$(AM_V_CC)source='qualify.c' object='strace-qualify.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-qualify.o `test -f 'qualify.c' || echo '$(srcdir)/'`qualify.c
-
-strace-qualify.obj: qualify.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-qualify.obj -MD -MP -MF $(DEPDIR)/strace-qualify.Tpo -c -o strace-qualify.obj `if test -f 'qualify.c'; then $(CYGPATH_W) 'qualify.c'; else $(CYGPATH_W) '$(srcdir)/qualify.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-qualify.Tpo $(DEPDIR)/strace-qualify.Po
-#	$(AM_V_CC)source='qualify.c' object='strace-qualify.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-qualify.obj `if test -f 'qualify.c'; then $(CYGPATH_W) 'qualify.c'; else $(CYGPATH_W) '$(srcdir)/qualify.c'; fi`
-
-strace-quota.o: quota.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-quota.o -MD -MP -MF $(DEPDIR)/strace-quota.Tpo -c -o strace-quota.o `test -f 'quota.c' || echo '$(srcdir)/'`quota.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-quota.Tpo $(DEPDIR)/strace-quota.Po
-#	$(AM_V_CC)source='quota.c' object='strace-quota.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-quota.o `test -f 'quota.c' || echo '$(srcdir)/'`quota.c
-
-strace-quota.obj: quota.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-quota.obj -MD -MP -MF $(DEPDIR)/strace-quota.Tpo -c -o strace-quota.obj `if test -f 'quota.c'; then $(CYGPATH_W) 'quota.c'; else $(CYGPATH_W) '$(srcdir)/quota.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-quota.Tpo $(DEPDIR)/strace-quota.Po
-#	$(AM_V_CC)source='quota.c' object='strace-quota.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-quota.obj `if test -f 'quota.c'; then $(CYGPATH_W) 'quota.c'; else $(CYGPATH_W) '$(srcdir)/quota.c'; fi`
-
-strace-readahead.o: readahead.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-readahead.o -MD -MP -MF $(DEPDIR)/strace-readahead.Tpo -c -o strace-readahead.o `test -f 'readahead.c' || echo '$(srcdir)/'`readahead.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-readahead.Tpo $(DEPDIR)/strace-readahead.Po
-#	$(AM_V_CC)source='readahead.c' object='strace-readahead.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-readahead.o `test -f 'readahead.c' || echo '$(srcdir)/'`readahead.c
-
-strace-readahead.obj: readahead.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-readahead.obj -MD -MP -MF $(DEPDIR)/strace-readahead.Tpo -c -o strace-readahead.obj `if test -f 'readahead.c'; then $(CYGPATH_W) 'readahead.c'; else $(CYGPATH_W) '$(srcdir)/readahead.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-readahead.Tpo $(DEPDIR)/strace-readahead.Po
-#	$(AM_V_CC)source='readahead.c' object='strace-readahead.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-readahead.obj `if test -f 'readahead.c'; then $(CYGPATH_W) 'readahead.c'; else $(CYGPATH_W) '$(srcdir)/readahead.c'; fi`
-
-strace-readlink.o: readlink.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-readlink.o -MD -MP -MF $(DEPDIR)/strace-readlink.Tpo -c -o strace-readlink.o `test -f 'readlink.c' || echo '$(srcdir)/'`readlink.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-readlink.Tpo $(DEPDIR)/strace-readlink.Po
-#	$(AM_V_CC)source='readlink.c' object='strace-readlink.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-readlink.o `test -f 'readlink.c' || echo '$(srcdir)/'`readlink.c
-
-strace-readlink.obj: readlink.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-readlink.obj -MD -MP -MF $(DEPDIR)/strace-readlink.Tpo -c -o strace-readlink.obj `if test -f 'readlink.c'; then $(CYGPATH_W) 'readlink.c'; else $(CYGPATH_W) '$(srcdir)/readlink.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-readlink.Tpo $(DEPDIR)/strace-readlink.Po
-#	$(AM_V_CC)source='readlink.c' object='strace-readlink.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-readlink.obj `if test -f 'readlink.c'; then $(CYGPATH_W) 'readlink.c'; else $(CYGPATH_W) '$(srcdir)/readlink.c'; fi`
-
-strace-reboot.o: reboot.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-reboot.o -MD -MP -MF $(DEPDIR)/strace-reboot.Tpo -c -o strace-reboot.o `test -f 'reboot.c' || echo '$(srcdir)/'`reboot.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-reboot.Tpo $(DEPDIR)/strace-reboot.Po
-#	$(AM_V_CC)source='reboot.c' object='strace-reboot.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-reboot.o `test -f 'reboot.c' || echo '$(srcdir)/'`reboot.c
-
-strace-reboot.obj: reboot.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-reboot.obj -MD -MP -MF $(DEPDIR)/strace-reboot.Tpo -c -o strace-reboot.obj `if test -f 'reboot.c'; then $(CYGPATH_W) 'reboot.c'; else $(CYGPATH_W) '$(srcdir)/reboot.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-reboot.Tpo $(DEPDIR)/strace-reboot.Po
-#	$(AM_V_CC)source='reboot.c' object='strace-reboot.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-reboot.obj `if test -f 'reboot.c'; then $(CYGPATH_W) 'reboot.c'; else $(CYGPATH_W) '$(srcdir)/reboot.c'; fi`
-
-strace-renameat.o: renameat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-renameat.o -MD -MP -MF $(DEPDIR)/strace-renameat.Tpo -c -o strace-renameat.o `test -f 'renameat.c' || echo '$(srcdir)/'`renameat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-renameat.Tpo $(DEPDIR)/strace-renameat.Po
-#	$(AM_V_CC)source='renameat.c' object='strace-renameat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-renameat.o `test -f 'renameat.c' || echo '$(srcdir)/'`renameat.c
-
-strace-renameat.obj: renameat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-renameat.obj -MD -MP -MF $(DEPDIR)/strace-renameat.Tpo -c -o strace-renameat.obj `if test -f 'renameat.c'; then $(CYGPATH_W) 'renameat.c'; else $(CYGPATH_W) '$(srcdir)/renameat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-renameat.Tpo $(DEPDIR)/strace-renameat.Po
-#	$(AM_V_CC)source='renameat.c' object='strace-renameat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-renameat.obj `if test -f 'renameat.c'; then $(CYGPATH_W) 'renameat.c'; else $(CYGPATH_W) '$(srcdir)/renameat.c'; fi`
-
-strace-resource.o: resource.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-resource.o -MD -MP -MF $(DEPDIR)/strace-resource.Tpo -c -o strace-resource.o `test -f 'resource.c' || echo '$(srcdir)/'`resource.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-resource.Tpo $(DEPDIR)/strace-resource.Po
-#	$(AM_V_CC)source='resource.c' object='strace-resource.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-resource.o `test -f 'resource.c' || echo '$(srcdir)/'`resource.c
-
-strace-resource.obj: resource.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-resource.obj -MD -MP -MF $(DEPDIR)/strace-resource.Tpo -c -o strace-resource.obj `if test -f 'resource.c'; then $(CYGPATH_W) 'resource.c'; else $(CYGPATH_W) '$(srcdir)/resource.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-resource.Tpo $(DEPDIR)/strace-resource.Po
-#	$(AM_V_CC)source='resource.c' object='strace-resource.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-resource.obj `if test -f 'resource.c'; then $(CYGPATH_W) 'resource.c'; else $(CYGPATH_W) '$(srcdir)/resource.c'; fi`
-
-strace-rt_sigframe.o: rt_sigframe.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rt_sigframe.o -MD -MP -MF $(DEPDIR)/strace-rt_sigframe.Tpo -c -o strace-rt_sigframe.o `test -f 'rt_sigframe.c' || echo '$(srcdir)/'`rt_sigframe.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rt_sigframe.Tpo $(DEPDIR)/strace-rt_sigframe.Po
-#	$(AM_V_CC)source='rt_sigframe.c' object='strace-rt_sigframe.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rt_sigframe.o `test -f 'rt_sigframe.c' || echo '$(srcdir)/'`rt_sigframe.c
-
-strace-rt_sigframe.obj: rt_sigframe.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rt_sigframe.obj -MD -MP -MF $(DEPDIR)/strace-rt_sigframe.Tpo -c -o strace-rt_sigframe.obj `if test -f 'rt_sigframe.c'; then $(CYGPATH_W) 'rt_sigframe.c'; else $(CYGPATH_W) '$(srcdir)/rt_sigframe.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rt_sigframe.Tpo $(DEPDIR)/strace-rt_sigframe.Po
-#	$(AM_V_CC)source='rt_sigframe.c' object='strace-rt_sigframe.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rt_sigframe.obj `if test -f 'rt_sigframe.c'; then $(CYGPATH_W) 'rt_sigframe.c'; else $(CYGPATH_W) '$(srcdir)/rt_sigframe.c'; fi`
-
-strace-rt_sigreturn.o: rt_sigreturn.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rt_sigreturn.o -MD -MP -MF $(DEPDIR)/strace-rt_sigreturn.Tpo -c -o strace-rt_sigreturn.o `test -f 'rt_sigreturn.c' || echo '$(srcdir)/'`rt_sigreturn.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rt_sigreturn.Tpo $(DEPDIR)/strace-rt_sigreturn.Po
-#	$(AM_V_CC)source='rt_sigreturn.c' object='strace-rt_sigreturn.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rt_sigreturn.o `test -f 'rt_sigreturn.c' || echo '$(srcdir)/'`rt_sigreturn.c
-
-strace-rt_sigreturn.obj: rt_sigreturn.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rt_sigreturn.obj -MD -MP -MF $(DEPDIR)/strace-rt_sigreturn.Tpo -c -o strace-rt_sigreturn.obj `if test -f 'rt_sigreturn.c'; then $(CYGPATH_W) 'rt_sigreturn.c'; else $(CYGPATH_W) '$(srcdir)/rt_sigreturn.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rt_sigreturn.Tpo $(DEPDIR)/strace-rt_sigreturn.Po
-#	$(AM_V_CC)source='rt_sigreturn.c' object='strace-rt_sigreturn.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rt_sigreturn.obj `if test -f 'rt_sigreturn.c'; then $(CYGPATH_W) 'rt_sigreturn.c'; else $(CYGPATH_W) '$(srcdir)/rt_sigreturn.c'; fi`
-
-strace-rtc.o: rtc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtc.o -MD -MP -MF $(DEPDIR)/strace-rtc.Tpo -c -o strace-rtc.o `test -f 'rtc.c' || echo '$(srcdir)/'`rtc.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtc.Tpo $(DEPDIR)/strace-rtc.Po
-#	$(AM_V_CC)source='rtc.c' object='strace-rtc.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtc.o `test -f 'rtc.c' || echo '$(srcdir)/'`rtc.c
-
-strace-rtc.obj: rtc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtc.obj -MD -MP -MF $(DEPDIR)/strace-rtc.Tpo -c -o strace-rtc.obj `if test -f 'rtc.c'; then $(CYGPATH_W) 'rtc.c'; else $(CYGPATH_W) '$(srcdir)/rtc.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtc.Tpo $(DEPDIR)/strace-rtc.Po
-#	$(AM_V_CC)source='rtc.c' object='strace-rtc.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtc.obj `if test -f 'rtc.c'; then $(CYGPATH_W) 'rtc.c'; else $(CYGPATH_W) '$(srcdir)/rtc.c'; fi`
-
-strace-sched.o: sched.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sched.o -MD -MP -MF $(DEPDIR)/strace-sched.Tpo -c -o strace-sched.o `test -f 'sched.c' || echo '$(srcdir)/'`sched.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sched.Tpo $(DEPDIR)/strace-sched.Po
-#	$(AM_V_CC)source='sched.c' object='strace-sched.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sched.o `test -f 'sched.c' || echo '$(srcdir)/'`sched.c
-
-strace-sched.obj: sched.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sched.obj -MD -MP -MF $(DEPDIR)/strace-sched.Tpo -c -o strace-sched.obj `if test -f 'sched.c'; then $(CYGPATH_W) 'sched.c'; else $(CYGPATH_W) '$(srcdir)/sched.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sched.Tpo $(DEPDIR)/strace-sched.Po
-#	$(AM_V_CC)source='sched.c' object='strace-sched.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sched.obj `if test -f 'sched.c'; then $(CYGPATH_W) 'sched.c'; else $(CYGPATH_W) '$(srcdir)/sched.c'; fi`
-
-strace-scsi.o: scsi.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-scsi.o -MD -MP -MF $(DEPDIR)/strace-scsi.Tpo -c -o strace-scsi.o `test -f 'scsi.c' || echo '$(srcdir)/'`scsi.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-scsi.Tpo $(DEPDIR)/strace-scsi.Po
-#	$(AM_V_CC)source='scsi.c' object='strace-scsi.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-scsi.o `test -f 'scsi.c' || echo '$(srcdir)/'`scsi.c
-
-strace-scsi.obj: scsi.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-scsi.obj -MD -MP -MF $(DEPDIR)/strace-scsi.Tpo -c -o strace-scsi.obj `if test -f 'scsi.c'; then $(CYGPATH_W) 'scsi.c'; else $(CYGPATH_W) '$(srcdir)/scsi.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-scsi.Tpo $(DEPDIR)/strace-scsi.Po
-#	$(AM_V_CC)source='scsi.c' object='strace-scsi.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-scsi.obj `if test -f 'scsi.c'; then $(CYGPATH_W) 'scsi.c'; else $(CYGPATH_W) '$(srcdir)/scsi.c'; fi`
-
-strace-seccomp.o: seccomp.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-seccomp.o -MD -MP -MF $(DEPDIR)/strace-seccomp.Tpo -c -o strace-seccomp.o `test -f 'seccomp.c' || echo '$(srcdir)/'`seccomp.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-seccomp.Tpo $(DEPDIR)/strace-seccomp.Po
-#	$(AM_V_CC)source='seccomp.c' object='strace-seccomp.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-seccomp.o `test -f 'seccomp.c' || echo '$(srcdir)/'`seccomp.c
-
-strace-seccomp.obj: seccomp.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-seccomp.obj -MD -MP -MF $(DEPDIR)/strace-seccomp.Tpo -c -o strace-seccomp.obj `if test -f 'seccomp.c'; then $(CYGPATH_W) 'seccomp.c'; else $(CYGPATH_W) '$(srcdir)/seccomp.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-seccomp.Tpo $(DEPDIR)/strace-seccomp.Po
-#	$(AM_V_CC)source='seccomp.c' object='strace-seccomp.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-seccomp.obj `if test -f 'seccomp.c'; then $(CYGPATH_W) 'seccomp.c'; else $(CYGPATH_W) '$(srcdir)/seccomp.c'; fi`
-
-strace-sendfile.o: sendfile.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sendfile.o -MD -MP -MF $(DEPDIR)/strace-sendfile.Tpo -c -o strace-sendfile.o `test -f 'sendfile.c' || echo '$(srcdir)/'`sendfile.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sendfile.Tpo $(DEPDIR)/strace-sendfile.Po
-#	$(AM_V_CC)source='sendfile.c' object='strace-sendfile.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sendfile.o `test -f 'sendfile.c' || echo '$(srcdir)/'`sendfile.c
-
-strace-sendfile.obj: sendfile.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sendfile.obj -MD -MP -MF $(DEPDIR)/strace-sendfile.Tpo -c -o strace-sendfile.obj `if test -f 'sendfile.c'; then $(CYGPATH_W) 'sendfile.c'; else $(CYGPATH_W) '$(srcdir)/sendfile.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sendfile.Tpo $(DEPDIR)/strace-sendfile.Po
-#	$(AM_V_CC)source='sendfile.c' object='strace-sendfile.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sendfile.obj `if test -f 'sendfile.c'; then $(CYGPATH_W) 'sendfile.c'; else $(CYGPATH_W) '$(srcdir)/sendfile.c'; fi`
-
-strace-sg_io_v3.o: sg_io_v3.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sg_io_v3.o -MD -MP -MF $(DEPDIR)/strace-sg_io_v3.Tpo -c -o strace-sg_io_v3.o `test -f 'sg_io_v3.c' || echo '$(srcdir)/'`sg_io_v3.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sg_io_v3.Tpo $(DEPDIR)/strace-sg_io_v3.Po
-#	$(AM_V_CC)source='sg_io_v3.c' object='strace-sg_io_v3.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sg_io_v3.o `test -f 'sg_io_v3.c' || echo '$(srcdir)/'`sg_io_v3.c
-
-strace-sg_io_v3.obj: sg_io_v3.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sg_io_v3.obj -MD -MP -MF $(DEPDIR)/strace-sg_io_v3.Tpo -c -o strace-sg_io_v3.obj `if test -f 'sg_io_v3.c'; then $(CYGPATH_W) 'sg_io_v3.c'; else $(CYGPATH_W) '$(srcdir)/sg_io_v3.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sg_io_v3.Tpo $(DEPDIR)/strace-sg_io_v3.Po
-#	$(AM_V_CC)source='sg_io_v3.c' object='strace-sg_io_v3.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sg_io_v3.obj `if test -f 'sg_io_v3.c'; then $(CYGPATH_W) 'sg_io_v3.c'; else $(CYGPATH_W) '$(srcdir)/sg_io_v3.c'; fi`
-
-strace-sg_io_v4.o: sg_io_v4.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sg_io_v4.o -MD -MP -MF $(DEPDIR)/strace-sg_io_v4.Tpo -c -o strace-sg_io_v4.o `test -f 'sg_io_v4.c' || echo '$(srcdir)/'`sg_io_v4.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sg_io_v4.Tpo $(DEPDIR)/strace-sg_io_v4.Po
-#	$(AM_V_CC)source='sg_io_v4.c' object='strace-sg_io_v4.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sg_io_v4.o `test -f 'sg_io_v4.c' || echo '$(srcdir)/'`sg_io_v4.c
-
-strace-sg_io_v4.obj: sg_io_v4.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sg_io_v4.obj -MD -MP -MF $(DEPDIR)/strace-sg_io_v4.Tpo -c -o strace-sg_io_v4.obj `if test -f 'sg_io_v4.c'; then $(CYGPATH_W) 'sg_io_v4.c'; else $(CYGPATH_W) '$(srcdir)/sg_io_v4.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sg_io_v4.Tpo $(DEPDIR)/strace-sg_io_v4.Po
-#	$(AM_V_CC)source='sg_io_v4.c' object='strace-sg_io_v4.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sg_io_v4.obj `if test -f 'sg_io_v4.c'; then $(CYGPATH_W) 'sg_io_v4.c'; else $(CYGPATH_W) '$(srcdir)/sg_io_v4.c'; fi`
-
-strace-sigaltstack.o: sigaltstack.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sigaltstack.o -MD -MP -MF $(DEPDIR)/strace-sigaltstack.Tpo -c -o strace-sigaltstack.o `test -f 'sigaltstack.c' || echo '$(srcdir)/'`sigaltstack.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sigaltstack.Tpo $(DEPDIR)/strace-sigaltstack.Po
-#	$(AM_V_CC)source='sigaltstack.c' object='strace-sigaltstack.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sigaltstack.o `test -f 'sigaltstack.c' || echo '$(srcdir)/'`sigaltstack.c
-
-strace-sigaltstack.obj: sigaltstack.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sigaltstack.obj -MD -MP -MF $(DEPDIR)/strace-sigaltstack.Tpo -c -o strace-sigaltstack.obj `if test -f 'sigaltstack.c'; then $(CYGPATH_W) 'sigaltstack.c'; else $(CYGPATH_W) '$(srcdir)/sigaltstack.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sigaltstack.Tpo $(DEPDIR)/strace-sigaltstack.Po
-#	$(AM_V_CC)source='sigaltstack.c' object='strace-sigaltstack.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sigaltstack.obj `if test -f 'sigaltstack.c'; then $(CYGPATH_W) 'sigaltstack.c'; else $(CYGPATH_W) '$(srcdir)/sigaltstack.c'; fi`
-
-strace-signal.o: signal.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-signal.o -MD -MP -MF $(DEPDIR)/strace-signal.Tpo -c -o strace-signal.o `test -f 'signal.c' || echo '$(srcdir)/'`signal.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-signal.Tpo $(DEPDIR)/strace-signal.Po
-#	$(AM_V_CC)source='signal.c' object='strace-signal.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-signal.o `test -f 'signal.c' || echo '$(srcdir)/'`signal.c
-
-strace-signal.obj: signal.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-signal.obj -MD -MP -MF $(DEPDIR)/strace-signal.Tpo -c -o strace-signal.obj `if test -f 'signal.c'; then $(CYGPATH_W) 'signal.c'; else $(CYGPATH_W) '$(srcdir)/signal.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-signal.Tpo $(DEPDIR)/strace-signal.Po
-#	$(AM_V_CC)source='signal.c' object='strace-signal.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-signal.obj `if test -f 'signal.c'; then $(CYGPATH_W) 'signal.c'; else $(CYGPATH_W) '$(srcdir)/signal.c'; fi`
-
-strace-signalfd.o: signalfd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-signalfd.o -MD -MP -MF $(DEPDIR)/strace-signalfd.Tpo -c -o strace-signalfd.o `test -f 'signalfd.c' || echo '$(srcdir)/'`signalfd.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-signalfd.Tpo $(DEPDIR)/strace-signalfd.Po
-#	$(AM_V_CC)source='signalfd.c' object='strace-signalfd.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-signalfd.o `test -f 'signalfd.c' || echo '$(srcdir)/'`signalfd.c
-
-strace-signalfd.obj: signalfd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-signalfd.obj -MD -MP -MF $(DEPDIR)/strace-signalfd.Tpo -c -o strace-signalfd.obj `if test -f 'signalfd.c'; then $(CYGPATH_W) 'signalfd.c'; else $(CYGPATH_W) '$(srcdir)/signalfd.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-signalfd.Tpo $(DEPDIR)/strace-signalfd.Po
-#	$(AM_V_CC)source='signalfd.c' object='strace-signalfd.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-signalfd.obj `if test -f 'signalfd.c'; then $(CYGPATH_W) 'signalfd.c'; else $(CYGPATH_W) '$(srcdir)/signalfd.c'; fi`
-
-strace-sock.o: sock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sock.o -MD -MP -MF $(DEPDIR)/strace-sock.Tpo -c -o strace-sock.o `test -f 'sock.c' || echo '$(srcdir)/'`sock.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sock.Tpo $(DEPDIR)/strace-sock.Po
-#	$(AM_V_CC)source='sock.c' object='strace-sock.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sock.o `test -f 'sock.c' || echo '$(srcdir)/'`sock.c
-
-strace-sock.obj: sock.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sock.obj -MD -MP -MF $(DEPDIR)/strace-sock.Tpo -c -o strace-sock.obj `if test -f 'sock.c'; then $(CYGPATH_W) 'sock.c'; else $(CYGPATH_W) '$(srcdir)/sock.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sock.Tpo $(DEPDIR)/strace-sock.Po
-#	$(AM_V_CC)source='sock.c' object='strace-sock.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sock.obj `if test -f 'sock.c'; then $(CYGPATH_W) 'sock.c'; else $(CYGPATH_W) '$(srcdir)/sock.c'; fi`
-
-strace-sockaddr.o: sockaddr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sockaddr.o -MD -MP -MF $(DEPDIR)/strace-sockaddr.Tpo -c -o strace-sockaddr.o `test -f 'sockaddr.c' || echo '$(srcdir)/'`sockaddr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sockaddr.Tpo $(DEPDIR)/strace-sockaddr.Po
-#	$(AM_V_CC)source='sockaddr.c' object='strace-sockaddr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sockaddr.o `test -f 'sockaddr.c' || echo '$(srcdir)/'`sockaddr.c
-
-strace-sockaddr.obj: sockaddr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sockaddr.obj -MD -MP -MF $(DEPDIR)/strace-sockaddr.Tpo -c -o strace-sockaddr.obj `if test -f 'sockaddr.c'; then $(CYGPATH_W) 'sockaddr.c'; else $(CYGPATH_W) '$(srcdir)/sockaddr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sockaddr.Tpo $(DEPDIR)/strace-sockaddr.Po
-#	$(AM_V_CC)source='sockaddr.c' object='strace-sockaddr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sockaddr.obj `if test -f 'sockaddr.c'; then $(CYGPATH_W) 'sockaddr.c'; else $(CYGPATH_W) '$(srcdir)/sockaddr.c'; fi`
-
-strace-socketutils.o: socketutils.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-socketutils.o -MD -MP -MF $(DEPDIR)/strace-socketutils.Tpo -c -o strace-socketutils.o `test -f 'socketutils.c' || echo '$(srcdir)/'`socketutils.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-socketutils.Tpo $(DEPDIR)/strace-socketutils.Po
-#	$(AM_V_CC)source='socketutils.c' object='strace-socketutils.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-socketutils.o `test -f 'socketutils.c' || echo '$(srcdir)/'`socketutils.c
-
-strace-socketutils.obj: socketutils.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-socketutils.obj -MD -MP -MF $(DEPDIR)/strace-socketutils.Tpo -c -o strace-socketutils.obj `if test -f 'socketutils.c'; then $(CYGPATH_W) 'socketutils.c'; else $(CYGPATH_W) '$(srcdir)/socketutils.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-socketutils.Tpo $(DEPDIR)/strace-socketutils.Po
-#	$(AM_V_CC)source='socketutils.c' object='strace-socketutils.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-socketutils.obj `if test -f 'socketutils.c'; then $(CYGPATH_W) 'socketutils.c'; else $(CYGPATH_W) '$(srcdir)/socketutils.c'; fi`
-
-strace-sram_alloc.o: sram_alloc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sram_alloc.o -MD -MP -MF $(DEPDIR)/strace-sram_alloc.Tpo -c -o strace-sram_alloc.o `test -f 'sram_alloc.c' || echo '$(srcdir)/'`sram_alloc.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sram_alloc.Tpo $(DEPDIR)/strace-sram_alloc.Po
-#	$(AM_V_CC)source='sram_alloc.c' object='strace-sram_alloc.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sram_alloc.o `test -f 'sram_alloc.c' || echo '$(srcdir)/'`sram_alloc.c
-
-strace-sram_alloc.obj: sram_alloc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sram_alloc.obj -MD -MP -MF $(DEPDIR)/strace-sram_alloc.Tpo -c -o strace-sram_alloc.obj `if test -f 'sram_alloc.c'; then $(CYGPATH_W) 'sram_alloc.c'; else $(CYGPATH_W) '$(srcdir)/sram_alloc.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sram_alloc.Tpo $(DEPDIR)/strace-sram_alloc.Po
-#	$(AM_V_CC)source='sram_alloc.c' object='strace-sram_alloc.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sram_alloc.obj `if test -f 'sram_alloc.c'; then $(CYGPATH_W) 'sram_alloc.c'; else $(CYGPATH_W) '$(srcdir)/sram_alloc.c'; fi`
-
-strace-stat.o: stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-stat.o -MD -MP -MF $(DEPDIR)/strace-stat.Tpo -c -o strace-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-stat.Tpo $(DEPDIR)/strace-stat.Po
-#	$(AM_V_CC)source='stat.c' object='strace-stat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c
-
-strace-stat.obj: stat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-stat.obj -MD -MP -MF $(DEPDIR)/strace-stat.Tpo -c -o strace-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-stat.Tpo $(DEPDIR)/strace-stat.Po
-#	$(AM_V_CC)source='stat.c' object='strace-stat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi`
-
-strace-stat64.o: stat64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-stat64.o -MD -MP -MF $(DEPDIR)/strace-stat64.Tpo -c -o strace-stat64.o `test -f 'stat64.c' || echo '$(srcdir)/'`stat64.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-stat64.Tpo $(DEPDIR)/strace-stat64.Po
-#	$(AM_V_CC)source='stat64.c' object='strace-stat64.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-stat64.o `test -f 'stat64.c' || echo '$(srcdir)/'`stat64.c
-
-strace-stat64.obj: stat64.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-stat64.obj -MD -MP -MF $(DEPDIR)/strace-stat64.Tpo -c -o strace-stat64.obj `if test -f 'stat64.c'; then $(CYGPATH_W) 'stat64.c'; else $(CYGPATH_W) '$(srcdir)/stat64.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-stat64.Tpo $(DEPDIR)/strace-stat64.Po
-#	$(AM_V_CC)source='stat64.c' object='strace-stat64.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-stat64.obj `if test -f 'stat64.c'; then $(CYGPATH_W) 'stat64.c'; else $(CYGPATH_W) '$(srcdir)/stat64.c'; fi`
-
-strace-statfs.o: statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-statfs.o -MD -MP -MF $(DEPDIR)/strace-statfs.Tpo -c -o strace-statfs.o `test -f 'statfs.c' || echo '$(srcdir)/'`statfs.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-statfs.Tpo $(DEPDIR)/strace-statfs.Po
-#	$(AM_V_CC)source='statfs.c' object='strace-statfs.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-statfs.o `test -f 'statfs.c' || echo '$(srcdir)/'`statfs.c
-
-strace-statfs.obj: statfs.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-statfs.obj -MD -MP -MF $(DEPDIR)/strace-statfs.Tpo -c -o strace-statfs.obj `if test -f 'statfs.c'; then $(CYGPATH_W) 'statfs.c'; else $(CYGPATH_W) '$(srcdir)/statfs.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-statfs.Tpo $(DEPDIR)/strace-statfs.Po
-#	$(AM_V_CC)source='statfs.c' object='strace-statfs.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-statfs.obj `if test -f 'statfs.c'; then $(CYGPATH_W) 'statfs.c'; else $(CYGPATH_W) '$(srcdir)/statfs.c'; fi`
-
-strace-statx.o: statx.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-statx.o -MD -MP -MF $(DEPDIR)/strace-statx.Tpo -c -o strace-statx.o `test -f 'statx.c' || echo '$(srcdir)/'`statx.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-statx.Tpo $(DEPDIR)/strace-statx.Po
-#	$(AM_V_CC)source='statx.c' object='strace-statx.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-statx.o `test -f 'statx.c' || echo '$(srcdir)/'`statx.c
-
-strace-statx.obj: statx.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-statx.obj -MD -MP -MF $(DEPDIR)/strace-statx.Tpo -c -o strace-statx.obj `if test -f 'statx.c'; then $(CYGPATH_W) 'statx.c'; else $(CYGPATH_W) '$(srcdir)/statx.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-statx.Tpo $(DEPDIR)/strace-statx.Po
-#	$(AM_V_CC)source='statx.c' object='strace-statx.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-statx.obj `if test -f 'statx.c'; then $(CYGPATH_W) 'statx.c'; else $(CYGPATH_W) '$(srcdir)/statx.c'; fi`
-
-strace-strace.o: strace.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-strace.o -MD -MP -MF $(DEPDIR)/strace-strace.Tpo -c -o strace-strace.o `test -f 'strace.c' || echo '$(srcdir)/'`strace.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-strace.Tpo $(DEPDIR)/strace-strace.Po
-#	$(AM_V_CC)source='strace.c' object='strace-strace.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-strace.o `test -f 'strace.c' || echo '$(srcdir)/'`strace.c
-
-strace-strace.obj: strace.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-strace.obj -MD -MP -MF $(DEPDIR)/strace-strace.Tpo -c -o strace-strace.obj `if test -f 'strace.c'; then $(CYGPATH_W) 'strace.c'; else $(CYGPATH_W) '$(srcdir)/strace.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-strace.Tpo $(DEPDIR)/strace-strace.Po
-#	$(AM_V_CC)source='strace.c' object='strace-strace.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-strace.obj `if test -f 'strace.c'; then $(CYGPATH_W) 'strace.c'; else $(CYGPATH_W) '$(srcdir)/strace.c'; fi`
-
-strace-swapon.o: swapon.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-swapon.o -MD -MP -MF $(DEPDIR)/strace-swapon.Tpo -c -o strace-swapon.o `test -f 'swapon.c' || echo '$(srcdir)/'`swapon.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-swapon.Tpo $(DEPDIR)/strace-swapon.Po
-#	$(AM_V_CC)source='swapon.c' object='strace-swapon.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-swapon.o `test -f 'swapon.c' || echo '$(srcdir)/'`swapon.c
-
-strace-swapon.obj: swapon.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-swapon.obj -MD -MP -MF $(DEPDIR)/strace-swapon.Tpo -c -o strace-swapon.obj `if test -f 'swapon.c'; then $(CYGPATH_W) 'swapon.c'; else $(CYGPATH_W) '$(srcdir)/swapon.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-swapon.Tpo $(DEPDIR)/strace-swapon.Po
-#	$(AM_V_CC)source='swapon.c' object='strace-swapon.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-swapon.obj `if test -f 'swapon.c'; then $(CYGPATH_W) 'swapon.c'; else $(CYGPATH_W) '$(srcdir)/swapon.c'; fi`
-
-strace-syscall.o: syscall.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-syscall.o -MD -MP -MF $(DEPDIR)/strace-syscall.Tpo -c -o strace-syscall.o `test -f 'syscall.c' || echo '$(srcdir)/'`syscall.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-syscall.Tpo $(DEPDIR)/strace-syscall.Po
-#	$(AM_V_CC)source='syscall.c' object='strace-syscall.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-syscall.o `test -f 'syscall.c' || echo '$(srcdir)/'`syscall.c
-
-strace-syscall.obj: syscall.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-syscall.obj -MD -MP -MF $(DEPDIR)/strace-syscall.Tpo -c -o strace-syscall.obj `if test -f 'syscall.c'; then $(CYGPATH_W) 'syscall.c'; else $(CYGPATH_W) '$(srcdir)/syscall.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-syscall.Tpo $(DEPDIR)/strace-syscall.Po
-#	$(AM_V_CC)source='syscall.c' object='strace-syscall.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-syscall.obj `if test -f 'syscall.c'; then $(CYGPATH_W) 'syscall.c'; else $(CYGPATH_W) '$(srcdir)/syscall.c'; fi`
-
-strace-sysctl.o: sysctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sysctl.o -MD -MP -MF $(DEPDIR)/strace-sysctl.Tpo -c -o strace-sysctl.o `test -f 'sysctl.c' || echo '$(srcdir)/'`sysctl.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sysctl.Tpo $(DEPDIR)/strace-sysctl.Po
-#	$(AM_V_CC)source='sysctl.c' object='strace-sysctl.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sysctl.o `test -f 'sysctl.c' || echo '$(srcdir)/'`sysctl.c
-
-strace-sysctl.obj: sysctl.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sysctl.obj -MD -MP -MF $(DEPDIR)/strace-sysctl.Tpo -c -o strace-sysctl.obj `if test -f 'sysctl.c'; then $(CYGPATH_W) 'sysctl.c'; else $(CYGPATH_W) '$(srcdir)/sysctl.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sysctl.Tpo $(DEPDIR)/strace-sysctl.Po
-#	$(AM_V_CC)source='sysctl.c' object='strace-sysctl.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sysctl.obj `if test -f 'sysctl.c'; then $(CYGPATH_W) 'sysctl.c'; else $(CYGPATH_W) '$(srcdir)/sysctl.c'; fi`
-
-strace-sysinfo.o: sysinfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sysinfo.o -MD -MP -MF $(DEPDIR)/strace-sysinfo.Tpo -c -o strace-sysinfo.o `test -f 'sysinfo.c' || echo '$(srcdir)/'`sysinfo.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sysinfo.Tpo $(DEPDIR)/strace-sysinfo.Po
-#	$(AM_V_CC)source='sysinfo.c' object='strace-sysinfo.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sysinfo.o `test -f 'sysinfo.c' || echo '$(srcdir)/'`sysinfo.c
-
-strace-sysinfo.obj: sysinfo.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sysinfo.obj -MD -MP -MF $(DEPDIR)/strace-sysinfo.Tpo -c -o strace-sysinfo.obj `if test -f 'sysinfo.c'; then $(CYGPATH_W) 'sysinfo.c'; else $(CYGPATH_W) '$(srcdir)/sysinfo.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sysinfo.Tpo $(DEPDIR)/strace-sysinfo.Po
-#	$(AM_V_CC)source='sysinfo.c' object='strace-sysinfo.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sysinfo.obj `if test -f 'sysinfo.c'; then $(CYGPATH_W) 'sysinfo.c'; else $(CYGPATH_W) '$(srcdir)/sysinfo.c'; fi`
-
-strace-syslog.o: syslog.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-syslog.o -MD -MP -MF $(DEPDIR)/strace-syslog.Tpo -c -o strace-syslog.o `test -f 'syslog.c' || echo '$(srcdir)/'`syslog.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-syslog.Tpo $(DEPDIR)/strace-syslog.Po
-#	$(AM_V_CC)source='syslog.c' object='strace-syslog.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-syslog.o `test -f 'syslog.c' || echo '$(srcdir)/'`syslog.c
-
-strace-syslog.obj: syslog.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-syslog.obj -MD -MP -MF $(DEPDIR)/strace-syslog.Tpo -c -o strace-syslog.obj `if test -f 'syslog.c'; then $(CYGPATH_W) 'syslog.c'; else $(CYGPATH_W) '$(srcdir)/syslog.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-syslog.Tpo $(DEPDIR)/strace-syslog.Po
-#	$(AM_V_CC)source='syslog.c' object='strace-syslog.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-syslog.obj `if test -f 'syslog.c'; then $(CYGPATH_W) 'syslog.c'; else $(CYGPATH_W) '$(srcdir)/syslog.c'; fi`
-
-strace-sysmips.o: sysmips.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sysmips.o -MD -MP -MF $(DEPDIR)/strace-sysmips.Tpo -c -o strace-sysmips.o `test -f 'sysmips.c' || echo '$(srcdir)/'`sysmips.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sysmips.Tpo $(DEPDIR)/strace-sysmips.Po
-#	$(AM_V_CC)source='sysmips.c' object='strace-sysmips.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sysmips.o `test -f 'sysmips.c' || echo '$(srcdir)/'`sysmips.c
-
-strace-sysmips.obj: sysmips.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sysmips.obj -MD -MP -MF $(DEPDIR)/strace-sysmips.Tpo -c -o strace-sysmips.obj `if test -f 'sysmips.c'; then $(CYGPATH_W) 'sysmips.c'; else $(CYGPATH_W) '$(srcdir)/sysmips.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sysmips.Tpo $(DEPDIR)/strace-sysmips.Po
-#	$(AM_V_CC)source='sysmips.c' object='strace-sysmips.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sysmips.obj `if test -f 'sysmips.c'; then $(CYGPATH_W) 'sysmips.c'; else $(CYGPATH_W) '$(srcdir)/sysmips.c'; fi`
-
-strace-term.o: term.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-term.o -MD -MP -MF $(DEPDIR)/strace-term.Tpo -c -o strace-term.o `test -f 'term.c' || echo '$(srcdir)/'`term.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-term.Tpo $(DEPDIR)/strace-term.Po
-#	$(AM_V_CC)source='term.c' object='strace-term.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-term.o `test -f 'term.c' || echo '$(srcdir)/'`term.c
-
-strace-term.obj: term.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-term.obj -MD -MP -MF $(DEPDIR)/strace-term.Tpo -c -o strace-term.obj `if test -f 'term.c'; then $(CYGPATH_W) 'term.c'; else $(CYGPATH_W) '$(srcdir)/term.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-term.Tpo $(DEPDIR)/strace-term.Po
-#	$(AM_V_CC)source='term.c' object='strace-term.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-term.obj `if test -f 'term.c'; then $(CYGPATH_W) 'term.c'; else $(CYGPATH_W) '$(srcdir)/term.c'; fi`
-
-strace-time.o: time.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-time.o -MD -MP -MF $(DEPDIR)/strace-time.Tpo -c -o strace-time.o `test -f 'time.c' || echo '$(srcdir)/'`time.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-time.Tpo $(DEPDIR)/strace-time.Po
-#	$(AM_V_CC)source='time.c' object='strace-time.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-time.o `test -f 'time.c' || echo '$(srcdir)/'`time.c
-
-strace-time.obj: time.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-time.obj -MD -MP -MF $(DEPDIR)/strace-time.Tpo -c -o strace-time.obj `if test -f 'time.c'; then $(CYGPATH_W) 'time.c'; else $(CYGPATH_W) '$(srcdir)/time.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-time.Tpo $(DEPDIR)/strace-time.Po
-#	$(AM_V_CC)source='time.c' object='strace-time.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-time.obj `if test -f 'time.c'; then $(CYGPATH_W) 'time.c'; else $(CYGPATH_W) '$(srcdir)/time.c'; fi`
-
-strace-times.o: times.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-times.o -MD -MP -MF $(DEPDIR)/strace-times.Tpo -c -o strace-times.o `test -f 'times.c' || echo '$(srcdir)/'`times.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-times.Tpo $(DEPDIR)/strace-times.Po
-#	$(AM_V_CC)source='times.c' object='strace-times.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-times.o `test -f 'times.c' || echo '$(srcdir)/'`times.c
-
-strace-times.obj: times.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-times.obj -MD -MP -MF $(DEPDIR)/strace-times.Tpo -c -o strace-times.obj `if test -f 'times.c'; then $(CYGPATH_W) 'times.c'; else $(CYGPATH_W) '$(srcdir)/times.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-times.Tpo $(DEPDIR)/strace-times.Po
-#	$(AM_V_CC)source='times.c' object='strace-times.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-times.obj `if test -f 'times.c'; then $(CYGPATH_W) 'times.c'; else $(CYGPATH_W) '$(srcdir)/times.c'; fi`
-
-strace-truncate.o: truncate.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-truncate.o -MD -MP -MF $(DEPDIR)/strace-truncate.Tpo -c -o strace-truncate.o `test -f 'truncate.c' || echo '$(srcdir)/'`truncate.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-truncate.Tpo $(DEPDIR)/strace-truncate.Po
-#	$(AM_V_CC)source='truncate.c' object='strace-truncate.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-truncate.o `test -f 'truncate.c' || echo '$(srcdir)/'`truncate.c
-
-strace-truncate.obj: truncate.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-truncate.obj -MD -MP -MF $(DEPDIR)/strace-truncate.Tpo -c -o strace-truncate.obj `if test -f 'truncate.c'; then $(CYGPATH_W) 'truncate.c'; else $(CYGPATH_W) '$(srcdir)/truncate.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-truncate.Tpo $(DEPDIR)/strace-truncate.Po
-#	$(AM_V_CC)source='truncate.c' object='strace-truncate.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-truncate.obj `if test -f 'truncate.c'; then $(CYGPATH_W) 'truncate.c'; else $(CYGPATH_W) '$(srcdir)/truncate.c'; fi`
-
-strace-ubi.o: ubi.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ubi.o -MD -MP -MF $(DEPDIR)/strace-ubi.Tpo -c -o strace-ubi.o `test -f 'ubi.c' || echo '$(srcdir)/'`ubi.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ubi.Tpo $(DEPDIR)/strace-ubi.Po
-#	$(AM_V_CC)source='ubi.c' object='strace-ubi.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ubi.o `test -f 'ubi.c' || echo '$(srcdir)/'`ubi.c
-
-strace-ubi.obj: ubi.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ubi.obj -MD -MP -MF $(DEPDIR)/strace-ubi.Tpo -c -o strace-ubi.obj `if test -f 'ubi.c'; then $(CYGPATH_W) 'ubi.c'; else $(CYGPATH_W) '$(srcdir)/ubi.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ubi.Tpo $(DEPDIR)/strace-ubi.Po
-#	$(AM_V_CC)source='ubi.c' object='strace-ubi.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ubi.obj `if test -f 'ubi.c'; then $(CYGPATH_W) 'ubi.c'; else $(CYGPATH_W) '$(srcdir)/ubi.c'; fi`
-
-strace-uid.o: uid.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-uid.o -MD -MP -MF $(DEPDIR)/strace-uid.Tpo -c -o strace-uid.o `test -f 'uid.c' || echo '$(srcdir)/'`uid.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-uid.Tpo $(DEPDIR)/strace-uid.Po
-#	$(AM_V_CC)source='uid.c' object='strace-uid.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-uid.o `test -f 'uid.c' || echo '$(srcdir)/'`uid.c
-
-strace-uid.obj: uid.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-uid.obj -MD -MP -MF $(DEPDIR)/strace-uid.Tpo -c -o strace-uid.obj `if test -f 'uid.c'; then $(CYGPATH_W) 'uid.c'; else $(CYGPATH_W) '$(srcdir)/uid.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-uid.Tpo $(DEPDIR)/strace-uid.Po
-#	$(AM_V_CC)source='uid.c' object='strace-uid.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-uid.obj `if test -f 'uid.c'; then $(CYGPATH_W) 'uid.c'; else $(CYGPATH_W) '$(srcdir)/uid.c'; fi`
-
-strace-uid16.o: uid16.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-uid16.o -MD -MP -MF $(DEPDIR)/strace-uid16.Tpo -c -o strace-uid16.o `test -f 'uid16.c' || echo '$(srcdir)/'`uid16.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-uid16.Tpo $(DEPDIR)/strace-uid16.Po
-#	$(AM_V_CC)source='uid16.c' object='strace-uid16.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-uid16.o `test -f 'uid16.c' || echo '$(srcdir)/'`uid16.c
-
-strace-uid16.obj: uid16.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-uid16.obj -MD -MP -MF $(DEPDIR)/strace-uid16.Tpo -c -o strace-uid16.obj `if test -f 'uid16.c'; then $(CYGPATH_W) 'uid16.c'; else $(CYGPATH_W) '$(srcdir)/uid16.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-uid16.Tpo $(DEPDIR)/strace-uid16.Po
-#	$(AM_V_CC)source='uid16.c' object='strace-uid16.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-uid16.obj `if test -f 'uid16.c'; then $(CYGPATH_W) 'uid16.c'; else $(CYGPATH_W) '$(srcdir)/uid16.c'; fi`
-
-strace-umask.o: umask.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-umask.o -MD -MP -MF $(DEPDIR)/strace-umask.Tpo -c -o strace-umask.o `test -f 'umask.c' || echo '$(srcdir)/'`umask.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-umask.Tpo $(DEPDIR)/strace-umask.Po
-#	$(AM_V_CC)source='umask.c' object='strace-umask.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-umask.o `test -f 'umask.c' || echo '$(srcdir)/'`umask.c
-
-strace-umask.obj: umask.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-umask.obj -MD -MP -MF $(DEPDIR)/strace-umask.Tpo -c -o strace-umask.obj `if test -f 'umask.c'; then $(CYGPATH_W) 'umask.c'; else $(CYGPATH_W) '$(srcdir)/umask.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-umask.Tpo $(DEPDIR)/strace-umask.Po
-#	$(AM_V_CC)source='umask.c' object='strace-umask.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-umask.obj `if test -f 'umask.c'; then $(CYGPATH_W) 'umask.c'; else $(CYGPATH_W) '$(srcdir)/umask.c'; fi`
-
-strace-umount.o: umount.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-umount.o -MD -MP -MF $(DEPDIR)/strace-umount.Tpo -c -o strace-umount.o `test -f 'umount.c' || echo '$(srcdir)/'`umount.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-umount.Tpo $(DEPDIR)/strace-umount.Po
-#	$(AM_V_CC)source='umount.c' object='strace-umount.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-umount.o `test -f 'umount.c' || echo '$(srcdir)/'`umount.c
-
-strace-umount.obj: umount.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-umount.obj -MD -MP -MF $(DEPDIR)/strace-umount.Tpo -c -o strace-umount.obj `if test -f 'umount.c'; then $(CYGPATH_W) 'umount.c'; else $(CYGPATH_W) '$(srcdir)/umount.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-umount.Tpo $(DEPDIR)/strace-umount.Po
-#	$(AM_V_CC)source='umount.c' object='strace-umount.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-umount.obj `if test -f 'umount.c'; then $(CYGPATH_W) 'umount.c'; else $(CYGPATH_W) '$(srcdir)/umount.c'; fi`
-
-strace-uname.o: uname.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-uname.o -MD -MP -MF $(DEPDIR)/strace-uname.Tpo -c -o strace-uname.o `test -f 'uname.c' || echo '$(srcdir)/'`uname.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-uname.Tpo $(DEPDIR)/strace-uname.Po
-#	$(AM_V_CC)source='uname.c' object='strace-uname.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-uname.o `test -f 'uname.c' || echo '$(srcdir)/'`uname.c
-
-strace-uname.obj: uname.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-uname.obj -MD -MP -MF $(DEPDIR)/strace-uname.Tpo -c -o strace-uname.obj `if test -f 'uname.c'; then $(CYGPATH_W) 'uname.c'; else $(CYGPATH_W) '$(srcdir)/uname.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-uname.Tpo $(DEPDIR)/strace-uname.Po
-#	$(AM_V_CC)source='uname.c' object='strace-uname.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-uname.obj `if test -f 'uname.c'; then $(CYGPATH_W) 'uname.c'; else $(CYGPATH_W) '$(srcdir)/uname.c'; fi`
-
-strace-userfaultfd.o: userfaultfd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-userfaultfd.o -MD -MP -MF $(DEPDIR)/strace-userfaultfd.Tpo -c -o strace-userfaultfd.o `test -f 'userfaultfd.c' || echo '$(srcdir)/'`userfaultfd.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-userfaultfd.Tpo $(DEPDIR)/strace-userfaultfd.Po
-#	$(AM_V_CC)source='userfaultfd.c' object='strace-userfaultfd.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-userfaultfd.o `test -f 'userfaultfd.c' || echo '$(srcdir)/'`userfaultfd.c
-
-strace-userfaultfd.obj: userfaultfd.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-userfaultfd.obj -MD -MP -MF $(DEPDIR)/strace-userfaultfd.Tpo -c -o strace-userfaultfd.obj `if test -f 'userfaultfd.c'; then $(CYGPATH_W) 'userfaultfd.c'; else $(CYGPATH_W) '$(srcdir)/userfaultfd.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-userfaultfd.Tpo $(DEPDIR)/strace-userfaultfd.Po
-#	$(AM_V_CC)source='userfaultfd.c' object='strace-userfaultfd.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-userfaultfd.obj `if test -f 'userfaultfd.c'; then $(CYGPATH_W) 'userfaultfd.c'; else $(CYGPATH_W) '$(srcdir)/userfaultfd.c'; fi`
-
-strace-ustat.o: ustat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ustat.o -MD -MP -MF $(DEPDIR)/strace-ustat.Tpo -c -o strace-ustat.o `test -f 'ustat.c' || echo '$(srcdir)/'`ustat.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ustat.Tpo $(DEPDIR)/strace-ustat.Po
-#	$(AM_V_CC)source='ustat.c' object='strace-ustat.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ustat.o `test -f 'ustat.c' || echo '$(srcdir)/'`ustat.c
-
-strace-ustat.obj: ustat.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ustat.obj -MD -MP -MF $(DEPDIR)/strace-ustat.Tpo -c -o strace-ustat.obj `if test -f 'ustat.c'; then $(CYGPATH_W) 'ustat.c'; else $(CYGPATH_W) '$(srcdir)/ustat.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ustat.Tpo $(DEPDIR)/strace-ustat.Po
-#	$(AM_V_CC)source='ustat.c' object='strace-ustat.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ustat.obj `if test -f 'ustat.c'; then $(CYGPATH_W) 'ustat.c'; else $(CYGPATH_W) '$(srcdir)/ustat.c'; fi`
-
-strace-util.o: util.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-util.o -MD -MP -MF $(DEPDIR)/strace-util.Tpo -c -o strace-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-util.Tpo $(DEPDIR)/strace-util.Po
-#	$(AM_V_CC)source='util.c' object='strace-util.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
-
-strace-util.obj: util.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-util.obj -MD -MP -MF $(DEPDIR)/strace-util.Tpo -c -o strace-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-util.Tpo $(DEPDIR)/strace-util.Po
-#	$(AM_V_CC)source='util.c' object='strace-util.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
-
-strace-utime.o: utime.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-utime.o -MD -MP -MF $(DEPDIR)/strace-utime.Tpo -c -o strace-utime.o `test -f 'utime.c' || echo '$(srcdir)/'`utime.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-utime.Tpo $(DEPDIR)/strace-utime.Po
-#	$(AM_V_CC)source='utime.c' object='strace-utime.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-utime.o `test -f 'utime.c' || echo '$(srcdir)/'`utime.c
-
-strace-utime.obj: utime.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-utime.obj -MD -MP -MF $(DEPDIR)/strace-utime.Tpo -c -o strace-utime.obj `if test -f 'utime.c'; then $(CYGPATH_W) 'utime.c'; else $(CYGPATH_W) '$(srcdir)/utime.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-utime.Tpo $(DEPDIR)/strace-utime.Po
-#	$(AM_V_CC)source='utime.c' object='strace-utime.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-utime.obj `if test -f 'utime.c'; then $(CYGPATH_W) 'utime.c'; else $(CYGPATH_W) '$(srcdir)/utime.c'; fi`
-
-strace-utimes.o: utimes.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-utimes.o -MD -MP -MF $(DEPDIR)/strace-utimes.Tpo -c -o strace-utimes.o `test -f 'utimes.c' || echo '$(srcdir)/'`utimes.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-utimes.Tpo $(DEPDIR)/strace-utimes.Po
-#	$(AM_V_CC)source='utimes.c' object='strace-utimes.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-utimes.o `test -f 'utimes.c' || echo '$(srcdir)/'`utimes.c
-
-strace-utimes.obj: utimes.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-utimes.obj -MD -MP -MF $(DEPDIR)/strace-utimes.Tpo -c -o strace-utimes.obj `if test -f 'utimes.c'; then $(CYGPATH_W) 'utimes.c'; else $(CYGPATH_W) '$(srcdir)/utimes.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-utimes.Tpo $(DEPDIR)/strace-utimes.Po
-#	$(AM_V_CC)source='utimes.c' object='strace-utimes.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-utimes.obj `if test -f 'utimes.c'; then $(CYGPATH_W) 'utimes.c'; else $(CYGPATH_W) '$(srcdir)/utimes.c'; fi`
-
-strace-v4l2.o: v4l2.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-v4l2.o -MD -MP -MF $(DEPDIR)/strace-v4l2.Tpo -c -o strace-v4l2.o `test -f 'v4l2.c' || echo '$(srcdir)/'`v4l2.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-v4l2.Tpo $(DEPDIR)/strace-v4l2.Po
-#	$(AM_V_CC)source='v4l2.c' object='strace-v4l2.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-v4l2.o `test -f 'v4l2.c' || echo '$(srcdir)/'`v4l2.c
-
-strace-v4l2.obj: v4l2.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-v4l2.obj -MD -MP -MF $(DEPDIR)/strace-v4l2.Tpo -c -o strace-v4l2.obj `if test -f 'v4l2.c'; then $(CYGPATH_W) 'v4l2.c'; else $(CYGPATH_W) '$(srcdir)/v4l2.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-v4l2.Tpo $(DEPDIR)/strace-v4l2.Po
-#	$(AM_V_CC)source='v4l2.c' object='strace-v4l2.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-v4l2.obj `if test -f 'v4l2.c'; then $(CYGPATH_W) 'v4l2.c'; else $(CYGPATH_W) '$(srcdir)/v4l2.c'; fi`
-
-strace-wait.o: wait.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-wait.o -MD -MP -MF $(DEPDIR)/strace-wait.Tpo -c -o strace-wait.o `test -f 'wait.c' || echo '$(srcdir)/'`wait.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-wait.Tpo $(DEPDIR)/strace-wait.Po
-#	$(AM_V_CC)source='wait.c' object='strace-wait.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-wait.o `test -f 'wait.c' || echo '$(srcdir)/'`wait.c
-
-strace-wait.obj: wait.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-wait.obj -MD -MP -MF $(DEPDIR)/strace-wait.Tpo -c -o strace-wait.obj `if test -f 'wait.c'; then $(CYGPATH_W) 'wait.c'; else $(CYGPATH_W) '$(srcdir)/wait.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-wait.Tpo $(DEPDIR)/strace-wait.Po
-#	$(AM_V_CC)source='wait.c' object='strace-wait.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-wait.obj `if test -f 'wait.c'; then $(CYGPATH_W) 'wait.c'; else $(CYGPATH_W) '$(srcdir)/wait.c'; fi`
-
-strace-xattr.o: xattr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-xattr.o -MD -MP -MF $(DEPDIR)/strace-xattr.Tpo -c -o strace-xattr.o `test -f 'xattr.c' || echo '$(srcdir)/'`xattr.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-xattr.Tpo $(DEPDIR)/strace-xattr.Po
-#	$(AM_V_CC)source='xattr.c' object='strace-xattr.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-xattr.o `test -f 'xattr.c' || echo '$(srcdir)/'`xattr.c
-
-strace-xattr.obj: xattr.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-xattr.obj -MD -MP -MF $(DEPDIR)/strace-xattr.Tpo -c -o strace-xattr.obj `if test -f 'xattr.c'; then $(CYGPATH_W) 'xattr.c'; else $(CYGPATH_W) '$(srcdir)/xattr.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-xattr.Tpo $(DEPDIR)/strace-xattr.Po
-#	$(AM_V_CC)source='xattr.c' object='strace-xattr.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-xattr.obj `if test -f 'xattr.c'; then $(CYGPATH_W) 'xattr.c'; else $(CYGPATH_W) '$(srcdir)/xattr.c'; fi`
-
-strace-xmalloc.o: xmalloc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-xmalloc.o -MD -MP -MF $(DEPDIR)/strace-xmalloc.Tpo -c -o strace-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-xmalloc.Tpo $(DEPDIR)/strace-xmalloc.Po
-#	$(AM_V_CC)source='xmalloc.c' object='strace-xmalloc.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
-
-strace-xmalloc.obj: xmalloc.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-xmalloc.obj -MD -MP -MF $(DEPDIR)/strace-xmalloc.Tpo -c -o strace-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-xmalloc.Tpo $(DEPDIR)/strace-xmalloc.Po
-#	$(AM_V_CC)source='xmalloc.c' object='strace-xmalloc.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
-
-strace-unwind.o: unwind.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-unwind.o -MD -MP -MF $(DEPDIR)/strace-unwind.Tpo -c -o strace-unwind.o `test -f 'unwind.c' || echo '$(srcdir)/'`unwind.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-unwind.Tpo $(DEPDIR)/strace-unwind.Po
-#	$(AM_V_CC)source='unwind.c' object='strace-unwind.o' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-unwind.o `test -f 'unwind.c' || echo '$(srcdir)/'`unwind.c
-
-strace-unwind.obj: unwind.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-unwind.obj -MD -MP -MF $(DEPDIR)/strace-unwind.Tpo -c -o strace-unwind.obj `if test -f 'unwind.c'; then $(CYGPATH_W) 'unwind.c'; else $(CYGPATH_W) '$(srcdir)/unwind.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-unwind.Tpo $(DEPDIR)/strace-unwind.Po
-#	$(AM_V_CC)source='unwind.c' object='strace-unwind.obj' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-unwind.obj `if test -f 'unwind.c'; then $(CYGPATH_W) 'unwind.c'; else $(CYGPATH_W) '$(srcdir)/unwind.c'; fi`
-install-man1: $(man_MANS)
-	@$(NORMAL_INSTALL)
-	@list1=''; \
-	list2='$(man_MANS)'; \
-	test -n "$(man1dir)" \
-	  && test -n "`echo $$list1$$list2`" \
-	  || exit 0; \
-	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
-	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
-	{ for i in $$list1; do echo "$$i"; done;  \
-	if test -n "$$list2"; then \
-	  for i in $$list2; do echo "$$i"; done \
-	    | sed -n '/\.1[a-z]*$$/p'; \
-	fi; \
-	} | while read p; do \
-	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; echo "$$p"; \
-	done | \
-	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
-	sed 'N;N;s,\n, ,g' | { \
-	list=; while read file base inst; do \
-	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
-	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
-	  fi; \
-	done; \
-	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
-	while read files; do \
-	  test -z "$$files" || { \
-	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
-	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
-	done; }
-
-uninstall-man1:
-	@$(NORMAL_UNINSTALL)
-	@list=''; test -n "$(man1dir)" || exit 0; \
-	files=`{ for i in $$list; do echo "$$i"; done; \
-	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
-	  sed -n '/\.1[a-z]*$$/p'; \
-	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
-	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(am__recursive_targets):
-	@fail=; \
-	if $(am__make_keepgoing); then \
-	  failcom='fail=yes'; \
-	else \
-	  failcom='exit 1'; \
-	fi; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-check-valgrind-local: 
-
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-recursive
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-recursive
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscope: cscope.files
-	test ! -s cscope.files \
-	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
-clean-cscope:
-	-rm -f cscope.files
-cscope.files: clean-cscope cscopelist
-cscopelist: cscopelist-recursive
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-
-distdir: $(DISTFILES)
-	$(am__remove_distdir)
-	test -d "$(distdir)" || mkdir "$(distdir)"
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-	$(MAKE) $(AM_MAKEFLAGS) \
-	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
-	  dist-hook
-	-test -n "$(am__skip_mode_fix)" \
-	|| find "$(distdir)" -type d ! -perm -755 \
-		-exec chmod u+rwx,go+rx {} \; -o \
-	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
-	|| chmod -R a+r "$(distdir)"
-dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__post_remove_distdir)
-
-dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
-	$(am__post_remove_distdir)
-
-dist-lzip: distdir
-	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
-	$(am__post_remove_distdir)
-dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
-	$(am__post_remove_distdir)
-
-dist-tarZ: distdir
-	@echo WARNING: "Support for shar distribution archives is" \
-	               "deprecated." >&2
-	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__post_remove_distdir)
-
-dist-shar: distdir
-	@echo WARNING: "Support for distribution archives compressed with" \
-		       "legacy program 'compress' is deprecated." >&2
-	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__post_remove_distdir)
-
-dist-zip: distdir
-	-rm -f $(distdir).zip
-	zip -rq $(distdir).zip $(distdir)
-	$(am__post_remove_distdir)
-
-dist dist-all:
-	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
-	$(am__post_remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-	case '$(DIST_ARCHIVES)' in \
-	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
-	*.tar.bz2*) \
-	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.lz*) \
-	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
-	*.tar.xz*) \
-	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
-	*.tar.Z*) \
-	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
-	*.zip*) \
-	  unzip $(distdir).zip ;;\
-	esac
-	chmod -R a-w $(distdir)
-	chmod u+w $(distdir)
-	mkdir $(distdir)/_build $(distdir)/_inst
-	chmod a-w $(distdir)
-	test -d $(distdir)/_build || exit 0; \
-	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure \
-	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
-	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	    --srcdir=.. --prefix="$$dc_install_base" \
-	  && $(MAKE) $(AM_MAKEFLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
-	  && $(MAKE) $(AM_MAKEFLAGS) check \
-	  && $(MAKE) $(AM_MAKEFLAGS) install \
-	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-	        distuninstallcheck \
-	  && chmod -R a-w "$$dc_install_base" \
-	  && ({ \
-	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
-	  && rm -rf "$$dc_destdir" \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist \
-	  && rm -rf $(DIST_ARCHIVES) \
-	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
-	  && cd "$$am__cwd" \
-	  || exit 1
-	$(am__post_remove_distdir)
-	@(echo "$(distdir) archives ready for distribution: "; \
-	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
-	@test -n '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: trying to run $@ with an empty' \
-	       '$$(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	$(am__cd) '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
-	   || { echo "ERROR: files left after uninstall:" ; \
-	        if test -n "$(DESTDIR)"; then \
-	          echo "  (check DESTDIR support)"; \
-	        fi ; \
-	        $(distuninstallcheck_listfiles) ; \
-	        exit 1; } >&2
-distcleancheck: distclean
-	@if test '$(srcdir)' = . ; then \
-	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-	  exit 1 ; \
-	fi
-	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-	  || { echo "ERROR: files left in build directory after distclean:" ; \
-	       $(distcleancheck_listfiles) ; \
-	       exit 1; } >&2
-check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) config.h
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-check-valgrind: check-valgrind-recursive
-
-check-valgrind-am: check-valgrind-local
-
-clean: clean-recursive
-
-clean-am: clean-binPROGRAMS clean-generic clean-local \
-	clean-noinstLIBRARIES mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-hdr distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-man
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am: install-binPROGRAMS install-binSCRIPTS
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man: install-man1
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-man
-
-uninstall-man: uninstall-man1
-
-.MAKE: $(am__recursive_targets) all check install install-am \
-	install-strip
-
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
-	am--refresh check check-am check-valgrind-am \
-	check-valgrind-local clean clean-binPROGRAMS clean-cscope \
-	clean-generic clean-local clean-noinstLIBRARIES cscope \
-	cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
-	dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
-	dist-zip distcheck distclean distclean-compile \
-	distclean-generic distclean-hdr distclean-tags distcleancheck \
-	distdir distuninstallcheck dvi dvi-am html html-am info \
-	info-am install install-am install-binPROGRAMS \
-	install-binSCRIPTS install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-man1 install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
-	uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \
-	uninstall-man uninstall-man1
-
-$(top_srcdir)/xlat/access_flags.h: $(top_srcdir)/xlat/access_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/addrfams.h: $(top_srcdir)/xlat/addrfams.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/adjtimex_modes.h: $(top_srcdir)/xlat/adjtimex_modes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/adjtimex_state.h: $(top_srcdir)/xlat/adjtimex_state.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/adjtimex_status.h: $(top_srcdir)/xlat/adjtimex_status.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/advise.h: $(top_srcdir)/xlat/advise.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/af_packet_types.h: $(top_srcdir)/xlat/af_packet_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/archvals.h: $(top_srcdir)/xlat/archvals.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/arp_hardware_types.h: $(top_srcdir)/xlat/arp_hardware_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/at_flags.h: $(top_srcdir)/xlat/at_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/at_statx_sync_types.h: $(top_srcdir)/xlat/at_statx_sync_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/atomic_ops.h: $(top_srcdir)/xlat/atomic_ops.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/audit_arch.h: $(top_srcdir)/xlat/audit_arch.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/baud_options.h: $(top_srcdir)/xlat/baud_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/blkpg_ops.h: $(top_srcdir)/xlat/blkpg_ops.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bootflags1.h: $(top_srcdir)/xlat/bootflags1.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bootflags2.h: $(top_srcdir)/xlat/bootflags2.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bootflags3.h: $(top_srcdir)/xlat/bootflags3.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_attach_flags.h: $(top_srcdir)/xlat/bpf_attach_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_attach_type.h: $(top_srcdir)/xlat/bpf_attach_type.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_class.h: $(top_srcdir)/xlat/bpf_class.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_commands.h: $(top_srcdir)/xlat/bpf_commands.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_map_types.h: $(top_srcdir)/xlat/bpf_map_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_map_update_elem_flags.h: $(top_srcdir)/xlat/bpf_map_update_elem_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_miscop.h: $(top_srcdir)/xlat/bpf_miscop.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_mode.h: $(top_srcdir)/xlat/bpf_mode.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_op_alu.h: $(top_srcdir)/xlat/bpf_op_alu.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_op_jmp.h: $(top_srcdir)/xlat/bpf_op_jmp.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_prog_types.h: $(top_srcdir)/xlat/bpf_prog_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_rval.h: $(top_srcdir)/xlat/bpf_rval.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_size.h: $(top_srcdir)/xlat/bpf_size.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bpf_src.h: $(top_srcdir)/xlat/bpf_src.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bsg_flags.h: $(top_srcdir)/xlat/bsg_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bsg_protocol.h: $(top_srcdir)/xlat/bsg_protocol.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bsg_subprotocol.h: $(top_srcdir)/xlat/bsg_subprotocol.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/bt_protocols.h: $(top_srcdir)/xlat/bt_protocols.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_balance_args.h: $(top_srcdir)/xlat/btrfs_balance_args.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_balance_ctl_cmds.h: $(top_srcdir)/xlat/btrfs_balance_ctl_cmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_balance_flags.h: $(top_srcdir)/xlat/btrfs_balance_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_balance_state.h: $(top_srcdir)/xlat/btrfs_balance_state.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_compress_types.h: $(top_srcdir)/xlat/btrfs_compress_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_defrag_flags.h: $(top_srcdir)/xlat/btrfs_defrag_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_dev_replace_cmds.h: $(top_srcdir)/xlat/btrfs_dev_replace_cmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_dev_replace_results.h: $(top_srcdir)/xlat/btrfs_dev_replace_results.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_dev_replace_state.h: $(top_srcdir)/xlat/btrfs_dev_replace_state.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_dev_stats_flags.h: $(top_srcdir)/xlat/btrfs_dev_stats_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_dev_stats_values.h: $(top_srcdir)/xlat/btrfs_dev_stats_values.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_features_compat.h: $(top_srcdir)/xlat/btrfs_features_compat.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_features_compat_ro.h: $(top_srcdir)/xlat/btrfs_features_compat_ro.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_features_incompat.h: $(top_srcdir)/xlat/btrfs_features_incompat.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_key_types.h: $(top_srcdir)/xlat/btrfs_key_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_qgroup_ctl_cmds.h: $(top_srcdir)/xlat/btrfs_qgroup_ctl_cmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_qgroup_inherit_flags.h: $(top_srcdir)/xlat/btrfs_qgroup_inherit_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_qgroup_limit_flags.h: $(top_srcdir)/xlat/btrfs_qgroup_limit_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_qgroup_status_flags.h: $(top_srcdir)/xlat/btrfs_qgroup_status_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_scrub_flags.h: $(top_srcdir)/xlat/btrfs_scrub_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_send_flags.h: $(top_srcdir)/xlat/btrfs_send_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_snap_flags_v2.h: $(top_srcdir)/xlat/btrfs_snap_flags_v2.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_space_info_flags.h: $(top_srcdir)/xlat/btrfs_space_info_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/btrfs_tree_objectids.h: $(top_srcdir)/xlat/btrfs_tree_objectids.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/cacheflush_scope.h: $(top_srcdir)/xlat/cacheflush_scope.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/cap.h: $(top_srcdir)/xlat/cap.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/cap_mask0.h: $(top_srcdir)/xlat/cap_mask0.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/cap_mask1.h: $(top_srcdir)/xlat/cap_mask1.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/cap_version.h: $(top_srcdir)/xlat/cap_version.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/clockflags.h: $(top_srcdir)/xlat/clockflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/clocknames.h: $(top_srcdir)/xlat/clocknames.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/clone_flags.h: $(top_srcdir)/xlat/clone_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/cpuclocknames.h: $(top_srcdir)/xlat/cpuclocknames.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/delete_module_flags.h: $(top_srcdir)/xlat/delete_module_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/dirent_types.h: $(top_srcdir)/xlat/dirent_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/dm_flags.h: $(top_srcdir)/xlat/dm_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/efd_flags.h: $(top_srcdir)/xlat/efd_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/epollctls.h: $(top_srcdir)/xlat/epollctls.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/epollevents.h: $(top_srcdir)/xlat/epollevents.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/epollflags.h: $(top_srcdir)/xlat/epollflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ethernet_protocols.h: $(top_srcdir)/xlat/ethernet_protocols.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_abs.h: $(top_srcdir)/xlat/evdev_abs.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_autorepeat.h: $(top_srcdir)/xlat/evdev_autorepeat.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_ev.h: $(top_srcdir)/xlat/evdev_ev.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_ff_status.h: $(top_srcdir)/xlat/evdev_ff_status.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_ff_types.h: $(top_srcdir)/xlat/evdev_ff_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_keycode.h: $(top_srcdir)/xlat/evdev_keycode.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_leds.h: $(top_srcdir)/xlat/evdev_leds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_misc.h: $(top_srcdir)/xlat/evdev_misc.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_mtslots.h: $(top_srcdir)/xlat/evdev_mtslots.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_prop.h: $(top_srcdir)/xlat/evdev_prop.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_relative_axes.h: $(top_srcdir)/xlat/evdev_relative_axes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_snd.h: $(top_srcdir)/xlat/evdev_snd.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_switch.h: $(top_srcdir)/xlat/evdev_switch.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/evdev_sync.h: $(top_srcdir)/xlat/evdev_sync.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/f_owner_types.h: $(top_srcdir)/xlat/f_owner_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/f_seals.h: $(top_srcdir)/xlat/f_seals.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/falloc_flags.h: $(top_srcdir)/xlat/falloc_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fan_classes.h: $(top_srcdir)/xlat/fan_classes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fan_event_flags.h: $(top_srcdir)/xlat/fan_event_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fan_init_flags.h: $(top_srcdir)/xlat/fan_init_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fan_mark_flags.h: $(top_srcdir)/xlat/fan_mark_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fcntl64cmds.h: $(top_srcdir)/xlat/fcntl64cmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fcntlcmds.h: $(top_srcdir)/xlat/fcntlcmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fdflags.h: $(top_srcdir)/xlat/fdflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fiemap_extent_flags.h: $(top_srcdir)/xlat/fiemap_extent_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fiemap_flags.h: $(top_srcdir)/xlat/fiemap_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/flockcmds.h: $(top_srcdir)/xlat/flockcmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/fsmagic.h: $(top_srcdir)/xlat/fsmagic.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/futexops.h: $(top_srcdir)/xlat/futexops.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/futexwakecmps.h: $(top_srcdir)/xlat/futexwakecmps.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/futexwakeops.h: $(top_srcdir)/xlat/futexwakeops.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/getrandom_flags.h: $(top_srcdir)/xlat/getrandom_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/getsockipoptions.h: $(top_srcdir)/xlat/getsockipoptions.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/getsockipv6options.h: $(top_srcdir)/xlat/getsockipv6options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/hci_channels.h: $(top_srcdir)/xlat/hci_channels.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/hw_breakpoint_len.h: $(top_srcdir)/xlat/hw_breakpoint_len.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/hw_breakpoint_type.h: $(top_srcdir)/xlat/hw_breakpoint_type.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/icmpfilterflags.h: $(top_srcdir)/xlat/icmpfilterflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/if_dqblk_valid.h: $(top_srcdir)/xlat/if_dqblk_valid.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/if_dqinfo_flags.h: $(top_srcdir)/xlat/if_dqinfo_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/if_dqinfo_valid.h: $(top_srcdir)/xlat/if_dqinfo_valid.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/iffflags.h: $(top_srcdir)/xlat/iffflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/inet_protocols.h: $(top_srcdir)/xlat/inet_protocols.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/inotify_flags.h: $(top_srcdir)/xlat/inotify_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/inotify_init_flags.h: $(top_srcdir)/xlat/inotify_init_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ioctl_dirs.h: $(top_srcdir)/xlat/ioctl_dirs.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ioprio_class.h: $(top_srcdir)/xlat/ioprio_class.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ioprio_who.h: $(top_srcdir)/xlat/ioprio_who.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ip_cmsg_types.h: $(top_srcdir)/xlat/ip_cmsg_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ipc_msg_flags.h: $(top_srcdir)/xlat/ipc_msg_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ipccalls.h: $(top_srcdir)/xlat/ipccalls.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/itimer_which.h: $(top_srcdir)/xlat/itimer_which.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/kcmp_types.h: $(top_srcdir)/xlat/kcmp_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/kexec_arch_values.h: $(top_srcdir)/xlat/kexec_arch_values.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/kexec_file_load_flags.h: $(top_srcdir)/xlat/kexec_file_load_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/kexec_load_flags.h: $(top_srcdir)/xlat/kexec_load_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/key_perms.h: $(top_srcdir)/xlat/key_perms.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/key_reqkeys.h: $(top_srcdir)/xlat/key_reqkeys.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/key_spec.h: $(top_srcdir)/xlat/key_spec.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/keyctl_commands.h: $(top_srcdir)/xlat/keyctl_commands.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/lockfcmds.h: $(top_srcdir)/xlat/lockfcmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/loop_cmds.h: $(top_srcdir)/xlat/loop_cmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/loop_crypt_type_options.h: $(top_srcdir)/xlat/loop_crypt_type_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/loop_flags_options.h: $(top_srcdir)/xlat/loop_flags_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/madvise_cmds.h: $(top_srcdir)/xlat/madvise_cmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mbindflags.h: $(top_srcdir)/xlat/mbindflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mctl_sync.h: $(top_srcdir)/xlat/mctl_sync.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/membarrier_cmds.h: $(top_srcdir)/xlat/membarrier_cmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/memfd_create_flags.h: $(top_srcdir)/xlat/memfd_create_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mempolicyflags.h: $(top_srcdir)/xlat/mempolicyflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mlock_flags.h: $(top_srcdir)/xlat/mlock_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mlockall_flags.h: $(top_srcdir)/xlat/mlockall_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mmap_flags.h: $(top_srcdir)/xlat/mmap_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mmap_prot.h: $(top_srcdir)/xlat/mmap_prot.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/modem_flags.h: $(top_srcdir)/xlat/modem_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/modetypes.h: $(top_srcdir)/xlat/modetypes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/module_init_flags.h: $(top_srcdir)/xlat/module_init_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mount_flags.h: $(top_srcdir)/xlat/mount_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/move_pages_flags.h: $(top_srcdir)/xlat/move_pages_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mq_attr_flags.h: $(top_srcdir)/xlat/mq_attr_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mremap_flags.h: $(top_srcdir)/xlat/mremap_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/msg_flags.h: $(top_srcdir)/xlat/msg_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/msgctl_flags.h: $(top_srcdir)/xlat/msgctl_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mtd_file_mode_options.h: $(top_srcdir)/xlat/mtd_file_mode_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mtd_flags_options.h: $(top_srcdir)/xlat/mtd_flags_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mtd_mode_options.h: $(top_srcdir)/xlat/mtd_mode_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mtd_nandecc_options.h: $(top_srcdir)/xlat/mtd_nandecc_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mtd_otp_options.h: $(top_srcdir)/xlat/mtd_otp_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/mtd_type_options.h: $(top_srcdir)/xlat/mtd_type_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/name_to_handle_at_flags.h: $(top_srcdir)/xlat/name_to_handle_at_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/netlink_flags.h: $(top_srcdir)/xlat/netlink_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/netlink_protocols.h: $(top_srcdir)/xlat/netlink_protocols.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/netlink_types.h: $(top_srcdir)/xlat/netlink_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/notifyflags.h: $(top_srcdir)/xlat/notifyflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/nt_descriptor_types.h: $(top_srcdir)/xlat/nt_descriptor_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/open_access_modes.h: $(top_srcdir)/xlat/open_access_modes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/open_mode_flags.h: $(top_srcdir)/xlat/open_mode_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/packet_mreq_type.h: $(top_srcdir)/xlat/packet_mreq_type.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_attr_size.h: $(top_srcdir)/xlat/perf_attr_size.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_branch_sample_type.h: $(top_srcdir)/xlat/perf_branch_sample_type.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_event_open_flags.h: $(top_srcdir)/xlat/perf_event_open_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_event_read_format.h: $(top_srcdir)/xlat/perf_event_read_format.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_event_sample_format.h: $(top_srcdir)/xlat/perf_event_sample_format.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_hw_cache_id.h: $(top_srcdir)/xlat/perf_hw_cache_id.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_hw_cache_op_id.h: $(top_srcdir)/xlat/perf_hw_cache_op_id.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_hw_cache_op_result_id.h: $(top_srcdir)/xlat/perf_hw_cache_op_result_id.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_hw_id.h: $(top_srcdir)/xlat/perf_hw_id.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_sw_ids.h: $(top_srcdir)/xlat/perf_sw_ids.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/perf_type_id.h: $(top_srcdir)/xlat/perf_type_id.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/personality_flags.h: $(top_srcdir)/xlat/personality_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/personality_types.h: $(top_srcdir)/xlat/personality_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pkey_access.h: $(top_srcdir)/xlat/pkey_access.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/policies.h: $(top_srcdir)/xlat/policies.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pollflags.h: $(top_srcdir)/xlat/pollflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pr_cap_ambient.h: $(top_srcdir)/xlat/pr_cap_ambient.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pr_dumpable.h: $(top_srcdir)/xlat/pr_dumpable.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pr_fp_mode.h: $(top_srcdir)/xlat/pr_fp_mode.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pr_mce_kill.h: $(top_srcdir)/xlat/pr_mce_kill.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pr_mce_kill_policy.h: $(top_srcdir)/xlat/pr_mce_kill_policy.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pr_set_mm.h: $(top_srcdir)/xlat/pr_set_mm.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pr_tsc.h: $(top_srcdir)/xlat/pr_tsc.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/pr_unalign_flags.h: $(top_srcdir)/xlat/pr_unalign_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/prctl_options.h: $(top_srcdir)/xlat/prctl_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/priorities.h: $(top_srcdir)/xlat/priorities.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ptp_flags_options.h: $(top_srcdir)/xlat/ptp_flags_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ptrace_cmds.h: $(top_srcdir)/xlat/ptrace_cmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ptrace_events.h: $(top_srcdir)/xlat/ptrace_events.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ptrace_peeksiginfo_flags.h: $(top_srcdir)/xlat/ptrace_peeksiginfo_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ptrace_setoptions_flags.h: $(top_srcdir)/xlat/ptrace_setoptions_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/quota_formats.h: $(top_srcdir)/xlat/quota_formats.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/quotacmds.h: $(top_srcdir)/xlat/quotacmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/quotatypes.h: $(top_srcdir)/xlat/quotatypes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/rename_flags.h: $(top_srcdir)/xlat/rename_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/resource_flags.h: $(top_srcdir)/xlat/resource_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/resources.h: $(top_srcdir)/xlat/resources.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/rwf_flags.h: $(top_srcdir)/xlat/rwf_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sa_handler_values.h: $(top_srcdir)/xlat/sa_handler_values.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sched_flags.h: $(top_srcdir)/xlat/sched_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/schedulers.h: $(top_srcdir)/xlat/schedulers.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/scmvals.h: $(top_srcdir)/xlat/scmvals.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/scsi_sg_commands.h: $(top_srcdir)/xlat/scsi_sg_commands.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/secbits.h: $(top_srcdir)/xlat/secbits.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/seccomp_filter_flags.h: $(top_srcdir)/xlat/seccomp_filter_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/seccomp_mode.h: $(top_srcdir)/xlat/seccomp_mode.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/seccomp_ops.h: $(top_srcdir)/xlat/seccomp_ops.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/seccomp_ret_action.h: $(top_srcdir)/xlat/seccomp_ret_action.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/semctl_flags.h: $(top_srcdir)/xlat/semctl_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/semop_flags.h: $(top_srcdir)/xlat/semop_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/setns_types.h: $(top_srcdir)/xlat/setns_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/setsockipoptions.h: $(top_srcdir)/xlat/setsockipoptions.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/setsockipv6options.h: $(top_srcdir)/xlat/setsockipv6options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sfd_flags.h: $(top_srcdir)/xlat/sfd_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sg_io_dxfer_direction.h: $(top_srcdir)/xlat/sg_io_dxfer_direction.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sg_io_flags.h: $(top_srcdir)/xlat/sg_io_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sg_io_info.h: $(top_srcdir)/xlat/sg_io_info.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sg_scsi_reset.h: $(top_srcdir)/xlat/sg_scsi_reset.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/shm_flags.h: $(top_srcdir)/xlat/shm_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/shm_resource_flags.h: $(top_srcdir)/xlat/shm_resource_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/shmctl_flags.h: $(top_srcdir)/xlat/shmctl_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/shutdown_modes.h: $(top_srcdir)/xlat/shutdown_modes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigact_flags.h: $(top_srcdir)/xlat/sigact_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigaltstack_flags.h: $(top_srcdir)/xlat/sigaltstack_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigbus_codes.h: $(top_srcdir)/xlat/sigbus_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigchld_codes.h: $(top_srcdir)/xlat/sigchld_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigemt_codes.h: $(top_srcdir)/xlat/sigemt_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigev_value.h: $(top_srcdir)/xlat/sigev_value.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigfpe_codes.h: $(top_srcdir)/xlat/sigfpe_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigill_codes.h: $(top_srcdir)/xlat/sigill_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/siginfo_codes.h: $(top_srcdir)/xlat/siginfo_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigpoll_codes.h: $(top_srcdir)/xlat/sigpoll_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigprocmaskcmds.h: $(top_srcdir)/xlat/sigprocmaskcmds.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigprof_codes.h: $(top_srcdir)/xlat/sigprof_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigsegv_codes.h: $(top_srcdir)/xlat/sigsegv_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigsys_codes.h: $(top_srcdir)/xlat/sigsys_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sigtrap_codes.h: $(top_srcdir)/xlat/sigtrap_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sock_type_flags.h: $(top_srcdir)/xlat/sock_type_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/socketcalls.h: $(top_srcdir)/xlat/socketcalls.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/socketlayers.h: $(top_srcdir)/xlat/socketlayers.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sockipoptions.h: $(top_srcdir)/xlat/sockipoptions.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sockipv6options.h: $(top_srcdir)/xlat/sockipv6options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sockipxoptions.h: $(top_srcdir)/xlat/sockipxoptions.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sockoptions.h: $(top_srcdir)/xlat/sockoptions.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sockpacketoptions.h: $(top_srcdir)/xlat/sockpacketoptions.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sockrawoptions.h: $(top_srcdir)/xlat/sockrawoptions.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/socksctpoptions.h: $(top_srcdir)/xlat/socksctpoptions.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/socktcpoptions.h: $(top_srcdir)/xlat/socktcpoptions.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/socktypes.h: $(top_srcdir)/xlat/socktypes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/splice_flags.h: $(top_srcdir)/xlat/splice_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sram_alloc_flags.h: $(top_srcdir)/xlat/sram_alloc_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/statfs_flags.h: $(top_srcdir)/xlat/statfs_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/statx_attrs.h: $(top_srcdir)/xlat/statx_attrs.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/statx_masks.h: $(top_srcdir)/xlat/statx_masks.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/swap_flags.h: $(top_srcdir)/xlat/swap_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sync_file_range_flags.h: $(top_srcdir)/xlat/sync_file_range_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_kern.h: $(top_srcdir)/xlat/sysctl_kern.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_net.h: $(top_srcdir)/xlat/sysctl_net.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_net_core.h: $(top_srcdir)/xlat/sysctl_net_core.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_net_ipv4.h: $(top_srcdir)/xlat/sysctl_net_ipv4.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_net_ipv4_conf.h: $(top_srcdir)/xlat/sysctl_net_ipv4_conf.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_net_ipv4_route.h: $(top_srcdir)/xlat/sysctl_net_ipv4_route.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_net_ipv6.h: $(top_srcdir)/xlat/sysctl_net_ipv6.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_net_ipv6_route.h: $(top_srcdir)/xlat/sysctl_net_ipv6_route.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_net_unix.h: $(top_srcdir)/xlat/sysctl_net_unix.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_root.h: $(top_srcdir)/xlat/sysctl_root.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysctl_vm.h: $(top_srcdir)/xlat/sysctl_vm.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/syslog_action_type.h: $(top_srcdir)/xlat/syslog_action_type.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/sysmips_operations.h: $(top_srcdir)/xlat/sysmips_operations.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/tcflsh_options.h: $(top_srcdir)/xlat/tcflsh_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/tcxonc_options.h: $(top_srcdir)/xlat/tcxonc_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/timerfdflags.h: $(top_srcdir)/xlat/timerfdflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ubi_volume_props.h: $(top_srcdir)/xlat/ubi_volume_props.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/ubi_volume_types.h: $(top_srcdir)/xlat/ubi_volume_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/uffd_api_flags.h: $(top_srcdir)/xlat/uffd_api_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/uffd_copy_flags.h: $(top_srcdir)/xlat/uffd_copy_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/uffd_flags.h: $(top_srcdir)/xlat/uffd_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/uffd_register_ioctl_flags.h: $(top_srcdir)/xlat/uffd_register_ioctl_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/uffd_register_mode_flags.h: $(top_srcdir)/xlat/uffd_register_mode_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/uffd_zeropage_flags.h: $(top_srcdir)/xlat/uffd_zeropage_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/umount_flags.h: $(top_srcdir)/xlat/umount_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/unshare_flags.h: $(top_srcdir)/xlat/unshare_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/usagewho.h: $(top_srcdir)/xlat/usagewho.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_buf_flags.h: $(top_srcdir)/xlat/v4l2_buf_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_buf_types.h: $(top_srcdir)/xlat/v4l2_buf_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_capture_modes.h: $(top_srcdir)/xlat/v4l2_capture_modes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_colorspaces.h: $(top_srcdir)/xlat/v4l2_colorspaces.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_control_classes.h: $(top_srcdir)/xlat/v4l2_control_classes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_control_flags.h: $(top_srcdir)/xlat/v4l2_control_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_control_ids.h: $(top_srcdir)/xlat/v4l2_control_ids.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_control_types.h: $(top_srcdir)/xlat/v4l2_control_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_device_capabilities_flags.h: $(top_srcdir)/xlat/v4l2_device_capabilities_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_fields.h: $(top_srcdir)/xlat/v4l2_fields.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_format_description_flags.h: $(top_srcdir)/xlat/v4l2_format_description_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_frameinterval_types.h: $(top_srcdir)/xlat/v4l2_frameinterval_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_framesize_types.h: $(top_srcdir)/xlat/v4l2_framesize_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_input_types.h: $(top_srcdir)/xlat/v4l2_input_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_memories.h: $(top_srcdir)/xlat/v4l2_memories.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_sliced_flags.h: $(top_srcdir)/xlat/v4l2_sliced_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_streaming_capabilities.h: $(top_srcdir)/xlat/v4l2_streaming_capabilities.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_tuner_audmodes.h: $(top_srcdir)/xlat/v4l2_tuner_audmodes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_tuner_capabilities.h: $(top_srcdir)/xlat/v4l2_tuner_capabilities.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_tuner_rxsubchanses.h: $(top_srcdir)/xlat/v4l2_tuner_rxsubchanses.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_tuner_types.h: $(top_srcdir)/xlat/v4l2_tuner_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/v4l2_vbi_flags.h: $(top_srcdir)/xlat/v4l2_vbi_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/wait4_options.h: $(top_srcdir)/xlat/wait4_options.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/waitid_types.h: $(top_srcdir)/xlat/waitid_types.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/whence_codes.h: $(top_srcdir)/xlat/whence_codes.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/xattrflags.h: $(top_srcdir)/xlat/xattrflags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/xfs_dqblk_flags.h: $(top_srcdir)/xlat/xfs_dqblk_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-$(top_srcdir)/xlat/xfs_quota_flags.h: $(top_srcdir)/xlat/xfs_quota_flags.in $(top_srcdir)/xlat/gen.sh
-	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
-
-
-# Code coverage
-#
-# Optional:
-#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
-#    Multiple directories may be specified, separated by whitespace.
-#    (Default: $(top_builddir))
-#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
-#    by lcov for code coverage. (Default:
-#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
-#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
-#    reports to be created. (Default:
-#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
-#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
-#    set to 0 to disable it and leave empty to stay with the default.
-#    (Default: empty)
-#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
-#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
-#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
-#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
-#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
-#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
-#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
-#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
-#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
-#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
-#    lcov instance. (Default: empty)
-#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
-#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
-#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
-#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
-#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
-#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
-#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
-#
-# The generated report will be titled using the $(PACKAGE_NAME) and
-# $(PACKAGE_VERSION). In order to add the current git hash to the title,
-# use the git-version-gen script, available online.
-
-# Optional variables
-CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
-CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
-CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
-CODE_COVERAGE_BRANCH_COVERAGE ?=
-CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
---rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
-CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
-CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
-CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
-CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
-CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
-CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
-CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
-$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
---rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
-CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULTS)
-CODE_COVERAGE_IGNORE_PATTERN ?=
-
-code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
-code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
-code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
- $(CODE_COVERAGE_OUTPUT_FILE);
-code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
-code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
-code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
- $(CODE_COVERAGE_IGNORE_PATTERN);
-code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
-code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
-code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
-code_coverage_quiet = $(code_coverage_quiet_$(V))
-code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
-code_coverage_quiet_0 = --quiet
-
-# sanitizes the test-name: replaces with underscores: dashes and dots
-code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
-
-# Use recursive makes in order to ignore errors during check
-check-code-coverage:
-ifeq ($(CODE_COVERAGE_ENABLED),yes)
-	-$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
-	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
-else
-	@echo "Need to reconfigure with --enable-code-coverage"
-endif
-
-# Capture code coverage data
-code-coverage-capture: code-coverage-capture-hook
-ifeq ($(CODE_COVERAGE_ENABLED),yes)
-	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
-	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
-	-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
-	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
-	@echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
-else
-	@echo "Need to reconfigure with --enable-code-coverage"
-endif
-
-# Hook rule executed before code-coverage-capture, overridable by the user
-code-coverage-capture-hook:
-
-ifeq ($(CODE_COVERAGE_ENABLED),yes)
-clean: code-coverage-clean
-distclean: code-coverage-clean
-code-coverage-clean:
-	-$(LCOV) --directory $(top_builddir) -z
-	-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
-	-find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
-endif
-
-GITIGNOREFILES ?=
-GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
-
-AM_DISTCHECK_CONFIGURE_FLAGS ?=
-AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
-
-.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
-
-
-.PHONY: check-valgrind-local
-check-valgrind-local:
-
-.PHONY: srpm
-srpm: dist-xz
-	rpmbuild --define '%_srcrpmdir .' -ts $(distdir).tar.xz
-
-$(srcdir)/.version:
-	$(AM_V_GEN)echo $(VERSION) > $@-t && mv $@-t $@
-
-sys_func.h: $(patsubst %,$(srcdir)/%,$(strace_SOURCES_c))
-	for f in $^; do \
-		sed -n 's/^SYS_FUNC(.*/extern &;/p' $$f; \
-	done | sort -u > $@
-
-sen.h: $(patsubst %,$(srcdir)/%,$(syscallent_files))
-	for f in $^; do cat -- $$f; done | \
-		$(srcdir)/generate_sen.sh > $@
-
-dist-hook:
-	$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
-	${AM_V_GEN}echo $(COPYRIGHT_YEAR) > $(distdir)/.year
-
-news-check: NEWS
-	$(AM_V_GEN)if head -1 $< |				\
-	  grep -x $(news_check_regexp) >/dev/null; then		\
-		:;						\
-	else							\
-		echo >&2 '$<: check failed';			\
-		exit 1;						\
-	fi
-
-ioctl_redefs%.h: ioctlent%.h ioctlent0.h
-	sort $< > $<-t
-	sort ioctlent0.h | comm -23 $<-t - | \
-		sed -r -n 's/^\{ "([^"]+)", (0x[[:xdigit:]]+) \},$$/#ifdef \1\n# undef \1\n# define \1 \2\n#endif/p' \
-		> $@-t
-	rm -f $<-t
-	mv $@-t $@
-
-ioctlent%.h: ioctlsort%
-	./$< > $@
-
-# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
-# ioctlsort *for build*, hence this magic.
-ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
-	$(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-		$(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
-
-ioctl_iocdef.h: ioctl_iocdef.i
-	sed -n 's/^DEFINE HOST/#define /p' $< > $@
-
-ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
-	$(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
-
-ioctlsort%.o: ioctls_all%.h ioctl_iocdef.h $(srcdir)/ioctlsort.c
-	$(ioctlsort_CC) $(ioctlsort_DEFS) $(ioctlsort_INCLUDES) $(ioctlsort_CPPFLAGS) $(ioctlsort_CFLAGS) -DIOCTLSORT_INC=\"$<\" -c -o $@ $(srcdir)/ioctlsort.c
-
-ioctls_all%.h: $(srcdir)/$(OS)/$(ARCH)/ioctls_inc%.h $(srcdir)/$(OS)/$(ARCH)/ioctls_arch%.h
-	cat $^ > $@
-
-syscallent.i: $(top_srcdir)/$(OS)/$(ARCH)/syscallent.h
-	$(CPP) -P $(SCNO_CPPFLAGS) $^ -o $@
-
-scno.h: $(top_srcdir)/scno.head syscallent.i
-	echo '/* Generated by Makefile from $^; do not edit. */' > $@-t
-	cat $< >> $@-t
-	LC_ALL=C sed -n '$(SCNO_SED)' $(filter-out $<,$^) >> $@-t
-	mv $@-t $@
-
-$(strace_OBJECTS): scno.h
-
-# mpers targets
-
-mpers-m%.stamp: $(srcdir_mpers_source_files) | printers.h
-	for f in $^; do \
-		CC="$(CC)" CFLAGS="$(mpers_sh_opts) -DMPERS_IS_$(mpers_NAME)" \
-		CPP="$(CPP)" CPPFLAGS="$(mpers_sh_opts) -DIN_MPERS -DMPERS_IS_$(mpers_NAME)" \
-		$(srcdir)/mpers.sh -$(mpers_NAME) $$f || exit; \
-	done
-	> $@
-
-m%_type_defs.h: $(srcdir_mpers_source_files)
-	for f in $^; do \
-		sed -r -n 's/^#[[:space:]]*include DEF_MPERS_TYPE\(([^)]+)\)/#ifdef MPERS_$(mpers_PREFIX)\1\n# define \1 MPERS_$(mpers_PREFIX)\1\n#endif/p' $$f || exit; \
-	done > $@-t
-	echo '#undef MPERS_PRINTER_NAME' >> $@-t
-	echo '#define MPERS_PRINTER_NAME(printer_name) printer_name' >> $@-t
-	echo '#include "$(mpers_PREFIX)printer_decls.h"' >> $@-t
-	echo '#include MPERS_$(mpers_PREFIX)IOCTL_MACROS' >> $@-t
-	mv $@-t $@
-
-m%_funcs.h: $(srcdir_mpers_source_files)
-	for f in $^; do \
-		sed -r -n 's/^SYS_FUNC\(([^)]+)\)/#undef sys_\1\n#define sys_\1 $(mpers_PREFIX)sys_\1/p' $$f || exit; \
-	done > $@-t && \
-	echo '#include "sys_func.h"' >> $@-t
-	mv $@-t $@
-
-# printers
-
-%.c.mpers.i: $(srcdir)/%.c
-	$(CPP) -P $(mpers_sh_opts) -DIN_MPERS_BOOTSTRAP $< -o $@
-
-printers.h: $(mpers_preproc_files)
-	echo '/* Generated by Makefile from $^; do not edit. */' > $@-t
-	echo 'typedef struct {' >> $@-t
-	for f in $^; do \
-		sed -r -n 's/$(mpers_printer_decl_pattern)/ \1 (*\2)(\3);\n#define \2 MPERS_PRINTER_NAME(\2)\n/p' $$f \
-		|| exit; \
-	done >> $@-t
-	echo '} struct_printers;' >> $@-t
-	echo 'extern const struct_printers *printers;' >> $@-t
-	echo '#define MPERS_PRINTER_NAME(printer_name) printers->printer_name' >> $@-t
-	mv $@-t $@
-
-%_printer_decls.h: $(mpers_preproc_files)
-	echo '/* Generated by Makefile from $^; do not edit. */' > $@-t
-	for f in $^; do \
-		sed -r -n 's/$(mpers_printer_decl_pattern)/extern \1 $(mpers_PREFIX)\2(\3);/p' $$f \
-		|| exit; \
-	done >> $@-t
-	mv $@-t $@
-
-%_printer_defs.h: $(mpers_preproc_files)
-	echo '/* Generated by Makefile from $^; do not edit. */' > $@-t
-	for f in $^; do \
-		sed -r -n 's/$(mpers_printer_decl_pattern)/.\2 = $(mpers_PREFIX)\2,/p' $$f \
-		|| exit; \
-	done >> $@-t
-	mv $@-t $@
-
-native_printer_decls.h native_printer_defs.h: mpers_PREFIX =
-
-$(mpers_m32_targets): mpers_NAME = m32
-
-$(mpers_mx32_targets): mpers_NAME = mx32
-
-clean-local:
-	-rm -rf mpers-m32 mpers-mx32
-#$(srcdir)/ChangeLog: $(srcdir)/gitlog-to-changelog $(srcdir)/Makefile.in \
-#		     $(srcdir)/.version
-#	@rm -f $@.new
-#	(cd $(srcdir); \
-#	 ./gitlog-to-changelog --append-dot \
-#	   --since='$(gen_changelog_start_date)'; \
-#	 echo; echo; echo 'See ChangeLog-CVS for older changes.' \
-#	) > $@.new
-#	chmod 444 $@.new
-#	mv -f $@.new $@
-
-#$(srcdir)/CREDITS: $(srcdir)/CREDITS.in $(srcdir)/.mailmap \
-#		   $(srcdir)/Makefile.in $(srcdir)/.version
-#	$(AM_V_GEN)							\
-#	(								\
-#	  cd $(srcdir);							\
-#	  sed '/^##/,$$d' CREDITS.in;					\
-#	  { sed -n '1,/^##>/d; s/   */\t/; s/^./&/p' CREDITS.in;	\
-#	    git log --pretty=format:'%aN	%aE';			\
-#	  } | LC_ALL=C sort -u						\
-#	    | awk -F'\t' '{printf("\t%s <%s>\n",$$1,$$2)}';		\
-#	) > $@-t && mv $@-t $@
-
-#export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner --mode=go-w,go+rX
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/Makefile.am b/Makefile.am
index cb65021..4aa9846 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -35,7 +35,7 @@
 if HAVE_MX32_RUNTIME
 TESTS_MX32 = tests-mx32
 endif
-SUBDIRS = tests $(TESTS_M32) $(TESTS_MX32)
+SUBDIRS = . tests $(TESTS_M32) $(TESTS_MX32)
 
 bin_PROGRAMS = strace
 man_MANS = strace.1
@@ -86,9 +86,16 @@
 	affinity.c	\
 	aio.c		\
 	alpha.c		\
+	basic_filters.c	\
+	bind.c		\
 	bjm.c		\
 	block.c		\
 	bpf.c		\
+	bpf_filter.c	\
+	bpf_filter.h	\
+	bpf_fprog.h 	\
+	bpf_seccomp_filter.c \
+	bpf_sock_filter.c \
 	btrfs.c		\
 	cacheflush.c	\
 	capability.c	\
@@ -107,6 +114,8 @@
 	dyxlat.c	\
 	empty.h		\
 	epoll.c		\
+	error_prints.c	\
+	error_prints.h	\
 	evdev.c		\
 	eventfd.c	\
 	execve.c	\
@@ -115,8 +124,9 @@
 	fanotify.c	\
 	fchownat.c	\
 	fcntl.c		\
-	fetch_seccomp_fprog.c \
+	fetch_bpf_fprog.c \
 	fetch_struct_flock.c \
+	fetch_struct_keyctl_kdf_params.c \
 	fetch_struct_mmsghdr.c \
 	fetch_struct_msghdr.c \
 	fetch_struct_stat.c \
@@ -124,9 +134,11 @@
 	fetch_struct_statfs.c \
 	file_handle.c	\
 	file_ioctl.c	\
-	fs_x_ioctl.c	\
+	filter_qualify.c \
+	filter.h	\
 	flock.c		\
 	flock.h		\
+	fs_x_ioctl.c	\
 	futex.c		\
 	gcc_compat.h	\
 	get_robust_list.c \
@@ -151,11 +163,13 @@
 	kernel_types.h	\
 	kexec.c		\
 	keyctl.c	\
+	keyctl_kdf_params.h \
 	ldt.c		\
 	link.c		\
 	linux/asm_stat.h \
 	linux/x32/asm_stat.h \
 	linux/x86_64/asm_stat.h \
+	listen.c	\
 	lookup_dcookie.c \
 	loop.c		\
 	lseek.c		\
@@ -172,16 +186,29 @@
 	msghdr.h	\
 	mtd.c		\
 	native_defs.h	\
+	negated_errno.h	\
 	net.c		\
 	netlink.c       \
 	netlink.h	\
+	netlink_crypto.c \
+	netlink_sock_diag.h \
+	netlink_inet_diag.c \
+	netlink_netlink_diag.c \
+	netlink_packet_diag.c \
+	netlink_route.c	\
+	netlink_route.h	\
+	netlink_selinux.c \
+	netlink_smc_diag.c \
 	netlink_sock_diag.c \
+	netlink_unix_diag.c \
 	nlattr.c	\
 	nlattr.h	\
 	nsfs.c          \
 	nsfs.h          \
 	nsig.h		\
 	numa.c		\
+	number_set.c	\
+	number_set.h	\
 	oldstat.c	\
 	open.c		\
 	or1k_atomic.c	\
@@ -193,7 +220,9 @@
 	poll.c		\
 	prctl.c		\
 	print_dev_t.c	\
+	print_group_req.c \
 	print_fields.h	\
+	print_ifindex.c	\
 	print_mq_attr.c	\
 	print_msgbuf.c	\
 	print_sg_req_info.c \
@@ -212,7 +241,6 @@
 	process_vm.c	\
 	ptp.c		\
 	ptrace.h	\
-	qualify.c	\
 	quota.c		\
 	readahead.c	\
 	readlink.c	\
@@ -223,14 +251,27 @@
 	rt_sigframe.c	\
 	rt_sigreturn.c	\
 	rtc.c		\
+	rtnl_addr.c	\
+	rtnl_addrlabel.c \
+	rtnl_dcb.c	\
+	rtnl_link.c	\
+	rtnl_mdb.c	\
+	rtnl_neigh.c	\
+	rtnl_neightbl.c	\
+	rtnl_netconf.c	\
+	rtnl_nsid.c	\
+	rtnl_route.c	\
+	rtnl_rule.c	\
+	rtnl_tc.c	\
+	rtnl_tc_action.c \
 	sched.c		\
 	sched_attr.h	\
 	scsi.c		\
 	seccomp.c	\
-	seccomp_fprog.h \
 	sendfile.c	\
 	sg_io_v3.c	\
 	sg_io_v4.c	\
+	shutdown.c	\
 	sigaltstack.c	\
 	sigevent.h	\
 	signal.c	\
@@ -247,10 +288,15 @@
 	statx.c		\
 	statx.h		\
 	strace.c	\
+	string_to_uint.h \
+	string_to_uint.c \
+	supported_personalities.h \
 	swapon.c	\
 	syscall.c	\
 	sysctl.c	\
 	sysent.h	\
+	sysent_shorthand_defs.h \
+	sysent_shorthand_undefs.h \
 	sysinfo.c	\
 	syslog.c	\
 	sysmips.c	\
@@ -259,6 +305,7 @@
 	times.c		\
 	truncate.c	\
 	ubi.c		\
+	ucopy.c		\
 	uid.c		\
 	uid16.c		\
 	umask.c		\
@@ -275,6 +322,7 @@
 	xlat.c		\
 	xlat.h		\
 	xmalloc.c	\
+	xmalloc.h	\
 	# end of strace_SOURCES
 
 if USE_LIBUNWIND
@@ -291,7 +339,7 @@
 CODE_COVERAGE_IGNORE_PATTERN = '/usr/include/*'
 strace_CPPFLAGS += $(CODE_COVERAGE_CPPFLAGS)
 strace_CFLAGS += $(CODE_COVERAGE_CFLAGS)
-strace_LDADD += $(CODE_COVERAGE_LDFLAGS)
+strace_LDADD += $(CODE_COVERAGE_LIBS)
 
 # Enable this to get link map generated
 #strace_LDFLAGS += -Wl,-Map=strace.mapfile
@@ -855,6 +903,7 @@
 dist-hook:
 	$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
 	${AM_V_GEN}echo $(COPYRIGHT_YEAR) > $(distdir)/.year
+	${AM_V_GEN}echo $(MANPAGE_DATE) > $(distdir)/.strace.1.in.date
 
 today = $(shell date +%Y-%m-%d)
 version_regexp = $(subst .,\.,$(VERSION))
diff --git a/Makefile.in b/Makefile.in
index ab67ad0..4bf763a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -142,10 +142,10 @@
 DIST_COMMON = $(srcdir)/xlat/Makemodule.am $(srcdir)/scno.am \
 	$(srcdir)/mpers.am $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(top_srcdir)/configure $(am__configure_deps) \
-	$(srcdir)/config.h.in $(srcdir)/strace.spec.in \
-	$(top_srcdir)/debian/changelog.in depcomp AUTHORS COPYING \
-	INSTALL NEWS README compile config.guess config.sub install-sh \
-	missing
+	$(srcdir)/config.h.in $(srcdir)/strace.1.in \
+	$(srcdir)/strace.spec.in $(top_srcdir)/debian/changelog.in \
+	depcomp AUTHORS COPYING INSTALL NEWS README compile \
+	config.guess config.sub install-sh missing
 @USE_LIBUNWIND_TRUE@am__append_1 = unwind.c
 @USE_LIBUNWIND_TRUE@am__append_2 = $(libunwind_CPPFLAGS)
 @USE_LIBUNWIND_TRUE@am__append_3 = $(libunwind_LDFLAGS)
@@ -163,7 +163,7 @@
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_code_coverage.m4 \
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
-	$(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/mpers.m4 $(top_srcdir)/m4/st_bpf.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
 	$(top_srcdir)/m4/st_warn_cflags.m4 \
 	$(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
@@ -173,7 +173,7 @@
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = strace.spec debian/changelog
+CONFIG_CLEAN_FILES = strace.1 strace.spec debian/changelog
 CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
 AR = ar
@@ -185,11 +185,12 @@
 libmpers_m32_a_AR = $(AR) $(ARFLAGS)
 libmpers_m32_a_LIBADD =
 am__libmpers_m32_a_SOURCES_DIST = block.c btrfs.c dirent.c evdev.c \
-	fetch_seccomp_fprog.c fetch_struct_flock.c \
-	fetch_struct_mmsghdr.c fetch_struct_msghdr.c \
-	fetch_struct_stat.c fetch_struct_stat64.c \
-	fetch_struct_statfs.c hdio.c ipc_msgctl.c ipc_shmctl.c loop.c \
-	mtd.c print_mq_attr.c print_msgbuf.c print_sg_req_info.c \
+	fetch_bpf_fprog.c fetch_struct_flock.c \
+	fetch_struct_keyctl_kdf_params.c fetch_struct_mmsghdr.c \
+	fetch_struct_msghdr.c fetch_struct_stat.c \
+	fetch_struct_stat64.c fetch_struct_statfs.c hdio.c \
+	ipc_msgctl.c ipc_shmctl.c loop.c mtd.c print_group_req.c \
+	print_mq_attr.c print_msgbuf.c print_sg_req_info.c \
 	print_sigevent.c print_time.c print_timespec.c print_timeval.c \
 	print_timex.c printrusage.c printsiginfo.c rt_sigreturn.c \
 	rtc.c sg_io_v3.c sigaltstack.c sock.c sysinfo.c times.c \
@@ -197,8 +198,9 @@
 am__objects_1 = libmpers_m32_a-block.$(OBJEXT) \
 	libmpers_m32_a-btrfs.$(OBJEXT) libmpers_m32_a-dirent.$(OBJEXT) \
 	libmpers_m32_a-evdev.$(OBJEXT) \
-	libmpers_m32_a-fetch_seccomp_fprog.$(OBJEXT) \
+	libmpers_m32_a-fetch_bpf_fprog.$(OBJEXT) \
 	libmpers_m32_a-fetch_struct_flock.$(OBJEXT) \
+	libmpers_m32_a-fetch_struct_keyctl_kdf_params.$(OBJEXT) \
 	libmpers_m32_a-fetch_struct_mmsghdr.$(OBJEXT) \
 	libmpers_m32_a-fetch_struct_msghdr.$(OBJEXT) \
 	libmpers_m32_a-fetch_struct_stat.$(OBJEXT) \
@@ -208,6 +210,7 @@
 	libmpers_m32_a-ipc_msgctl.$(OBJEXT) \
 	libmpers_m32_a-ipc_shmctl.$(OBJEXT) \
 	libmpers_m32_a-loop.$(OBJEXT) libmpers_m32_a-mtd.$(OBJEXT) \
+	libmpers_m32_a-print_group_req.$(OBJEXT) \
 	libmpers_m32_a-print_mq_attr.$(OBJEXT) \
 	libmpers_m32_a-print_msgbuf.$(OBJEXT) \
 	libmpers_m32_a-print_sg_req_info.$(OBJEXT) \
@@ -229,11 +232,12 @@
 libmpers_mx32_a_AR = $(AR) $(ARFLAGS)
 libmpers_mx32_a_LIBADD =
 am__libmpers_mx32_a_SOURCES_DIST = block.c btrfs.c dirent.c evdev.c \
-	fetch_seccomp_fprog.c fetch_struct_flock.c \
-	fetch_struct_mmsghdr.c fetch_struct_msghdr.c \
-	fetch_struct_stat.c fetch_struct_stat64.c \
-	fetch_struct_statfs.c hdio.c ipc_msgctl.c ipc_shmctl.c loop.c \
-	mtd.c print_mq_attr.c print_msgbuf.c print_sg_req_info.c \
+	fetch_bpf_fprog.c fetch_struct_flock.c \
+	fetch_struct_keyctl_kdf_params.c fetch_struct_mmsghdr.c \
+	fetch_struct_msghdr.c fetch_struct_stat.c \
+	fetch_struct_stat64.c fetch_struct_statfs.c hdio.c \
+	ipc_msgctl.c ipc_shmctl.c loop.c mtd.c print_group_req.c \
+	print_mq_attr.c print_msgbuf.c print_sg_req_info.c \
 	print_sigevent.c print_time.c print_timespec.c print_timeval.c \
 	print_timex.c printrusage.c printsiginfo.c rt_sigreturn.c \
 	rtc.c sg_io_v3.c sigaltstack.c sock.c sysinfo.c times.c \
@@ -242,8 +246,9 @@
 	libmpers_mx32_a-btrfs.$(OBJEXT) \
 	libmpers_mx32_a-dirent.$(OBJEXT) \
 	libmpers_mx32_a-evdev.$(OBJEXT) \
-	libmpers_mx32_a-fetch_seccomp_fprog.$(OBJEXT) \
+	libmpers_mx32_a-fetch_bpf_fprog.$(OBJEXT) \
 	libmpers_mx32_a-fetch_struct_flock.$(OBJEXT) \
+	libmpers_mx32_a-fetch_struct_keyctl_kdf_params.$(OBJEXT) \
 	libmpers_mx32_a-fetch_struct_mmsghdr.$(OBJEXT) \
 	libmpers_mx32_a-fetch_struct_msghdr.$(OBJEXT) \
 	libmpers_mx32_a-fetch_struct_stat.$(OBJEXT) \
@@ -253,6 +258,7 @@
 	libmpers_mx32_a-ipc_msgctl.$(OBJEXT) \
 	libmpers_mx32_a-ipc_shmctl.$(OBJEXT) \
 	libmpers_mx32_a-loop.$(OBJEXT) libmpers_mx32_a-mtd.$(OBJEXT) \
+	libmpers_mx32_a-print_group_req.$(OBJEXT) \
 	libmpers_mx32_a-print_mq_attr.$(OBJEXT) \
 	libmpers_mx32_a-print_msgbuf.$(OBJEXT) \
 	libmpers_mx32_a-print_sg_req_info.$(OBJEXT) \
@@ -288,94 +294,122 @@
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
 	"$(DESTDIR)$(man1dir)"
 PROGRAMS = $(bin_PROGRAMS)
-am__strace_SOURCES_DIST = access.c affinity.c aio.c alpha.c bjm.c \
-	block.c bpf.c btrfs.c cacheflush.c capability.c caps0.h \
+am__strace_SOURCES_DIST = access.c affinity.c aio.c alpha.c \
+	basic_filters.c bind.c bjm.c block.c bpf.c bpf_filter.c \
+	bpf_filter.h bpf_fprog.h bpf_seccomp_filter.c \
+	bpf_sock_filter.c btrfs.c cacheflush.c capability.c caps0.h \
 	caps1.h chdir.c chmod.c clone.c copy_file_range.c count.c \
 	defs.h desc.c dirent.c dirent64.c dm.c dyxlat.c empty.h \
-	epoll.c evdev.c eventfd.c execve.c fadvise.c fallocate.c \
-	fanotify.c fchownat.c fcntl.c fetch_seccomp_fprog.c \
-	fetch_struct_flock.c fetch_struct_mmsghdr.c \
+	epoll.c error_prints.c error_prints.h evdev.c eventfd.c \
+	execve.c fadvise.c fallocate.c fanotify.c fchownat.c fcntl.c \
+	fetch_bpf_fprog.c fetch_struct_flock.c \
+	fetch_struct_keyctl_kdf_params.c fetch_struct_mmsghdr.c \
 	fetch_struct_msghdr.c fetch_struct_stat.c \
 	fetch_struct_stat64.c fetch_struct_statfs.c file_handle.c \
-	file_ioctl.c fs_x_ioctl.c flock.c flock.h futex.c gcc_compat.h \
-	get_robust_list.c getcpu.c getcwd.c getrandom.c hdio.c \
-	hostname.c inotify.c io.c ioctl.c ioperm.c iopl.c ioprio.c \
-	ipc_defs.h ipc_msg.c ipc_msgctl.c ipc_sem.c ipc_shm.c \
-	ipc_shmctl.c kcmp.c kernel_types.h kexec.c keyctl.c ldt.c \
-	link.c linux/asm_stat.h linux/x32/asm_stat.h \
-	linux/x86_64/asm_stat.h lookup_dcookie.c loop.c lseek.c \
-	macros.h mem.c membarrier.c memfd_create.c mknod.c mmsghdr.c \
-	mount.c mpers_type.h mq.c msghdr.c msghdr.h mtd.c \
-	native_defs.h net.c netlink.c netlink.h netlink_sock_diag.c \
-	nlattr.c nlattr.h nsfs.c nsfs.h nsig.h numa.c oldstat.c open.c \
+	file_ioctl.c filter_qualify.c filter.h flock.c flock.h \
+	fs_x_ioctl.c futex.c gcc_compat.h get_robust_list.c getcpu.c \
+	getcwd.c getrandom.c hdio.c hostname.c inotify.c io.c ioctl.c \
+	ioperm.c iopl.c ioprio.c ipc_defs.h ipc_msg.c ipc_msgctl.c \
+	ipc_sem.c ipc_shm.c ipc_shmctl.c kcmp.c kernel_types.h kexec.c \
+	keyctl.c keyctl_kdf_params.h ldt.c link.c linux/asm_stat.h \
+	linux/x32/asm_stat.h linux/x86_64/asm_stat.h listen.c \
+	lookup_dcookie.c loop.c lseek.c macros.h mem.c membarrier.c \
+	memfd_create.c mknod.c mmsghdr.c mount.c mpers_type.h mq.c \
+	msghdr.c msghdr.h mtd.c native_defs.h negated_errno.h net.c \
+	netlink.c netlink.h netlink_crypto.c netlink_sock_diag.h \
+	netlink_inet_diag.c netlink_netlink_diag.c \
+	netlink_packet_diag.c netlink_route.c netlink_route.h \
+	netlink_selinux.c netlink_smc_diag.c netlink_sock_diag.c \
+	netlink_unix_diag.c nlattr.c nlattr.h nsfs.c nsfs.h nsig.h \
+	numa.c number_set.c number_set.h oldstat.c open.c \
 	or1k_atomic.c pathtrace.c perf.c perf_event_struct.h \
 	personality.c pkeys.c poll.c prctl.c print_dev_t.c \
-	print_fields.h print_mq_attr.c print_msgbuf.c \
-	print_sg_req_info.c print_sigevent.c print_statfs.c \
-	print_struct_stat.c print_time.c print_timespec.c \
-	print_timeval.c print_timex.c printmode.c printrusage.c \
-	printsiginfo.c printsiginfo.h process.c process_vm.c ptp.c \
-	ptrace.h qualify.c quota.c readahead.c readlink.c reboot.c \
-	regs.h renameat.c resource.c rt_sigframe.c rt_sigreturn.c \
-	rtc.c sched.c sched_attr.h scsi.c seccomp.c seccomp_fprog.h \
-	sendfile.c sg_io_v3.c sg_io_v4.c sigaltstack.c sigevent.h \
-	signal.c signalfd.c sock.c sockaddr.c socketutils.c \
+	print_group_req.c print_fields.h print_ifindex.c \
+	print_mq_attr.c print_msgbuf.c print_sg_req_info.c \
+	print_sigevent.c print_statfs.c print_struct_stat.c \
+	print_time.c print_timespec.c print_timeval.c print_timex.c \
+	printmode.c printrusage.c printsiginfo.c printsiginfo.h \
+	process.c process_vm.c ptp.c ptrace.h quota.c readahead.c \
+	readlink.c reboot.c regs.h renameat.c resource.c rt_sigframe.c \
+	rt_sigreturn.c rtc.c rtnl_addr.c rtnl_addrlabel.c rtnl_dcb.c \
+	rtnl_link.c rtnl_mdb.c rtnl_neigh.c rtnl_neightbl.c \
+	rtnl_netconf.c rtnl_nsid.c rtnl_route.c rtnl_rule.c rtnl_tc.c \
+	rtnl_tc_action.c sched.c sched_attr.h scsi.c seccomp.c \
+	sendfile.c sg_io_v3.c sg_io_v4.c shutdown.c sigaltstack.c \
+	sigevent.h signal.c signalfd.c sock.c sockaddr.c socketutils.c \
 	sram_alloc.c stat.c stat.h stat64.c statfs.c statfs.h statx.c \
-	statx.h strace.c swapon.c syscall.c sysctl.c sysent.h \
-	sysinfo.c syslog.c sysmips.c term.c time.c times.c truncate.c \
-	ubi.c uid.c uid16.c umask.c umount.c uname.c userfaultfd.c \
+	statx.h strace.c string_to_uint.h string_to_uint.c \
+	supported_personalities.h swapon.c syscall.c sysctl.c sysent.h \
+	sysent_shorthand_defs.h sysent_shorthand_undefs.h sysinfo.c \
+	syslog.c sysmips.c term.c time.c times.c truncate.c ubi.c \
+	ucopy.c uid.c uid16.c umask.c umount.c uname.c userfaultfd.c \
 	ustat.c util.c utime.c utimes.c v4l2.c wait.c xattr.c xlat.c \
-	xlat.h xmalloc.c unwind.c
+	xlat.h xmalloc.c xmalloc.h unwind.c
 @USE_LIBUNWIND_TRUE@am__objects_3 = strace-unwind.$(OBJEXT)
 am_strace_OBJECTS = strace-access.$(OBJEXT) strace-affinity.$(OBJEXT) \
 	strace-aio.$(OBJEXT) strace-alpha.$(OBJEXT) \
+	strace-basic_filters.$(OBJEXT) strace-bind.$(OBJEXT) \
 	strace-bjm.$(OBJEXT) strace-block.$(OBJEXT) \
-	strace-bpf.$(OBJEXT) strace-btrfs.$(OBJEXT) \
+	strace-bpf.$(OBJEXT) strace-bpf_filter.$(OBJEXT) \
+	strace-bpf_seccomp_filter.$(OBJEXT) \
+	strace-bpf_sock_filter.$(OBJEXT) strace-btrfs.$(OBJEXT) \
 	strace-cacheflush.$(OBJEXT) strace-capability.$(OBJEXT) \
 	strace-chdir.$(OBJEXT) strace-chmod.$(OBJEXT) \
 	strace-clone.$(OBJEXT) strace-copy_file_range.$(OBJEXT) \
 	strace-count.$(OBJEXT) strace-desc.$(OBJEXT) \
 	strace-dirent.$(OBJEXT) strace-dirent64.$(OBJEXT) \
 	strace-dm.$(OBJEXT) strace-dyxlat.$(OBJEXT) \
-	strace-epoll.$(OBJEXT) strace-evdev.$(OBJEXT) \
-	strace-eventfd.$(OBJEXT) strace-execve.$(OBJEXT) \
-	strace-fadvise.$(OBJEXT) strace-fallocate.$(OBJEXT) \
-	strace-fanotify.$(OBJEXT) strace-fchownat.$(OBJEXT) \
-	strace-fcntl.$(OBJEXT) strace-fetch_seccomp_fprog.$(OBJEXT) \
+	strace-epoll.$(OBJEXT) strace-error_prints.$(OBJEXT) \
+	strace-evdev.$(OBJEXT) strace-eventfd.$(OBJEXT) \
+	strace-execve.$(OBJEXT) strace-fadvise.$(OBJEXT) \
+	strace-fallocate.$(OBJEXT) strace-fanotify.$(OBJEXT) \
+	strace-fchownat.$(OBJEXT) strace-fcntl.$(OBJEXT) \
+	strace-fetch_bpf_fprog.$(OBJEXT) \
 	strace-fetch_struct_flock.$(OBJEXT) \
+	strace-fetch_struct_keyctl_kdf_params.$(OBJEXT) \
 	strace-fetch_struct_mmsghdr.$(OBJEXT) \
 	strace-fetch_struct_msghdr.$(OBJEXT) \
 	strace-fetch_struct_stat.$(OBJEXT) \
 	strace-fetch_struct_stat64.$(OBJEXT) \
 	strace-fetch_struct_statfs.$(OBJEXT) \
 	strace-file_handle.$(OBJEXT) strace-file_ioctl.$(OBJEXT) \
-	strace-fs_x_ioctl.$(OBJEXT) strace-flock.$(OBJEXT) \
-	strace-futex.$(OBJEXT) strace-get_robust_list.$(OBJEXT) \
-	strace-getcpu.$(OBJEXT) strace-getcwd.$(OBJEXT) \
-	strace-getrandom.$(OBJEXT) strace-hdio.$(OBJEXT) \
-	strace-hostname.$(OBJEXT) strace-inotify.$(OBJEXT) \
-	strace-io.$(OBJEXT) strace-ioctl.$(OBJEXT) \
-	strace-ioperm.$(OBJEXT) strace-iopl.$(OBJEXT) \
-	strace-ioprio.$(OBJEXT) strace-ipc_msg.$(OBJEXT) \
-	strace-ipc_msgctl.$(OBJEXT) strace-ipc_sem.$(OBJEXT) \
-	strace-ipc_shm.$(OBJEXT) strace-ipc_shmctl.$(OBJEXT) \
-	strace-kcmp.$(OBJEXT) strace-kexec.$(OBJEXT) \
-	strace-keyctl.$(OBJEXT) strace-ldt.$(OBJEXT) \
-	strace-link.$(OBJEXT) strace-lookup_dcookie.$(OBJEXT) \
+	strace-filter_qualify.$(OBJEXT) strace-flock.$(OBJEXT) \
+	strace-fs_x_ioctl.$(OBJEXT) strace-futex.$(OBJEXT) \
+	strace-get_robust_list.$(OBJEXT) strace-getcpu.$(OBJEXT) \
+	strace-getcwd.$(OBJEXT) strace-getrandom.$(OBJEXT) \
+	strace-hdio.$(OBJEXT) strace-hostname.$(OBJEXT) \
+	strace-inotify.$(OBJEXT) strace-io.$(OBJEXT) \
+	strace-ioctl.$(OBJEXT) strace-ioperm.$(OBJEXT) \
+	strace-iopl.$(OBJEXT) strace-ioprio.$(OBJEXT) \
+	strace-ipc_msg.$(OBJEXT) strace-ipc_msgctl.$(OBJEXT) \
+	strace-ipc_sem.$(OBJEXT) strace-ipc_shm.$(OBJEXT) \
+	strace-ipc_shmctl.$(OBJEXT) strace-kcmp.$(OBJEXT) \
+	strace-kexec.$(OBJEXT) strace-keyctl.$(OBJEXT) \
+	strace-ldt.$(OBJEXT) strace-link.$(OBJEXT) \
+	strace-listen.$(OBJEXT) strace-lookup_dcookie.$(OBJEXT) \
 	strace-loop.$(OBJEXT) strace-lseek.$(OBJEXT) \
 	strace-mem.$(OBJEXT) strace-membarrier.$(OBJEXT) \
 	strace-memfd_create.$(OBJEXT) strace-mknod.$(OBJEXT) \
 	strace-mmsghdr.$(OBJEXT) strace-mount.$(OBJEXT) \
 	strace-mq.$(OBJEXT) strace-msghdr.$(OBJEXT) \
 	strace-mtd.$(OBJEXT) strace-net.$(OBJEXT) \
-	strace-netlink.$(OBJEXT) strace-netlink_sock_diag.$(OBJEXT) \
-	strace-nlattr.$(OBJEXT) strace-nsfs.$(OBJEXT) \
-	strace-numa.$(OBJEXT) strace-oldstat.$(OBJEXT) \
+	strace-netlink.$(OBJEXT) strace-netlink_crypto.$(OBJEXT) \
+	strace-netlink_inet_diag.$(OBJEXT) \
+	strace-netlink_netlink_diag.$(OBJEXT) \
+	strace-netlink_packet_diag.$(OBJEXT) \
+	strace-netlink_route.$(OBJEXT) \
+	strace-netlink_selinux.$(OBJEXT) \
+	strace-netlink_smc_diag.$(OBJEXT) \
+	strace-netlink_sock_diag.$(OBJEXT) \
+	strace-netlink_unix_diag.$(OBJEXT) strace-nlattr.$(OBJEXT) \
+	strace-nsfs.$(OBJEXT) strace-numa.$(OBJEXT) \
+	strace-number_set.$(OBJEXT) strace-oldstat.$(OBJEXT) \
 	strace-open.$(OBJEXT) strace-or1k_atomic.$(OBJEXT) \
 	strace-pathtrace.$(OBJEXT) strace-perf.$(OBJEXT) \
 	strace-personality.$(OBJEXT) strace-pkeys.$(OBJEXT) \
 	strace-poll.$(OBJEXT) strace-prctl.$(OBJEXT) \
-	strace-print_dev_t.$(OBJEXT) strace-print_mq_attr.$(OBJEXT) \
+	strace-print_dev_t.$(OBJEXT) strace-print_group_req.$(OBJEXT) \
+	strace-print_ifindex.$(OBJEXT) strace-print_mq_attr.$(OBJEXT) \
 	strace-print_msgbuf.$(OBJEXT) \
 	strace-print_sg_req_info.$(OBJEXT) \
 	strace-print_sigevent.$(OBJEXT) strace-print_statfs.$(OBJEXT) \
@@ -384,34 +418,42 @@
 	strace-print_timex.$(OBJEXT) strace-printmode.$(OBJEXT) \
 	strace-printrusage.$(OBJEXT) strace-printsiginfo.$(OBJEXT) \
 	strace-process.$(OBJEXT) strace-process_vm.$(OBJEXT) \
-	strace-ptp.$(OBJEXT) strace-qualify.$(OBJEXT) \
-	strace-quota.$(OBJEXT) strace-readahead.$(OBJEXT) \
-	strace-readlink.$(OBJEXT) strace-reboot.$(OBJEXT) \
-	strace-renameat.$(OBJEXT) strace-resource.$(OBJEXT) \
-	strace-rt_sigframe.$(OBJEXT) strace-rt_sigreturn.$(OBJEXT) \
-	strace-rtc.$(OBJEXT) strace-sched.$(OBJEXT) \
+	strace-ptp.$(OBJEXT) strace-quota.$(OBJEXT) \
+	strace-readahead.$(OBJEXT) strace-readlink.$(OBJEXT) \
+	strace-reboot.$(OBJEXT) strace-renameat.$(OBJEXT) \
+	strace-resource.$(OBJEXT) strace-rt_sigframe.$(OBJEXT) \
+	strace-rt_sigreturn.$(OBJEXT) strace-rtc.$(OBJEXT) \
+	strace-rtnl_addr.$(OBJEXT) strace-rtnl_addrlabel.$(OBJEXT) \
+	strace-rtnl_dcb.$(OBJEXT) strace-rtnl_link.$(OBJEXT) \
+	strace-rtnl_mdb.$(OBJEXT) strace-rtnl_neigh.$(OBJEXT) \
+	strace-rtnl_neightbl.$(OBJEXT) strace-rtnl_netconf.$(OBJEXT) \
+	strace-rtnl_nsid.$(OBJEXT) strace-rtnl_route.$(OBJEXT) \
+	strace-rtnl_rule.$(OBJEXT) strace-rtnl_tc.$(OBJEXT) \
+	strace-rtnl_tc_action.$(OBJEXT) strace-sched.$(OBJEXT) \
 	strace-scsi.$(OBJEXT) strace-seccomp.$(OBJEXT) \
 	strace-sendfile.$(OBJEXT) strace-sg_io_v3.$(OBJEXT) \
-	strace-sg_io_v4.$(OBJEXT) strace-sigaltstack.$(OBJEXT) \
-	strace-signal.$(OBJEXT) strace-signalfd.$(OBJEXT) \
-	strace-sock.$(OBJEXT) strace-sockaddr.$(OBJEXT) \
-	strace-socketutils.$(OBJEXT) strace-sram_alloc.$(OBJEXT) \
-	strace-stat.$(OBJEXT) strace-stat64.$(OBJEXT) \
-	strace-statfs.$(OBJEXT) strace-statx.$(OBJEXT) \
-	strace-strace.$(OBJEXT) strace-swapon.$(OBJEXT) \
+	strace-sg_io_v4.$(OBJEXT) strace-shutdown.$(OBJEXT) \
+	strace-sigaltstack.$(OBJEXT) strace-signal.$(OBJEXT) \
+	strace-signalfd.$(OBJEXT) strace-sock.$(OBJEXT) \
+	strace-sockaddr.$(OBJEXT) strace-socketutils.$(OBJEXT) \
+	strace-sram_alloc.$(OBJEXT) strace-stat.$(OBJEXT) \
+	strace-stat64.$(OBJEXT) strace-statfs.$(OBJEXT) \
+	strace-statx.$(OBJEXT) strace-strace.$(OBJEXT) \
+	strace-string_to_uint.$(OBJEXT) strace-swapon.$(OBJEXT) \
 	strace-syscall.$(OBJEXT) strace-sysctl.$(OBJEXT) \
 	strace-sysinfo.$(OBJEXT) strace-syslog.$(OBJEXT) \
 	strace-sysmips.$(OBJEXT) strace-term.$(OBJEXT) \
 	strace-time.$(OBJEXT) strace-times.$(OBJEXT) \
 	strace-truncate.$(OBJEXT) strace-ubi.$(OBJEXT) \
-	strace-uid.$(OBJEXT) strace-uid16.$(OBJEXT) \
-	strace-umask.$(OBJEXT) strace-umount.$(OBJEXT) \
-	strace-uname.$(OBJEXT) strace-userfaultfd.$(OBJEXT) \
-	strace-ustat.$(OBJEXT) strace-util.$(OBJEXT) \
-	strace-utime.$(OBJEXT) strace-utimes.$(OBJEXT) \
-	strace-v4l2.$(OBJEXT) strace-wait.$(OBJEXT) \
-	strace-xattr.$(OBJEXT) strace-xlat.$(OBJEXT) \
-	strace-xmalloc.$(OBJEXT) $(am__objects_3)
+	strace-ucopy.$(OBJEXT) strace-uid.$(OBJEXT) \
+	strace-uid16.$(OBJEXT) strace-umask.$(OBJEXT) \
+	strace-umount.$(OBJEXT) strace-uname.$(OBJEXT) \
+	strace-userfaultfd.$(OBJEXT) strace-ustat.$(OBJEXT) \
+	strace-util.$(OBJEXT) strace-utime.$(OBJEXT) \
+	strace-utimes.$(OBJEXT) strace-v4l2.$(OBJEXT) \
+	strace-wait.$(OBJEXT) strace-xattr.$(OBJEXT) \
+	strace-xlat.$(OBJEXT) strace-xmalloc.$(OBJEXT) \
+	$(am__objects_3)
 strace_OBJECTS = $(am_strace_OBJECTS)
 am__DEPENDENCIES_1 =
 @USE_LIBUNWIND_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
@@ -508,7 +550,10 @@
   $(am__extra_recursive_targets)
 AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
 	cscope distdir dist dist-all distcheck
-am__extra_recursive_targets = check-valgrind-recursive
+am__extra_recursive_targets = check-valgrind-recursive \
+	check-valgrind-memcheck-recursive \
+	check-valgrind-helgrind-recursive check-valgrind-drd-recursive \
+	check-valgrind-sgcheck-recursive
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
 	$(LISP)config.h.in
 # Read a list of newline-separated strings from the standard input,
@@ -530,7 +575,7 @@
 ETAGS = etags
 CTAGS = ctags
 CSCOPE = cscope
-DIST_SUBDIRS = tests tests-m32 tests-mx32
+DIST_SUBDIRS = . tests tests-m32 tests-mx32
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -592,6 +637,7 @@
 CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
 CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
 CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
 COPYRIGHT_YEAR = @COPYRIGHT_YEAR@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
@@ -626,6 +672,7 @@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANPAGE_DATE = @MANPAGE_DATE@
 MIPS_ABI = @MIPS_ABI@
 MKDIR_P = @MKDIR_P@
 OBJEXT = @OBJEXT@
@@ -711,7 +758,7 @@
 valgrind_tools = @valgrind_tools@
 @HAVE_M32_RUNTIME_TRUE@TESTS_M32 = tests-m32
 @HAVE_MX32_RUNTIME_TRUE@TESTS_MX32 = tests-mx32
-SUBDIRS = tests $(TESTS_M32) $(TESTS_MX32)
+SUBDIRS = . tests $(TESTS_M32) $(TESTS_MX32)
 man_MANS = strace.1
 bin_SCRIPTS = strace-graph strace-log-merge
 OS = linux
@@ -736,9 +783,10 @@
 	xlat/audit_arch.in xlat/baud_options.in xlat/blkpg_ops.in \
 	xlat/bootflags1.in xlat/bootflags2.in xlat/bootflags3.in \
 	xlat/bpf_attach_flags.in xlat/bpf_attach_type.in \
-	xlat/bpf_class.in xlat/bpf_commands.in xlat/bpf_map_types.in \
-	xlat/bpf_map_update_elem_flags.in xlat/bpf_miscop.in \
-	xlat/bpf_mode.in xlat/bpf_op_alu.in xlat/bpf_op_jmp.in \
+	xlat/bpf_class.in xlat/bpf_commands.in xlat/bpf_map_flags.in \
+	xlat/bpf_map_types.in xlat/bpf_map_update_elem_flags.in \
+	xlat/bpf_miscop.in xlat/bpf_mode.in xlat/bpf_op_alu.in \
+	xlat/bpf_op_jmp.in xlat/bpf_prog_flags.in \
 	xlat/bpf_prog_types.in xlat/bpf_rval.in xlat/bpf_size.in \
 	xlat/bpf_src.in xlat/bsg_flags.in xlat/bsg_protocol.in \
 	xlat/bsg_subprotocol.in xlat/bt_protocols.in \
@@ -760,6 +808,7 @@
 	xlat/cacheflush_scope.in xlat/cap.in xlat/cap_mask0.in \
 	xlat/cap_mask1.in xlat/cap_version.in xlat/clockflags.in \
 	xlat/clocknames.in xlat/clone_flags.in xlat/cpuclocknames.in \
+	xlat/crypto_nl_attrs.in xlat/dcb_commands.in \
 	xlat/delete_module_flags.in xlat/dirent_types.in \
 	xlat/dm_flags.in xlat/efd_flags.in xlat/epollctls.in \
 	xlat/epollevents.in xlat/epollflags.in \
@@ -773,7 +822,8 @@
 	xlat/f_seals.in xlat/falloc_flags.in xlat/fan_classes.in \
 	xlat/fan_event_flags.in xlat/fan_init_flags.in \
 	xlat/fan_mark_flags.in xlat/fcntl64cmds.in xlat/fcntlcmds.in \
-	xlat/fdflags.in xlat/fiemap_extent_flags.in \
+	xlat/fdflags.in xlat/fib_rule_actions.in \
+	xlat/fib_rule_flags.in xlat/fiemap_extent_flags.in \
 	xlat/fiemap_flags.in xlat/flockcmds.in xlat/fsmagic.in \
 	xlat/futexops.in xlat/futexwakecmps.in xlat/futexwakeops.in \
 	xlat/getrandom_flags.in xlat/getsockipoptions.in \
@@ -781,39 +831,44 @@
 	xlat/hw_breakpoint_len.in xlat/hw_breakpoint_type.in \
 	xlat/icmpfilterflags.in xlat/if_dqblk_valid.in \
 	xlat/if_dqinfo_flags.in xlat/if_dqinfo_valid.in \
-	xlat/iffflags.in xlat/inet_diag_attrs.in \
-	xlat/inet_diag_extended_flags.in xlat/inet_diag_req_attrs.in \
-	xlat/inet_protocols.in xlat/inotify_flags.in \
-	xlat/inotify_init_flags.in xlat/ioctl_dirs.in \
-	xlat/ioprio_class.in xlat/ioprio_who.in xlat/ip_cmsg_types.in \
+	xlat/ifaddrflags.in xlat/iffflags.in xlat/inet_diag_attrs.in \
+	xlat/inet_diag_bytecodes.in xlat/inet_diag_extended_flags.in \
+	xlat/inet_diag_req_attrs.in xlat/inet_protocols.in \
+	xlat/inotify_flags.in xlat/inotify_init_flags.in \
+	xlat/ioctl_dirs.in xlat/ioprio_class.in xlat/ioprio_who.in \
+	xlat/ip_cmsg_types.in xlat/ip_type_of_services.in \
 	xlat/ipc_msg_flags.in xlat/ipccalls.in xlat/itimer_which.in \
 	xlat/kcmp_types.in xlat/kexec_arch_values.in \
 	xlat/kexec_file_load_flags.in xlat/kexec_load_flags.in \
 	xlat/key_perms.in xlat/key_reqkeys.in xlat/key_spec.in \
 	xlat/keyctl_commands.in xlat/lockfcmds.in xlat/loop_cmds.in \
 	xlat/loop_crypt_type_options.in xlat/loop_flags_options.in \
-	xlat/madvise_cmds.in xlat/mbindflags.in xlat/mctl_sync.in \
-	xlat/membarrier_cmds.in xlat/memfd_create_flags.in \
-	xlat/mempolicyflags.in xlat/mlock_flags.in \
-	xlat/mlockall_flags.in xlat/mmap_flags.in xlat/mmap_prot.in \
-	xlat/modem_flags.in xlat/modetypes.in \
+	xlat/lwtunnel_encap_types.in xlat/madvise_cmds.in \
+	xlat/mbindflags.in xlat/mctl_sync.in xlat/membarrier_cmds.in \
+	xlat/memfd_create_flags.in xlat/mempolicyflags.in \
+	xlat/mlock_flags.in xlat/mlockall_flags.in xlat/mmap_flags.in \
+	xlat/mmap_prot.in xlat/modem_flags.in xlat/modetypes.in \
 	xlat/module_init_flags.in xlat/mount_flags.in \
 	xlat/move_pages_flags.in xlat/mq_attr_flags.in \
 	xlat/mremap_flags.in xlat/msg_flags.in xlat/msgctl_flags.in \
 	xlat/mtd_file_mode_options.in xlat/mtd_flags_options.in \
 	xlat/mtd_mode_options.in xlat/mtd_nandecc_options.in \
 	xlat/mtd_otp_options.in xlat/mtd_type_options.in \
-	xlat/name_to_handle_at_flags.in xlat/netlink_diag_attrs.in \
-	xlat/netlink_diag_show.in xlat/netlink_flags.in \
-	xlat/netlink_get_flags.in xlat/netlink_new_flags.in \
-	xlat/netlink_protocols.in xlat/netlink_socket_flags.in \
-	xlat/netlink_states.in xlat/netlink_types.in \
-	xlat/nl_audit_types.in xlat/nl_netfilter_msg_types.in \
+	xlat/name_to_handle_at_flags.in \
+	xlat/neighbor_cache_entry_flags.in \
+	xlat/neighbor_cache_entry_states.in xlat/netlink_ack_flags.in \
+	xlat/netlink_diag_attrs.in xlat/netlink_diag_show.in \
+	xlat/netlink_flags.in xlat/netlink_get_flags.in \
+	xlat/netlink_new_flags.in xlat/netlink_protocols.in \
+	xlat/netlink_socket_flags.in xlat/netlink_states.in \
+	xlat/netlink_types.in xlat/nl_audit_types.in \
+	xlat/nl_crypto_types.in xlat/nl_netfilter_msg_types.in \
 	xlat/nl_netfilter_subsys_ids.in xlat/nl_route_types.in \
 	xlat/nl_selinux_types.in xlat/nl_sock_diag_types.in \
-	xlat/nl_xfrm_types.in xlat/notifyflags.in \
-	xlat/nt_descriptor_types.in xlat/open_access_modes.in \
-	xlat/open_mode_flags.in xlat/packet_diag_attrs.in \
+	xlat/nl_xfrm_types.in xlat/nlmsgerr_attrs.in \
+	xlat/notifyflags.in xlat/nt_descriptor_types.in \
+	xlat/open_access_modes.in xlat/open_mode_flags.in \
+	xlat/packet_diag_attrs.in xlat/packet_diag_info_flags.in \
 	xlat/packet_diag_show.in xlat/packet_mreq_type.in \
 	xlat/perf_attr_size.in xlat/perf_branch_sample_type.in \
 	xlat/perf_event_open_flags.in xlat/perf_event_read_format.in \
@@ -830,13 +885,26 @@
 	xlat/ptrace_events.in xlat/ptrace_peeksiginfo_flags.in \
 	xlat/ptrace_setoptions_flags.in xlat/quota_formats.in \
 	xlat/quotacmds.in xlat/quotatypes.in xlat/rename_flags.in \
-	xlat/resource_flags.in xlat/resources.in xlat/rwf_flags.in \
-	xlat/sa_handler_values.in xlat/sched_flags.in \
-	xlat/schedulers.in xlat/scmvals.in xlat/scsi_sg_commands.in \
-	xlat/secbits.in xlat/seccomp_filter_flags.in \
-	xlat/seccomp_mode.in xlat/seccomp_ops.in \
-	xlat/seccomp_ret_action.in xlat/semctl_flags.in \
-	xlat/semop_flags.in xlat/setns_types.in \
+	xlat/resource_flags.in xlat/resources.in \
+	xlat/route_nexthop_flags.in xlat/routing_flags.in \
+	xlat/routing_protocols.in xlat/routing_scopes.in \
+	xlat/routing_table_ids.in xlat/routing_types.in \
+	xlat/rtnl_addr_attrs.in xlat/rtnl_addrlabel_attrs.in \
+	xlat/rtnl_dcb_attrs.in xlat/rtnl_ifla_brport_attrs.in \
+	xlat/rtnl_ifla_info_attrs.in xlat/rtnl_ifla_port_attrs.in \
+	xlat/rtnl_ifla_vf_port_attrs.in xlat/rtnl_ifla_xdp_attrs.in \
+	xlat/rtnl_link_attrs.in xlat/rtnl_mdb_attrs.in \
+	xlat/rtnl_neigh_attrs.in xlat/rtnl_neightbl_attrs.in \
+	xlat/rtnl_neightbl_parms_attrs.in xlat/rtnl_netconf_attrs.in \
+	xlat/rtnl_nsid_attrs.in xlat/rtnl_route_attrs.in \
+	xlat/rtnl_rta_metrics_attrs.in xlat/rtnl_rule_attrs.in \
+	xlat/rtnl_tc_action_attrs.in xlat/rtnl_tc_attrs.in \
+	xlat/rwf_flags.in xlat/sa_handler_values.in \
+	xlat/sched_flags.in xlat/schedulers.in xlat/scmvals.in \
+	xlat/scsi_sg_commands.in xlat/secbits.in \
+	xlat/seccomp_filter_flags.in xlat/seccomp_mode.in \
+	xlat/seccomp_ops.in xlat/seccomp_ret_action.in \
+	xlat/semctl_flags.in xlat/semop_flags.in xlat/setns_types.in \
 	xlat/setsockipoptions.in xlat/setsockipv6options.in \
 	xlat/sfd_flags.in xlat/sg_io_dxfer_direction.in \
 	xlat/sg_io_flags.in xlat/sg_io_info.in xlat/sg_scsi_reset.in \
@@ -848,9 +916,10 @@
 	xlat/sigill_codes.in xlat/siginfo_codes.in \
 	xlat/sigpoll_codes.in xlat/sigprocmaskcmds.in \
 	xlat/sigprof_codes.in xlat/sigsegv_codes.in \
-	xlat/sigsys_codes.in xlat/sigtrap_codes.in \
+	xlat/sigsys_codes.in xlat/sigtrap_codes.in xlat/skf_ad.in \
 	xlat/smc_diag_attrs.in xlat/smc_diag_extended_flags.in \
-	xlat/smc_states.in xlat/sock_type_flags.in xlat/socketcalls.in \
+	xlat/smc_link_group_roles.in xlat/smc_states.in \
+	xlat/sock_type_flags.in xlat/socketcalls.in \
 	xlat/socketlayers.in xlat/sockipoptions.in \
 	xlat/sockipv6options.in xlat/sockipxoptions.in \
 	xlat/sockoptions.in xlat/sockpacketoptions.in \
@@ -868,8 +937,9 @@
 	xlat/tcflsh_options.in xlat/tcp_state_flags.in \
 	xlat/tcp_states.in xlat/tcxonc_options.in xlat/timerfdflags.in \
 	xlat/ubi_volume_props.in xlat/ubi_volume_types.in \
-	xlat/uffd_api_flags.in xlat/uffd_copy_flags.in \
-	xlat/uffd_flags.in xlat/uffd_register_ioctl_flags.in \
+	xlat/uffd_api_features.in xlat/uffd_api_flags.in \
+	xlat/uffd_copy_flags.in xlat/uffd_flags.in \
+	xlat/uffd_register_ioctl_flags.in \
 	xlat/uffd_register_mode_flags.in xlat/uffd_zeropage_flags.in \
 	xlat/umount_flags.in xlat/unix_diag_attrs.in \
 	xlat/unix_diag_show.in xlat/unshare_flags.in xlat/usagewho.in \
@@ -886,7 +956,8 @@
 	xlat/v4l2_tuner_rxsubchanses.in xlat/v4l2_tuner_types.in \
 	xlat/v4l2_vbi_flags.in xlat/wait4_options.in \
 	xlat/waitid_types.in xlat/whence_codes.in xlat/xattrflags.in \
-	xlat/xfs_dqblk_flags.in xlat/xfs_quota_flags.in
+	xlat/xdp_flags.in xlat/xfs_dqblk_flags.in \
+	xlat/xfs_quota_flags.in
 XLAT_HEADER_FILES = xlat/access_flags.h xlat/addrfams.h \
 	xlat/adjtimex_modes.h xlat/adjtimex_state.h \
 	xlat/adjtimex_status.h xlat/advise.h xlat/af_packet_types.h \
@@ -895,9 +966,10 @@
 	xlat/baud_options.h xlat/blkpg_ops.h xlat/bootflags1.h \
 	xlat/bootflags2.h xlat/bootflags3.h xlat/bpf_attach_flags.h \
 	xlat/bpf_attach_type.h xlat/bpf_class.h xlat/bpf_commands.h \
-	xlat/bpf_map_types.h xlat/bpf_map_update_elem_flags.h \
-	xlat/bpf_miscop.h xlat/bpf_mode.h xlat/bpf_op_alu.h \
-	xlat/bpf_op_jmp.h xlat/bpf_prog_types.h xlat/bpf_rval.h \
+	xlat/bpf_map_flags.h xlat/bpf_map_types.h \
+	xlat/bpf_map_update_elem_flags.h xlat/bpf_miscop.h \
+	xlat/bpf_mode.h xlat/bpf_op_alu.h xlat/bpf_op_jmp.h \
+	xlat/bpf_prog_flags.h xlat/bpf_prog_types.h xlat/bpf_rval.h \
 	xlat/bpf_size.h xlat/bpf_src.h xlat/bsg_flags.h \
 	xlat/bsg_protocol.h xlat/bsg_subprotocol.h xlat/bt_protocols.h \
 	xlat/btrfs_balance_args.h xlat/btrfs_balance_ctl_cmds.h \
@@ -916,6 +988,7 @@
 	xlat/cacheflush_scope.h xlat/cap.h xlat/cap_mask0.h \
 	xlat/cap_mask1.h xlat/cap_version.h xlat/clockflags.h \
 	xlat/clocknames.h xlat/clone_flags.h xlat/cpuclocknames.h \
+	xlat/crypto_nl_attrs.h xlat/dcb_commands.h \
 	xlat/delete_module_flags.h xlat/dirent_types.h xlat/dm_flags.h \
 	xlat/efd_flags.h xlat/epollctls.h xlat/epollevents.h \
 	xlat/epollflags.h xlat/ethernet_protocols.h xlat/evdev_abs.h \
@@ -927,51 +1000,59 @@
 	xlat/f_seals.h xlat/falloc_flags.h xlat/fan_classes.h \
 	xlat/fan_event_flags.h xlat/fan_init_flags.h \
 	xlat/fan_mark_flags.h xlat/fcntl64cmds.h xlat/fcntlcmds.h \
-	xlat/fdflags.h xlat/fiemap_extent_flags.h xlat/fiemap_flags.h \
+	xlat/fdflags.h xlat/fib_rule_actions.h xlat/fib_rule_flags.h \
+	xlat/fiemap_extent_flags.h xlat/fiemap_flags.h \
 	xlat/flockcmds.h xlat/fsmagic.h xlat/futexops.h \
 	xlat/futexwakecmps.h xlat/futexwakeops.h \
 	xlat/getrandom_flags.h xlat/getsockipoptions.h \
 	xlat/getsockipv6options.h xlat/hci_channels.h \
 	xlat/hw_breakpoint_len.h xlat/hw_breakpoint_type.h \
 	xlat/icmpfilterflags.h xlat/if_dqblk_valid.h \
-	xlat/if_dqinfo_flags.h xlat/if_dqinfo_valid.h xlat/iffflags.h \
-	xlat/inet_diag_attrs.h xlat/inet_diag_extended_flags.h \
+	xlat/if_dqinfo_flags.h xlat/if_dqinfo_valid.h \
+	xlat/ifaddrflags.h xlat/iffflags.h xlat/inet_diag_attrs.h \
+	xlat/inet_diag_bytecodes.h xlat/inet_diag_extended_flags.h \
 	xlat/inet_diag_req_attrs.h xlat/inet_protocols.h \
 	xlat/inotify_flags.h xlat/inotify_init_flags.h \
 	xlat/ioctl_dirs.h xlat/ioprio_class.h xlat/ioprio_who.h \
-	xlat/ip_cmsg_types.h xlat/ipc_msg_flags.h xlat/ipccalls.h \
-	xlat/itimer_which.h xlat/kcmp_types.h xlat/kexec_arch_values.h \
+	xlat/ip_cmsg_types.h xlat/ip_type_of_services.h \
+	xlat/ipc_msg_flags.h xlat/ipccalls.h xlat/itimer_which.h \
+	xlat/kcmp_types.h xlat/kexec_arch_values.h \
 	xlat/kexec_file_load_flags.h xlat/kexec_load_flags.h \
 	xlat/key_perms.h xlat/key_reqkeys.h xlat/key_spec.h \
 	xlat/keyctl_commands.h xlat/lockfcmds.h xlat/loop_cmds.h \
 	xlat/loop_crypt_type_options.h xlat/loop_flags_options.h \
-	xlat/madvise_cmds.h xlat/mbindflags.h xlat/mctl_sync.h \
-	xlat/membarrier_cmds.h xlat/memfd_create_flags.h \
-	xlat/mempolicyflags.h xlat/mlock_flags.h xlat/mlockall_flags.h \
-	xlat/mmap_flags.h xlat/mmap_prot.h xlat/modem_flags.h \
-	xlat/modetypes.h xlat/module_init_flags.h xlat/mount_flags.h \
+	xlat/lwtunnel_encap_types.h xlat/madvise_cmds.h \
+	xlat/mbindflags.h xlat/mctl_sync.h xlat/membarrier_cmds.h \
+	xlat/memfd_create_flags.h xlat/mempolicyflags.h \
+	xlat/mlock_flags.h xlat/mlockall_flags.h xlat/mmap_flags.h \
+	xlat/mmap_prot.h xlat/modem_flags.h xlat/modetypes.h \
+	xlat/module_init_flags.h xlat/mount_flags.h \
 	xlat/move_pages_flags.h xlat/mq_attr_flags.h \
 	xlat/mremap_flags.h xlat/msg_flags.h xlat/msgctl_flags.h \
 	xlat/mtd_file_mode_options.h xlat/mtd_flags_options.h \
 	xlat/mtd_mode_options.h xlat/mtd_nandecc_options.h \
 	xlat/mtd_otp_options.h xlat/mtd_type_options.h \
-	xlat/name_to_handle_at_flags.h xlat/netlink_diag_attrs.h \
-	xlat/netlink_diag_show.h xlat/netlink_flags.h \
-	xlat/netlink_get_flags.h xlat/netlink_new_flags.h \
-	xlat/netlink_protocols.h xlat/netlink_socket_flags.h \
-	xlat/netlink_states.h xlat/netlink_types.h \
-	xlat/nl_audit_types.h xlat/nl_netfilter_msg_types.h \
+	xlat/name_to_handle_at_flags.h \
+	xlat/neighbor_cache_entry_flags.h \
+	xlat/neighbor_cache_entry_states.h xlat/netlink_ack_flags.h \
+	xlat/netlink_diag_attrs.h xlat/netlink_diag_show.h \
+	xlat/netlink_flags.h xlat/netlink_get_flags.h \
+	xlat/netlink_new_flags.h xlat/netlink_protocols.h \
+	xlat/netlink_socket_flags.h xlat/netlink_states.h \
+	xlat/netlink_types.h xlat/nl_audit_types.h \
+	xlat/nl_crypto_types.h xlat/nl_netfilter_msg_types.h \
 	xlat/nl_netfilter_subsys_ids.h xlat/nl_route_types.h \
 	xlat/nl_selinux_types.h xlat/nl_sock_diag_types.h \
-	xlat/nl_xfrm_types.h xlat/notifyflags.h \
+	xlat/nl_xfrm_types.h xlat/nlmsgerr_attrs.h xlat/notifyflags.h \
 	xlat/nt_descriptor_types.h xlat/open_access_modes.h \
 	xlat/open_mode_flags.h xlat/packet_diag_attrs.h \
-	xlat/packet_diag_show.h xlat/packet_mreq_type.h \
-	xlat/perf_attr_size.h xlat/perf_branch_sample_type.h \
-	xlat/perf_event_open_flags.h xlat/perf_event_read_format.h \
-	xlat/perf_event_sample_format.h xlat/perf_hw_cache_id.h \
-	xlat/perf_hw_cache_op_id.h xlat/perf_hw_cache_op_result_id.h \
-	xlat/perf_hw_id.h xlat/perf_sw_ids.h xlat/perf_type_id.h \
+	xlat/packet_diag_info_flags.h xlat/packet_diag_show.h \
+	xlat/packet_mreq_type.h xlat/perf_attr_size.h \
+	xlat/perf_branch_sample_type.h xlat/perf_event_open_flags.h \
+	xlat/perf_event_read_format.h xlat/perf_event_sample_format.h \
+	xlat/perf_hw_cache_id.h xlat/perf_hw_cache_op_id.h \
+	xlat/perf_hw_cache_op_result_id.h xlat/perf_hw_id.h \
+	xlat/perf_sw_ids.h xlat/perf_type_id.h \
 	xlat/personality_flags.h xlat/personality_types.h \
 	xlat/pkey_access.h xlat/policies.h xlat/pollflags.h \
 	xlat/pr_cap_ambient.h xlat/pr_dumpable.h xlat/pr_fp_mode.h \
@@ -981,10 +1062,23 @@
 	xlat/ptrace_events.h xlat/ptrace_peeksiginfo_flags.h \
 	xlat/ptrace_setoptions_flags.h xlat/quota_formats.h \
 	xlat/quotacmds.h xlat/quotatypes.h xlat/rename_flags.h \
-	xlat/resource_flags.h xlat/resources.h xlat/rwf_flags.h \
-	xlat/sa_handler_values.h xlat/sched_flags.h xlat/schedulers.h \
-	xlat/scmvals.h xlat/scsi_sg_commands.h xlat/secbits.h \
-	xlat/seccomp_filter_flags.h xlat/seccomp_mode.h \
+	xlat/resource_flags.h xlat/resources.h \
+	xlat/route_nexthop_flags.h xlat/routing_flags.h \
+	xlat/routing_protocols.h xlat/routing_scopes.h \
+	xlat/routing_table_ids.h xlat/routing_types.h \
+	xlat/rtnl_addr_attrs.h xlat/rtnl_addrlabel_attrs.h \
+	xlat/rtnl_dcb_attrs.h xlat/rtnl_ifla_brport_attrs.h \
+	xlat/rtnl_ifla_info_attrs.h xlat/rtnl_ifla_port_attrs.h \
+	xlat/rtnl_ifla_vf_port_attrs.h xlat/rtnl_ifla_xdp_attrs.h \
+	xlat/rtnl_link_attrs.h xlat/rtnl_mdb_attrs.h \
+	xlat/rtnl_neigh_attrs.h xlat/rtnl_neightbl_attrs.h \
+	xlat/rtnl_neightbl_parms_attrs.h xlat/rtnl_netconf_attrs.h \
+	xlat/rtnl_nsid_attrs.h xlat/rtnl_route_attrs.h \
+	xlat/rtnl_rta_metrics_attrs.h xlat/rtnl_rule_attrs.h \
+	xlat/rtnl_tc_action_attrs.h xlat/rtnl_tc_attrs.h \
+	xlat/rwf_flags.h xlat/sa_handler_values.h xlat/sched_flags.h \
+	xlat/schedulers.h xlat/scmvals.h xlat/scsi_sg_commands.h \
+	xlat/secbits.h xlat/seccomp_filter_flags.h xlat/seccomp_mode.h \
 	xlat/seccomp_ops.h xlat/seccomp_ret_action.h \
 	xlat/semctl_flags.h xlat/semop_flags.h xlat/setns_types.h \
 	xlat/setsockipoptions.h xlat/setsockipv6options.h \
@@ -997,17 +1091,18 @@
 	xlat/sigfpe_codes.h xlat/sigill_codes.h xlat/siginfo_codes.h \
 	xlat/sigpoll_codes.h xlat/sigprocmaskcmds.h \
 	xlat/sigprof_codes.h xlat/sigsegv_codes.h xlat/sigsys_codes.h \
-	xlat/sigtrap_codes.h xlat/smc_diag_attrs.h \
-	xlat/smc_diag_extended_flags.h xlat/smc_states.h \
-	xlat/sock_type_flags.h xlat/socketcalls.h xlat/socketlayers.h \
-	xlat/sockipoptions.h xlat/sockipv6options.h \
-	xlat/sockipxoptions.h xlat/sockoptions.h \
-	xlat/sockpacketoptions.h xlat/sockrawoptions.h \
-	xlat/socksctpoptions.h xlat/socktcpoptions.h xlat/socktypes.h \
-	xlat/splice_flags.h xlat/sram_alloc_flags.h \
-	xlat/statfs_flags.h xlat/statx_attrs.h xlat/statx_masks.h \
-	xlat/swap_flags.h xlat/sync_file_range_flags.h \
-	xlat/sysctl_kern.h xlat/sysctl_net.h xlat/sysctl_net_core.h \
+	xlat/sigtrap_codes.h xlat/skf_ad.h xlat/smc_diag_attrs.h \
+	xlat/smc_diag_extended_flags.h xlat/smc_link_group_roles.h \
+	xlat/smc_states.h xlat/sock_type_flags.h xlat/socketcalls.h \
+	xlat/socketlayers.h xlat/sockipoptions.h \
+	xlat/sockipv6options.h xlat/sockipxoptions.h \
+	xlat/sockoptions.h xlat/sockpacketoptions.h \
+	xlat/sockrawoptions.h xlat/socksctpoptions.h \
+	xlat/socktcpoptions.h xlat/socktypes.h xlat/splice_flags.h \
+	xlat/sram_alloc_flags.h xlat/statfs_flags.h xlat/statx_attrs.h \
+	xlat/statx_masks.h xlat/swap_flags.h \
+	xlat/sync_file_range_flags.h xlat/sysctl_kern.h \
+	xlat/sysctl_net.h xlat/sysctl_net_core.h \
 	xlat/sysctl_net_ipv4.h xlat/sysctl_net_ipv4_conf.h \
 	xlat/sysctl_net_ipv4_route.h xlat/sysctl_net_ipv6.h \
 	xlat/sysctl_net_ipv6_route.h xlat/sysctl_net_unix.h \
@@ -1015,8 +1110,8 @@
 	xlat/sysmips_operations.h xlat/tcflsh_options.h \
 	xlat/tcp_state_flags.h xlat/tcp_states.h xlat/tcxonc_options.h \
 	xlat/timerfdflags.h xlat/ubi_volume_props.h \
-	xlat/ubi_volume_types.h xlat/uffd_api_flags.h \
-	xlat/uffd_copy_flags.h xlat/uffd_flags.h \
+	xlat/ubi_volume_types.h xlat/uffd_api_features.h \
+	xlat/uffd_api_flags.h xlat/uffd_copy_flags.h xlat/uffd_flags.h \
 	xlat/uffd_register_ioctl_flags.h \
 	xlat/uffd_register_mode_flags.h xlat/uffd_zeropage_flags.h \
 	xlat/umount_flags.h xlat/unix_diag_attrs.h \
@@ -1033,13 +1128,13 @@
 	xlat/v4l2_tuner_audmodes.h xlat/v4l2_tuner_capabilities.h \
 	xlat/v4l2_tuner_rxsubchanses.h xlat/v4l2_tuner_types.h \
 	xlat/v4l2_vbi_flags.h xlat/wait4_options.h xlat/waitid_types.h \
-	xlat/whence_codes.h xlat/xattrflags.h xlat/xfs_dqblk_flags.h \
-	xlat/xfs_quota_flags.h
+	xlat/whence_codes.h xlat/xattrflags.h xlat/xdp_flags.h \
+	xlat/xfs_dqblk_flags.h xlat/xfs_quota_flags.h
 strace_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_2) \
 	$(CODE_COVERAGE_CPPFLAGS)
 strace_CFLAGS = $(AM_CFLAGS) $(CODE_COVERAGE_CFLAGS)
 strace_LDFLAGS = $(am__append_3)
-strace_LDADD = libstrace.a $(am__append_4) $(CODE_COVERAGE_LDFLAGS) \
+strace_LDADD = libstrace.a $(am__append_4) $(CODE_COVERAGE_LIBS) \
 	$(am__append_5) $(am__append_9)
 noinst_LIBRARIES = libstrace.a $(am__append_6) $(am__append_10)
 libstrace_a_CPPFLAGS = $(strace_CPPFLAGS)
@@ -1058,43 +1153,57 @@
 	upoke.c		\
 	# end of libstrace_a_SOURCES
 
-strace_SOURCES = access.c affinity.c aio.c alpha.c bjm.c block.c bpf.c \
-	btrfs.c cacheflush.c capability.c caps0.h caps1.h chdir.c \
-	chmod.c clone.c copy_file_range.c count.c defs.h desc.c \
-	dirent.c dirent64.c dm.c dyxlat.c empty.h epoll.c evdev.c \
-	eventfd.c execve.c fadvise.c fallocate.c fanotify.c fchownat.c \
-	fcntl.c fetch_seccomp_fprog.c fetch_struct_flock.c \
+strace_SOURCES = access.c affinity.c aio.c alpha.c basic_filters.c \
+	bind.c bjm.c block.c bpf.c bpf_filter.c bpf_filter.h \
+	bpf_fprog.h bpf_seccomp_filter.c bpf_sock_filter.c btrfs.c \
+	cacheflush.c capability.c caps0.h caps1.h chdir.c chmod.c \
+	clone.c copy_file_range.c count.c defs.h desc.c dirent.c \
+	dirent64.c dm.c dyxlat.c empty.h epoll.c error_prints.c \
+	error_prints.h evdev.c eventfd.c execve.c fadvise.c \
+	fallocate.c fanotify.c fchownat.c fcntl.c fetch_bpf_fprog.c \
+	fetch_struct_flock.c fetch_struct_keyctl_kdf_params.c \
 	fetch_struct_mmsghdr.c fetch_struct_msghdr.c \
 	fetch_struct_stat.c fetch_struct_stat64.c \
-	fetch_struct_statfs.c file_handle.c file_ioctl.c fs_x_ioctl.c \
-	flock.c flock.h futex.c gcc_compat.h get_robust_list.c \
-	getcpu.c getcwd.c getrandom.c hdio.c hostname.c inotify.c io.c \
-	ioctl.c ioperm.c iopl.c ioprio.c ipc_defs.h ipc_msg.c \
-	ipc_msgctl.c ipc_sem.c ipc_shm.c ipc_shmctl.c kcmp.c \
-	kernel_types.h kexec.c keyctl.c ldt.c link.c linux/asm_stat.h \
-	linux/x32/asm_stat.h linux/x86_64/asm_stat.h lookup_dcookie.c \
-	loop.c lseek.c macros.h mem.c membarrier.c memfd_create.c \
-	mknod.c mmsghdr.c mount.c mpers_type.h mq.c msghdr.c msghdr.h \
-	mtd.c native_defs.h net.c netlink.c netlink.h \
-	netlink_sock_diag.c nlattr.c nlattr.h nsfs.c nsfs.h nsig.h \
-	numa.c oldstat.c open.c or1k_atomic.c pathtrace.c perf.c \
-	perf_event_struct.h personality.c pkeys.c poll.c prctl.c \
-	print_dev_t.c print_fields.h print_mq_attr.c print_msgbuf.c \
-	print_sg_req_info.c print_sigevent.c print_statfs.c \
-	print_struct_stat.c print_time.c print_timespec.c \
-	print_timeval.c print_timex.c printmode.c printrusage.c \
-	printsiginfo.c printsiginfo.h process.c process_vm.c ptp.c \
-	ptrace.h qualify.c quota.c readahead.c readlink.c reboot.c \
-	regs.h renameat.c resource.c rt_sigframe.c rt_sigreturn.c \
-	rtc.c sched.c sched_attr.h scsi.c seccomp.c seccomp_fprog.h \
-	sendfile.c sg_io_v3.c sg_io_v4.c sigaltstack.c sigevent.h \
-	signal.c signalfd.c sock.c sockaddr.c socketutils.c \
+	fetch_struct_statfs.c file_handle.c file_ioctl.c \
+	filter_qualify.c filter.h flock.c flock.h fs_x_ioctl.c futex.c \
+	gcc_compat.h get_robust_list.c getcpu.c getcwd.c getrandom.c \
+	hdio.c hostname.c inotify.c io.c ioctl.c ioperm.c iopl.c \
+	ioprio.c ipc_defs.h ipc_msg.c ipc_msgctl.c ipc_sem.c ipc_shm.c \
+	ipc_shmctl.c kcmp.c kernel_types.h kexec.c keyctl.c \
+	keyctl_kdf_params.h ldt.c link.c linux/asm_stat.h \
+	linux/x32/asm_stat.h linux/x86_64/asm_stat.h listen.c \
+	lookup_dcookie.c loop.c lseek.c macros.h mem.c membarrier.c \
+	memfd_create.c mknod.c mmsghdr.c mount.c mpers_type.h mq.c \
+	msghdr.c msghdr.h mtd.c native_defs.h negated_errno.h net.c \
+	netlink.c netlink.h netlink_crypto.c netlink_sock_diag.h \
+	netlink_inet_diag.c netlink_netlink_diag.c \
+	netlink_packet_diag.c netlink_route.c netlink_route.h \
+	netlink_selinux.c netlink_smc_diag.c netlink_sock_diag.c \
+	netlink_unix_diag.c nlattr.c nlattr.h nsfs.c nsfs.h nsig.h \
+	numa.c number_set.c number_set.h oldstat.c open.c \
+	or1k_atomic.c pathtrace.c perf.c perf_event_struct.h \
+	personality.c pkeys.c poll.c prctl.c print_dev_t.c \
+	print_group_req.c print_fields.h print_ifindex.c \
+	print_mq_attr.c print_msgbuf.c print_sg_req_info.c \
+	print_sigevent.c print_statfs.c print_struct_stat.c \
+	print_time.c print_timespec.c print_timeval.c print_timex.c \
+	printmode.c printrusage.c printsiginfo.c printsiginfo.h \
+	process.c process_vm.c ptp.c ptrace.h quota.c readahead.c \
+	readlink.c reboot.c regs.h renameat.c resource.c rt_sigframe.c \
+	rt_sigreturn.c rtc.c rtnl_addr.c rtnl_addrlabel.c rtnl_dcb.c \
+	rtnl_link.c rtnl_mdb.c rtnl_neigh.c rtnl_neightbl.c \
+	rtnl_netconf.c rtnl_nsid.c rtnl_route.c rtnl_rule.c rtnl_tc.c \
+	rtnl_tc_action.c sched.c sched_attr.h scsi.c seccomp.c \
+	sendfile.c sg_io_v3.c sg_io_v4.c shutdown.c sigaltstack.c \
+	sigevent.h signal.c signalfd.c sock.c sockaddr.c socketutils.c \
 	sram_alloc.c stat.c stat.h stat64.c statfs.c statfs.h statx.c \
-	statx.h strace.c swapon.c syscall.c sysctl.c sysent.h \
-	sysinfo.c syslog.c sysmips.c term.c time.c times.c truncate.c \
-	ubi.c uid.c uid16.c umask.c umount.c uname.c userfaultfd.c \
+	statx.h strace.c string_to_uint.h string_to_uint.c \
+	supported_personalities.h swapon.c syscall.c sysctl.c sysent.h \
+	sysent_shorthand_defs.h sysent_shorthand_undefs.h sysinfo.c \
+	syslog.c sysmips.c term.c time.c times.c truncate.c ubi.c \
+	ucopy.c uid.c uid16.c umask.c umount.c uname.c userfaultfd.c \
 	ustat.c util.c utime.c utimes.c v4l2.c wait.c xattr.c xlat.c \
-	xlat.h xmalloc.c $(am__append_1)
+	xlat.h xmalloc.c xmalloc.h $(am__append_1)
 CODE_COVERAGE_BRANCH_COVERAGE = 1
 CODE_COVERAGE_GENHTML_OPTIONS = $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) \
 	--prefix $(shell cd $(abs_top_srcdir)/.. && pwd || echo .)
@@ -1654,7 +1763,7 @@
 ioctl_redefs_h = $(filter-out ioctl_redefs0.h,$(subst ioctlent,ioctl_redefs,$(ioctlent_h)))
 BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) native_printer_decls.h \
 	native_printer_defs.h printers.h sen.h sys_func.h .version \
-	$(am__append_7) $(am__append_11)
+	scno.h $(am__append_7) $(am__append_11)
 CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \
 	ioctl_iocdef.h ioctl_iocdef.i native_printer_decls.h \
 	native_printer_defs.h printers.h sen.h sys_func.h syscallent.i \
@@ -1668,7 +1777,7 @@
 SCNO_SED = /TRACE_INDIRECT_SUBCALL/d; s/^\[[[:space:]]*\($(digits)\)\][[:space:]]*=[[:space:]]*{[^,]*,[^,]*,[^,]*,[[:space:]]*"\($(al_nums)\)"[[:space:]]*},.*/\#ifndef __NR_\2\n\# define __NR_\2 (SYSCALL_BIT | \1)\n\#endif/p
 
 # Generated by ./generate_mpers_am.sh; do not edit.
-mpers_source_files = block.c btrfs.c dirent.c evdev.c fetch_seccomp_fprog.c fetch_struct_flock.c fetch_struct_mmsghdr.c fetch_struct_msghdr.c fetch_struct_stat.c fetch_struct_stat64.c fetch_struct_statfs.c hdio.c ipc_msgctl.c ipc_shmctl.c loop.c mtd.c print_mq_attr.c print_msgbuf.c print_sg_req_info.c print_sigevent.c print_time.c print_timespec.c print_timeval.c print_timex.c printrusage.c printsiginfo.c rt_sigreturn.c rtc.c sg_io_v3.c sigaltstack.c sock.c sysinfo.c times.c ustat.c utime.c v4l2.c 
+mpers_source_files = block.c btrfs.c dirent.c evdev.c fetch_bpf_fprog.c fetch_struct_flock.c fetch_struct_keyctl_kdf_params.c fetch_struct_mmsghdr.c fetch_struct_msghdr.c fetch_struct_stat.c fetch_struct_stat64.c fetch_struct_statfs.c hdio.c ipc_msgctl.c ipc_shmctl.c loop.c mtd.c print_group_req.c print_mq_attr.c print_msgbuf.c print_sg_req_info.c print_sigevent.c print_time.c print_timespec.c print_timeval.c print_timex.c printrusage.c printsiginfo.c rt_sigreturn.c rtc.c sg_io_v3.c sigaltstack.c sock.c sysinfo.c times.c ustat.c utime.c v4l2.c 
 
 # defines mpers_source_files
 srcdir_mpers_source_files = $(patsubst %,$(srcdir)/%,$(mpers_source_files))
@@ -1746,6 +1855,8 @@
 
 distclean-hdr:
 	-rm -f config.h stamp-h1
+strace.1: $(top_builddir)/config.status $(srcdir)/strace.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
 strace.spec: $(top_builddir)/config.status $(srcdir)/strace.spec.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 debian/changelog: $(top_builddir)/config.status $(top_srcdir)/debian/changelog.in
@@ -1860,8 +1971,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-btrfs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-dirent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-evdev.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-fetch_bpf_fprog.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-fetch_struct_flock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-fetch_struct_keyctl_kdf_params.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-fetch_struct_msghdr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-fetch_struct_stat.Po@am__quote@
@@ -1872,6 +1984,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-ipc_shmctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-loop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-mtd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-print_group_req.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-print_mq_attr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-print_msgbuf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-print_sg_req_info.Po@am__quote@
@@ -1896,8 +2009,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-btrfs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-dirent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-evdev.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-fetch_bpf_fprog.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-fetch_struct_flock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-fetch_struct_keyctl_kdf_params.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-fetch_struct_msghdr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-fetch_struct_stat.Po@am__quote@
@@ -1908,6 +2022,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-ipc_shmctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-loop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-mtd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-print_group_req.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-print_mq_attr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-print_msgbuf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-print_sg_req_info.Po@am__quote@
@@ -1943,9 +2058,14 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-affinity.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-aio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-alpha.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-basic_filters.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-bind.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-bjm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-block.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-bpf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-bpf_filter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-bpf_seccomp_filter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-bpf_sock_filter.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-btrfs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-cacheflush.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-capability.Po@am__quote@
@@ -1960,6 +2080,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-dm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-dyxlat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-epoll.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-error_prints.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-evdev.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-eventfd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-execve.Po@am__quote@
@@ -1968,8 +2089,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fanotify.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fchownat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fcntl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fetch_seccomp_fprog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fetch_bpf_fprog.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fetch_struct_flock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fetch_struct_keyctl_kdf_params.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fetch_struct_mmsghdr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fetch_struct_msghdr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fetch_struct_stat.Po@am__quote@
@@ -1977,6 +2099,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fetch_struct_statfs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-file_handle.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-file_ioctl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-filter_qualify.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-flock.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-fs_x_ioctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-futex.Po@am__quote@
@@ -2002,6 +2125,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-keyctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-ldt.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-link.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-listen.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-lookup_dcookie.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-loop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-lseek.Po@am__quote@
@@ -2016,10 +2140,19 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-mtd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-net.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_crypto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_inet_diag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_netlink_diag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_packet_diag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_route.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_selinux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_smc_diag.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_sock_diag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_unix_diag.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-nlattr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-nsfs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-numa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-number_set.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-oldstat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-open.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-or1k_atomic.Po@am__quote@
@@ -2030,6 +2163,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-poll.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-prctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-print_dev_t.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-print_group_req.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-print_ifindex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-print_mq_attr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-print_msgbuf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-print_sg_req_info.Po@am__quote@
@@ -2046,7 +2181,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-process.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-process_vm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-ptp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-qualify.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-quota.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-readahead.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-readlink.Po@am__quote@
@@ -2056,12 +2190,26 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rt_sigframe.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rt_sigreturn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_addr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_addrlabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_dcb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_link.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_mdb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_neigh.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_neightbl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_netconf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_nsid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_route.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_rule.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_tc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-rtnl_tc_action.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-sched.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-scsi.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-seccomp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-sendfile.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-sg_io_v3.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-sg_io_v4.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-shutdown.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-sigaltstack.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-signal.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-signalfd.Po@am__quote@
@@ -2074,6 +2222,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-statfs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-statx.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-strace.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-string_to_uint.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-swapon.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-syscall.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-sysctl.Po@am__quote@
@@ -2085,6 +2234,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-times.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-truncate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-ubi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-ucopy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-uid.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-uid16.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-umask.Po@am__quote@
@@ -2172,19 +2322,19 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-evdev.obj `if test -f 'evdev.c'; then $(CYGPATH_W) 'evdev.c'; else $(CYGPATH_W) '$(srcdir)/evdev.c'; fi`
 
-libmpers_m32_a-fetch_seccomp_fprog.o: fetch_seccomp_fprog.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_seccomp_fprog.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Tpo -c -o libmpers_m32_a-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Tpo $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='libmpers_m32_a-fetch_seccomp_fprog.o' libtool=no @AMDEPBACKSLASH@
+libmpers_m32_a-fetch_bpf_fprog.o: fetch_bpf_fprog.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_bpf_fprog.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_bpf_fprog.Tpo -c -o libmpers_m32_a-fetch_bpf_fprog.o `test -f 'fetch_bpf_fprog.c' || echo '$(srcdir)/'`fetch_bpf_fprog.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_bpf_fprog.Tpo $(DEPDIR)/libmpers_m32_a-fetch_bpf_fprog.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_bpf_fprog.c' object='libmpers_m32_a-fetch_bpf_fprog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_bpf_fprog.o `test -f 'fetch_bpf_fprog.c' || echo '$(srcdir)/'`fetch_bpf_fprog.c
 
-libmpers_m32_a-fetch_seccomp_fprog.obj: fetch_seccomp_fprog.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_seccomp_fprog.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Tpo -c -o libmpers_m32_a-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Tpo $(DEPDIR)/libmpers_m32_a-fetch_seccomp_fprog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='libmpers_m32_a-fetch_seccomp_fprog.obj' libtool=no @AMDEPBACKSLASH@
+libmpers_m32_a-fetch_bpf_fprog.obj: fetch_bpf_fprog.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_bpf_fprog.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_bpf_fprog.Tpo -c -o libmpers_m32_a-fetch_bpf_fprog.obj `if test -f 'fetch_bpf_fprog.c'; then $(CYGPATH_W) 'fetch_bpf_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_bpf_fprog.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_bpf_fprog.Tpo $(DEPDIR)/libmpers_m32_a-fetch_bpf_fprog.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_bpf_fprog.c' object='libmpers_m32_a-fetch_bpf_fprog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_bpf_fprog.obj `if test -f 'fetch_bpf_fprog.c'; then $(CYGPATH_W) 'fetch_bpf_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_bpf_fprog.c'; fi`
 
 libmpers_m32_a-fetch_struct_flock.o: fetch_struct_flock.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_flock.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_flock.Tpo -c -o libmpers_m32_a-fetch_struct_flock.o `test -f 'fetch_struct_flock.c' || echo '$(srcdir)/'`fetch_struct_flock.c
@@ -2200,6 +2350,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_flock.obj `if test -f 'fetch_struct_flock.c'; then $(CYGPATH_W) 'fetch_struct_flock.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_flock.c'; fi`
 
+libmpers_m32_a-fetch_struct_keyctl_kdf_params.o: fetch_struct_keyctl_kdf_params.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_keyctl_kdf_params.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_keyctl_kdf_params.Tpo -c -o libmpers_m32_a-fetch_struct_keyctl_kdf_params.o `test -f 'fetch_struct_keyctl_kdf_params.c' || echo '$(srcdir)/'`fetch_struct_keyctl_kdf_params.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_keyctl_kdf_params.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_keyctl_kdf_params.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_struct_keyctl_kdf_params.c' object='libmpers_m32_a-fetch_struct_keyctl_kdf_params.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_keyctl_kdf_params.o `test -f 'fetch_struct_keyctl_kdf_params.c' || echo '$(srcdir)/'`fetch_struct_keyctl_kdf_params.c
+
+libmpers_m32_a-fetch_struct_keyctl_kdf_params.obj: fetch_struct_keyctl_kdf_params.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_keyctl_kdf_params.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_keyctl_kdf_params.Tpo -c -o libmpers_m32_a-fetch_struct_keyctl_kdf_params.obj `if test -f 'fetch_struct_keyctl_kdf_params.c'; then $(CYGPATH_W) 'fetch_struct_keyctl_kdf_params.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_keyctl_kdf_params.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_keyctl_kdf_params.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_keyctl_kdf_params.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_struct_keyctl_kdf_params.c' object='libmpers_m32_a-fetch_struct_keyctl_kdf_params.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-fetch_struct_keyctl_kdf_params.obj `if test -f 'fetch_struct_keyctl_kdf_params.c'; then $(CYGPATH_W) 'fetch_struct_keyctl_kdf_params.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_keyctl_kdf_params.c'; fi`
+
 libmpers_m32_a-fetch_struct_mmsghdr.o: fetch_struct_mmsghdr.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-fetch_struct_mmsghdr.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Tpo -c -o libmpers_m32_a-fetch_struct_mmsghdr.o `test -f 'fetch_struct_mmsghdr.c' || echo '$(srcdir)/'`fetch_struct_mmsghdr.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Tpo $(DEPDIR)/libmpers_m32_a-fetch_struct_mmsghdr.Po
@@ -2340,6 +2504,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-mtd.obj `if test -f 'mtd.c'; then $(CYGPATH_W) 'mtd.c'; else $(CYGPATH_W) '$(srcdir)/mtd.c'; fi`
 
+libmpers_m32_a-print_group_req.o: print_group_req.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_group_req.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_group_req.Tpo -c -o libmpers_m32_a-print_group_req.o `test -f 'print_group_req.c' || echo '$(srcdir)/'`print_group_req.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_group_req.Tpo $(DEPDIR)/libmpers_m32_a-print_group_req.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_group_req.c' object='libmpers_m32_a-print_group_req.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_group_req.o `test -f 'print_group_req.c' || echo '$(srcdir)/'`print_group_req.c
+
+libmpers_m32_a-print_group_req.obj: print_group_req.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_group_req.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_group_req.Tpo -c -o libmpers_m32_a-print_group_req.obj `if test -f 'print_group_req.c'; then $(CYGPATH_W) 'print_group_req.c'; else $(CYGPATH_W) '$(srcdir)/print_group_req.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_group_req.Tpo $(DEPDIR)/libmpers_m32_a-print_group_req.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_group_req.c' object='libmpers_m32_a-print_group_req.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-print_group_req.obj `if test -f 'print_group_req.c'; then $(CYGPATH_W) 'print_group_req.c'; else $(CYGPATH_W) '$(srcdir)/print_group_req.c'; fi`
+
 libmpers_m32_a-print_mq_attr.o: print_mq_attr.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_mq_attr.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_mq_attr.Tpo -c -o libmpers_m32_a-print_mq_attr.o `test -f 'print_mq_attr.c' || echo '$(srcdir)/'`print_mq_attr.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_mq_attr.Tpo $(DEPDIR)/libmpers_m32_a-print_mq_attr.Po
@@ -2676,19 +2854,19 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-evdev.obj `if test -f 'evdev.c'; then $(CYGPATH_W) 'evdev.c'; else $(CYGPATH_W) '$(srcdir)/evdev.c'; fi`
 
-libmpers_mx32_a-fetch_seccomp_fprog.o: fetch_seccomp_fprog.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_seccomp_fprog.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Tpo -c -o libmpers_mx32_a-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='libmpers_mx32_a-fetch_seccomp_fprog.o' libtool=no @AMDEPBACKSLASH@
+libmpers_mx32_a-fetch_bpf_fprog.o: fetch_bpf_fprog.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_bpf_fprog.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_bpf_fprog.Tpo -c -o libmpers_mx32_a-fetch_bpf_fprog.o `test -f 'fetch_bpf_fprog.c' || echo '$(srcdir)/'`fetch_bpf_fprog.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_bpf_fprog.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_bpf_fprog.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_bpf_fprog.c' object='libmpers_mx32_a-fetch_bpf_fprog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_bpf_fprog.o `test -f 'fetch_bpf_fprog.c' || echo '$(srcdir)/'`fetch_bpf_fprog.c
 
-libmpers_mx32_a-fetch_seccomp_fprog.obj: fetch_seccomp_fprog.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_seccomp_fprog.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Tpo -c -o libmpers_mx32_a-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_seccomp_fprog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='libmpers_mx32_a-fetch_seccomp_fprog.obj' libtool=no @AMDEPBACKSLASH@
+libmpers_mx32_a-fetch_bpf_fprog.obj: fetch_bpf_fprog.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_bpf_fprog.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_bpf_fprog.Tpo -c -o libmpers_mx32_a-fetch_bpf_fprog.obj `if test -f 'fetch_bpf_fprog.c'; then $(CYGPATH_W) 'fetch_bpf_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_bpf_fprog.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_bpf_fprog.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_bpf_fprog.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_bpf_fprog.c' object='libmpers_mx32_a-fetch_bpf_fprog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_bpf_fprog.obj `if test -f 'fetch_bpf_fprog.c'; then $(CYGPATH_W) 'fetch_bpf_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_bpf_fprog.c'; fi`
 
 libmpers_mx32_a-fetch_struct_flock.o: fetch_struct_flock.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_flock.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_flock.Tpo -c -o libmpers_mx32_a-fetch_struct_flock.o `test -f 'fetch_struct_flock.c' || echo '$(srcdir)/'`fetch_struct_flock.c
@@ -2704,6 +2882,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_flock.obj `if test -f 'fetch_struct_flock.c'; then $(CYGPATH_W) 'fetch_struct_flock.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_flock.c'; fi`
 
+libmpers_mx32_a-fetch_struct_keyctl_kdf_params.o: fetch_struct_keyctl_kdf_params.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_keyctl_kdf_params.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_keyctl_kdf_params.Tpo -c -o libmpers_mx32_a-fetch_struct_keyctl_kdf_params.o `test -f 'fetch_struct_keyctl_kdf_params.c' || echo '$(srcdir)/'`fetch_struct_keyctl_kdf_params.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_keyctl_kdf_params.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_keyctl_kdf_params.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_struct_keyctl_kdf_params.c' object='libmpers_mx32_a-fetch_struct_keyctl_kdf_params.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_keyctl_kdf_params.o `test -f 'fetch_struct_keyctl_kdf_params.c' || echo '$(srcdir)/'`fetch_struct_keyctl_kdf_params.c
+
+libmpers_mx32_a-fetch_struct_keyctl_kdf_params.obj: fetch_struct_keyctl_kdf_params.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_keyctl_kdf_params.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_keyctl_kdf_params.Tpo -c -o libmpers_mx32_a-fetch_struct_keyctl_kdf_params.obj `if test -f 'fetch_struct_keyctl_kdf_params.c'; then $(CYGPATH_W) 'fetch_struct_keyctl_kdf_params.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_keyctl_kdf_params.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_keyctl_kdf_params.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_keyctl_kdf_params.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_struct_keyctl_kdf_params.c' object='libmpers_mx32_a-fetch_struct_keyctl_kdf_params.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-fetch_struct_keyctl_kdf_params.obj `if test -f 'fetch_struct_keyctl_kdf_params.c'; then $(CYGPATH_W) 'fetch_struct_keyctl_kdf_params.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_keyctl_kdf_params.c'; fi`
+
 libmpers_mx32_a-fetch_struct_mmsghdr.o: fetch_struct_mmsghdr.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-fetch_struct_mmsghdr.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Tpo -c -o libmpers_mx32_a-fetch_struct_mmsghdr.o `test -f 'fetch_struct_mmsghdr.c' || echo '$(srcdir)/'`fetch_struct_mmsghdr.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Tpo $(DEPDIR)/libmpers_mx32_a-fetch_struct_mmsghdr.Po
@@ -2844,6 +3036,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-mtd.obj `if test -f 'mtd.c'; then $(CYGPATH_W) 'mtd.c'; else $(CYGPATH_W) '$(srcdir)/mtd.c'; fi`
 
+libmpers_mx32_a-print_group_req.o: print_group_req.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_group_req.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_group_req.Tpo -c -o libmpers_mx32_a-print_group_req.o `test -f 'print_group_req.c' || echo '$(srcdir)/'`print_group_req.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_group_req.Tpo $(DEPDIR)/libmpers_mx32_a-print_group_req.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_group_req.c' object='libmpers_mx32_a-print_group_req.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_group_req.o `test -f 'print_group_req.c' || echo '$(srcdir)/'`print_group_req.c
+
+libmpers_mx32_a-print_group_req.obj: print_group_req.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_group_req.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_group_req.Tpo -c -o libmpers_mx32_a-print_group_req.obj `if test -f 'print_group_req.c'; then $(CYGPATH_W) 'print_group_req.c'; else $(CYGPATH_W) '$(srcdir)/print_group_req.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_group_req.Tpo $(DEPDIR)/libmpers_mx32_a-print_group_req.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_group_req.c' object='libmpers_mx32_a-print_group_req.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-print_group_req.obj `if test -f 'print_group_req.c'; then $(CYGPATH_W) 'print_group_req.c'; else $(CYGPATH_W) '$(srcdir)/print_group_req.c'; fi`
+
 libmpers_mx32_a-print_mq_attr.o: print_mq_attr.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_mq_attr.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_mq_attr.Tpo -c -o libmpers_mx32_a-print_mq_attr.o `test -f 'print_mq_attr.c' || echo '$(srcdir)/'`print_mq_attr.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_mq_attr.Tpo $(DEPDIR)/libmpers_mx32_a-print_mq_attr.Po
@@ -3334,6 +3540,34 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-alpha.obj `if test -f 'alpha.c'; then $(CYGPATH_W) 'alpha.c'; else $(CYGPATH_W) '$(srcdir)/alpha.c'; fi`
 
+strace-basic_filters.o: basic_filters.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-basic_filters.o -MD -MP -MF $(DEPDIR)/strace-basic_filters.Tpo -c -o strace-basic_filters.o `test -f 'basic_filters.c' || echo '$(srcdir)/'`basic_filters.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-basic_filters.Tpo $(DEPDIR)/strace-basic_filters.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='basic_filters.c' object='strace-basic_filters.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-basic_filters.o `test -f 'basic_filters.c' || echo '$(srcdir)/'`basic_filters.c
+
+strace-basic_filters.obj: basic_filters.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-basic_filters.obj -MD -MP -MF $(DEPDIR)/strace-basic_filters.Tpo -c -o strace-basic_filters.obj `if test -f 'basic_filters.c'; then $(CYGPATH_W) 'basic_filters.c'; else $(CYGPATH_W) '$(srcdir)/basic_filters.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-basic_filters.Tpo $(DEPDIR)/strace-basic_filters.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='basic_filters.c' object='strace-basic_filters.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-basic_filters.obj `if test -f 'basic_filters.c'; then $(CYGPATH_W) 'basic_filters.c'; else $(CYGPATH_W) '$(srcdir)/basic_filters.c'; fi`
+
+strace-bind.o: bind.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bind.o -MD -MP -MF $(DEPDIR)/strace-bind.Tpo -c -o strace-bind.o `test -f 'bind.c' || echo '$(srcdir)/'`bind.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bind.Tpo $(DEPDIR)/strace-bind.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='bind.c' object='strace-bind.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bind.o `test -f 'bind.c' || echo '$(srcdir)/'`bind.c
+
+strace-bind.obj: bind.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bind.obj -MD -MP -MF $(DEPDIR)/strace-bind.Tpo -c -o strace-bind.obj `if test -f 'bind.c'; then $(CYGPATH_W) 'bind.c'; else $(CYGPATH_W) '$(srcdir)/bind.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bind.Tpo $(DEPDIR)/strace-bind.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='bind.c' object='strace-bind.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bind.obj `if test -f 'bind.c'; then $(CYGPATH_W) 'bind.c'; else $(CYGPATH_W) '$(srcdir)/bind.c'; fi`
+
 strace-bjm.o: bjm.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bjm.o -MD -MP -MF $(DEPDIR)/strace-bjm.Tpo -c -o strace-bjm.o `test -f 'bjm.c' || echo '$(srcdir)/'`bjm.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bjm.Tpo $(DEPDIR)/strace-bjm.Po
@@ -3376,6 +3610,48 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bpf.obj `if test -f 'bpf.c'; then $(CYGPATH_W) 'bpf.c'; else $(CYGPATH_W) '$(srcdir)/bpf.c'; fi`
 
+strace-bpf_filter.o: bpf_filter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bpf_filter.o -MD -MP -MF $(DEPDIR)/strace-bpf_filter.Tpo -c -o strace-bpf_filter.o `test -f 'bpf_filter.c' || echo '$(srcdir)/'`bpf_filter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bpf_filter.Tpo $(DEPDIR)/strace-bpf_filter.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='bpf_filter.c' object='strace-bpf_filter.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bpf_filter.o `test -f 'bpf_filter.c' || echo '$(srcdir)/'`bpf_filter.c
+
+strace-bpf_filter.obj: bpf_filter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bpf_filter.obj -MD -MP -MF $(DEPDIR)/strace-bpf_filter.Tpo -c -o strace-bpf_filter.obj `if test -f 'bpf_filter.c'; then $(CYGPATH_W) 'bpf_filter.c'; else $(CYGPATH_W) '$(srcdir)/bpf_filter.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bpf_filter.Tpo $(DEPDIR)/strace-bpf_filter.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='bpf_filter.c' object='strace-bpf_filter.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bpf_filter.obj `if test -f 'bpf_filter.c'; then $(CYGPATH_W) 'bpf_filter.c'; else $(CYGPATH_W) '$(srcdir)/bpf_filter.c'; fi`
+
+strace-bpf_seccomp_filter.o: bpf_seccomp_filter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bpf_seccomp_filter.o -MD -MP -MF $(DEPDIR)/strace-bpf_seccomp_filter.Tpo -c -o strace-bpf_seccomp_filter.o `test -f 'bpf_seccomp_filter.c' || echo '$(srcdir)/'`bpf_seccomp_filter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bpf_seccomp_filter.Tpo $(DEPDIR)/strace-bpf_seccomp_filter.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='bpf_seccomp_filter.c' object='strace-bpf_seccomp_filter.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bpf_seccomp_filter.o `test -f 'bpf_seccomp_filter.c' || echo '$(srcdir)/'`bpf_seccomp_filter.c
+
+strace-bpf_seccomp_filter.obj: bpf_seccomp_filter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bpf_seccomp_filter.obj -MD -MP -MF $(DEPDIR)/strace-bpf_seccomp_filter.Tpo -c -o strace-bpf_seccomp_filter.obj `if test -f 'bpf_seccomp_filter.c'; then $(CYGPATH_W) 'bpf_seccomp_filter.c'; else $(CYGPATH_W) '$(srcdir)/bpf_seccomp_filter.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bpf_seccomp_filter.Tpo $(DEPDIR)/strace-bpf_seccomp_filter.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='bpf_seccomp_filter.c' object='strace-bpf_seccomp_filter.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bpf_seccomp_filter.obj `if test -f 'bpf_seccomp_filter.c'; then $(CYGPATH_W) 'bpf_seccomp_filter.c'; else $(CYGPATH_W) '$(srcdir)/bpf_seccomp_filter.c'; fi`
+
+strace-bpf_sock_filter.o: bpf_sock_filter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bpf_sock_filter.o -MD -MP -MF $(DEPDIR)/strace-bpf_sock_filter.Tpo -c -o strace-bpf_sock_filter.o `test -f 'bpf_sock_filter.c' || echo '$(srcdir)/'`bpf_sock_filter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bpf_sock_filter.Tpo $(DEPDIR)/strace-bpf_sock_filter.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='bpf_sock_filter.c' object='strace-bpf_sock_filter.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bpf_sock_filter.o `test -f 'bpf_sock_filter.c' || echo '$(srcdir)/'`bpf_sock_filter.c
+
+strace-bpf_sock_filter.obj: bpf_sock_filter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-bpf_sock_filter.obj -MD -MP -MF $(DEPDIR)/strace-bpf_sock_filter.Tpo -c -o strace-bpf_sock_filter.obj `if test -f 'bpf_sock_filter.c'; then $(CYGPATH_W) 'bpf_sock_filter.c'; else $(CYGPATH_W) '$(srcdir)/bpf_sock_filter.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-bpf_sock_filter.Tpo $(DEPDIR)/strace-bpf_sock_filter.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='bpf_sock_filter.c' object='strace-bpf_sock_filter.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-bpf_sock_filter.obj `if test -f 'bpf_sock_filter.c'; then $(CYGPATH_W) 'bpf_sock_filter.c'; else $(CYGPATH_W) '$(srcdir)/bpf_sock_filter.c'; fi`
+
 strace-btrfs.o: btrfs.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-btrfs.o -MD -MP -MF $(DEPDIR)/strace-btrfs.Tpo -c -o strace-btrfs.o `test -f 'btrfs.c' || echo '$(srcdir)/'`btrfs.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-btrfs.Tpo $(DEPDIR)/strace-btrfs.Po
@@ -3572,6 +3848,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-epoll.obj `if test -f 'epoll.c'; then $(CYGPATH_W) 'epoll.c'; else $(CYGPATH_W) '$(srcdir)/epoll.c'; fi`
 
+strace-error_prints.o: error_prints.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-error_prints.o -MD -MP -MF $(DEPDIR)/strace-error_prints.Tpo -c -o strace-error_prints.o `test -f 'error_prints.c' || echo '$(srcdir)/'`error_prints.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-error_prints.Tpo $(DEPDIR)/strace-error_prints.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='error_prints.c' object='strace-error_prints.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-error_prints.o `test -f 'error_prints.c' || echo '$(srcdir)/'`error_prints.c
+
+strace-error_prints.obj: error_prints.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-error_prints.obj -MD -MP -MF $(DEPDIR)/strace-error_prints.Tpo -c -o strace-error_prints.obj `if test -f 'error_prints.c'; then $(CYGPATH_W) 'error_prints.c'; else $(CYGPATH_W) '$(srcdir)/error_prints.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-error_prints.Tpo $(DEPDIR)/strace-error_prints.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='error_prints.c' object='strace-error_prints.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-error_prints.obj `if test -f 'error_prints.c'; then $(CYGPATH_W) 'error_prints.c'; else $(CYGPATH_W) '$(srcdir)/error_prints.c'; fi`
+
 strace-evdev.o: evdev.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-evdev.o -MD -MP -MF $(DEPDIR)/strace-evdev.Tpo -c -o strace-evdev.o `test -f 'evdev.c' || echo '$(srcdir)/'`evdev.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-evdev.Tpo $(DEPDIR)/strace-evdev.Po
@@ -3684,19 +3974,19 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fcntl.obj `if test -f 'fcntl.c'; then $(CYGPATH_W) 'fcntl.c'; else $(CYGPATH_W) '$(srcdir)/fcntl.c'; fi`
 
-strace-fetch_seccomp_fprog.o: fetch_seccomp_fprog.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_seccomp_fprog.o -MD -MP -MF $(DEPDIR)/strace-fetch_seccomp_fprog.Tpo -c -o strace-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_seccomp_fprog.Tpo $(DEPDIR)/strace-fetch_seccomp_fprog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='strace-fetch_seccomp_fprog.o' libtool=no @AMDEPBACKSLASH@
+strace-fetch_bpf_fprog.o: fetch_bpf_fprog.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_bpf_fprog.o -MD -MP -MF $(DEPDIR)/strace-fetch_bpf_fprog.Tpo -c -o strace-fetch_bpf_fprog.o `test -f 'fetch_bpf_fprog.c' || echo '$(srcdir)/'`fetch_bpf_fprog.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_bpf_fprog.Tpo $(DEPDIR)/strace-fetch_bpf_fprog.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_bpf_fprog.c' object='strace-fetch_bpf_fprog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_seccomp_fprog.o `test -f 'fetch_seccomp_fprog.c' || echo '$(srcdir)/'`fetch_seccomp_fprog.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_bpf_fprog.o `test -f 'fetch_bpf_fprog.c' || echo '$(srcdir)/'`fetch_bpf_fprog.c
 
-strace-fetch_seccomp_fprog.obj: fetch_seccomp_fprog.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_seccomp_fprog.obj -MD -MP -MF $(DEPDIR)/strace-fetch_seccomp_fprog.Tpo -c -o strace-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_seccomp_fprog.Tpo $(DEPDIR)/strace-fetch_seccomp_fprog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_seccomp_fprog.c' object='strace-fetch_seccomp_fprog.obj' libtool=no @AMDEPBACKSLASH@
+strace-fetch_bpf_fprog.obj: fetch_bpf_fprog.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_bpf_fprog.obj -MD -MP -MF $(DEPDIR)/strace-fetch_bpf_fprog.Tpo -c -o strace-fetch_bpf_fprog.obj `if test -f 'fetch_bpf_fprog.c'; then $(CYGPATH_W) 'fetch_bpf_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_bpf_fprog.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_bpf_fprog.Tpo $(DEPDIR)/strace-fetch_bpf_fprog.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_bpf_fprog.c' object='strace-fetch_bpf_fprog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_seccomp_fprog.obj `if test -f 'fetch_seccomp_fprog.c'; then $(CYGPATH_W) 'fetch_seccomp_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_seccomp_fprog.c'; fi`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_bpf_fprog.obj `if test -f 'fetch_bpf_fprog.c'; then $(CYGPATH_W) 'fetch_bpf_fprog.c'; else $(CYGPATH_W) '$(srcdir)/fetch_bpf_fprog.c'; fi`
 
 strace-fetch_struct_flock.o: fetch_struct_flock.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_flock.o -MD -MP -MF $(DEPDIR)/strace-fetch_struct_flock.Tpo -c -o strace-fetch_struct_flock.o `test -f 'fetch_struct_flock.c' || echo '$(srcdir)/'`fetch_struct_flock.c
@@ -3712,6 +4002,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_flock.obj `if test -f 'fetch_struct_flock.c'; then $(CYGPATH_W) 'fetch_struct_flock.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_flock.c'; fi`
 
+strace-fetch_struct_keyctl_kdf_params.o: fetch_struct_keyctl_kdf_params.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_keyctl_kdf_params.o -MD -MP -MF $(DEPDIR)/strace-fetch_struct_keyctl_kdf_params.Tpo -c -o strace-fetch_struct_keyctl_kdf_params.o `test -f 'fetch_struct_keyctl_kdf_params.c' || echo '$(srcdir)/'`fetch_struct_keyctl_kdf_params.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_keyctl_kdf_params.Tpo $(DEPDIR)/strace-fetch_struct_keyctl_kdf_params.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_struct_keyctl_kdf_params.c' object='strace-fetch_struct_keyctl_kdf_params.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_keyctl_kdf_params.o `test -f 'fetch_struct_keyctl_kdf_params.c' || echo '$(srcdir)/'`fetch_struct_keyctl_kdf_params.c
+
+strace-fetch_struct_keyctl_kdf_params.obj: fetch_struct_keyctl_kdf_params.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_keyctl_kdf_params.obj -MD -MP -MF $(DEPDIR)/strace-fetch_struct_keyctl_kdf_params.Tpo -c -o strace-fetch_struct_keyctl_kdf_params.obj `if test -f 'fetch_struct_keyctl_kdf_params.c'; then $(CYGPATH_W) 'fetch_struct_keyctl_kdf_params.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_keyctl_kdf_params.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_keyctl_kdf_params.Tpo $(DEPDIR)/strace-fetch_struct_keyctl_kdf_params.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fetch_struct_keyctl_kdf_params.c' object='strace-fetch_struct_keyctl_kdf_params.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fetch_struct_keyctl_kdf_params.obj `if test -f 'fetch_struct_keyctl_kdf_params.c'; then $(CYGPATH_W) 'fetch_struct_keyctl_kdf_params.c'; else $(CYGPATH_W) '$(srcdir)/fetch_struct_keyctl_kdf_params.c'; fi`
+
 strace-fetch_struct_mmsghdr.o: fetch_struct_mmsghdr.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fetch_struct_mmsghdr.o -MD -MP -MF $(DEPDIR)/strace-fetch_struct_mmsghdr.Tpo -c -o strace-fetch_struct_mmsghdr.o `test -f 'fetch_struct_mmsghdr.c' || echo '$(srcdir)/'`fetch_struct_mmsghdr.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fetch_struct_mmsghdr.Tpo $(DEPDIR)/strace-fetch_struct_mmsghdr.Po
@@ -3810,19 +4114,19 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-file_ioctl.obj `if test -f 'file_ioctl.c'; then $(CYGPATH_W) 'file_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/file_ioctl.c'; fi`
 
-strace-fs_x_ioctl.o: fs_x_ioctl.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fs_x_ioctl.o -MD -MP -MF $(DEPDIR)/strace-fs_x_ioctl.Tpo -c -o strace-fs_x_ioctl.o `test -f 'fs_x_ioctl.c' || echo '$(srcdir)/'`fs_x_ioctl.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fs_x_ioctl.Tpo $(DEPDIR)/strace-fs_x_ioctl.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fs_x_ioctl.c' object='strace-fs_x_ioctl.o' libtool=no @AMDEPBACKSLASH@
+strace-filter_qualify.o: filter_qualify.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-filter_qualify.o -MD -MP -MF $(DEPDIR)/strace-filter_qualify.Tpo -c -o strace-filter_qualify.o `test -f 'filter_qualify.c' || echo '$(srcdir)/'`filter_qualify.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-filter_qualify.Tpo $(DEPDIR)/strace-filter_qualify.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='filter_qualify.c' object='strace-filter_qualify.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fs_x_ioctl.o `test -f 'fs_x_ioctl.c' || echo '$(srcdir)/'`fs_x_ioctl.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-filter_qualify.o `test -f 'filter_qualify.c' || echo '$(srcdir)/'`filter_qualify.c
 
-strace-fs_x_ioctl.obj: fs_x_ioctl.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fs_x_ioctl.obj -MD -MP -MF $(DEPDIR)/strace-fs_x_ioctl.Tpo -c -o strace-fs_x_ioctl.obj `if test -f 'fs_x_ioctl.c'; then $(CYGPATH_W) 'fs_x_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/fs_x_ioctl.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fs_x_ioctl.Tpo $(DEPDIR)/strace-fs_x_ioctl.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fs_x_ioctl.c' object='strace-fs_x_ioctl.obj' libtool=no @AMDEPBACKSLASH@
+strace-filter_qualify.obj: filter_qualify.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-filter_qualify.obj -MD -MP -MF $(DEPDIR)/strace-filter_qualify.Tpo -c -o strace-filter_qualify.obj `if test -f 'filter_qualify.c'; then $(CYGPATH_W) 'filter_qualify.c'; else $(CYGPATH_W) '$(srcdir)/filter_qualify.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-filter_qualify.Tpo $(DEPDIR)/strace-filter_qualify.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='filter_qualify.c' object='strace-filter_qualify.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fs_x_ioctl.obj `if test -f 'fs_x_ioctl.c'; then $(CYGPATH_W) 'fs_x_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/fs_x_ioctl.c'; fi`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-filter_qualify.obj `if test -f 'filter_qualify.c'; then $(CYGPATH_W) 'filter_qualify.c'; else $(CYGPATH_W) '$(srcdir)/filter_qualify.c'; fi`
 
 strace-flock.o: flock.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-flock.o -MD -MP -MF $(DEPDIR)/strace-flock.Tpo -c -o strace-flock.o `test -f 'flock.c' || echo '$(srcdir)/'`flock.c
@@ -3838,6 +4142,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-flock.obj `if test -f 'flock.c'; then $(CYGPATH_W) 'flock.c'; else $(CYGPATH_W) '$(srcdir)/flock.c'; fi`
 
+strace-fs_x_ioctl.o: fs_x_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fs_x_ioctl.o -MD -MP -MF $(DEPDIR)/strace-fs_x_ioctl.Tpo -c -o strace-fs_x_ioctl.o `test -f 'fs_x_ioctl.c' || echo '$(srcdir)/'`fs_x_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fs_x_ioctl.Tpo $(DEPDIR)/strace-fs_x_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fs_x_ioctl.c' object='strace-fs_x_ioctl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fs_x_ioctl.o `test -f 'fs_x_ioctl.c' || echo '$(srcdir)/'`fs_x_ioctl.c
+
+strace-fs_x_ioctl.obj: fs_x_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-fs_x_ioctl.obj -MD -MP -MF $(DEPDIR)/strace-fs_x_ioctl.Tpo -c -o strace-fs_x_ioctl.obj `if test -f 'fs_x_ioctl.c'; then $(CYGPATH_W) 'fs_x_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/fs_x_ioctl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-fs_x_ioctl.Tpo $(DEPDIR)/strace-fs_x_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fs_x_ioctl.c' object='strace-fs_x_ioctl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-fs_x_ioctl.obj `if test -f 'fs_x_ioctl.c'; then $(CYGPATH_W) 'fs_x_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/fs_x_ioctl.c'; fi`
+
 strace-futex.o: futex.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-futex.o -MD -MP -MF $(DEPDIR)/strace-futex.Tpo -c -o strace-futex.o `test -f 'futex.c' || echo '$(srcdir)/'`futex.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-futex.Tpo $(DEPDIR)/strace-futex.Po
@@ -4160,6 +4478,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-link.obj `if test -f 'link.c'; then $(CYGPATH_W) 'link.c'; else $(CYGPATH_W) '$(srcdir)/link.c'; fi`
 
+strace-listen.o: listen.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-listen.o -MD -MP -MF $(DEPDIR)/strace-listen.Tpo -c -o strace-listen.o `test -f 'listen.c' || echo '$(srcdir)/'`listen.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-listen.Tpo $(DEPDIR)/strace-listen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='listen.c' object='strace-listen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-listen.o `test -f 'listen.c' || echo '$(srcdir)/'`listen.c
+
+strace-listen.obj: listen.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-listen.obj -MD -MP -MF $(DEPDIR)/strace-listen.Tpo -c -o strace-listen.obj `if test -f 'listen.c'; then $(CYGPATH_W) 'listen.c'; else $(CYGPATH_W) '$(srcdir)/listen.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-listen.Tpo $(DEPDIR)/strace-listen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='listen.c' object='strace-listen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-listen.obj `if test -f 'listen.c'; then $(CYGPATH_W) 'listen.c'; else $(CYGPATH_W) '$(srcdir)/listen.c'; fi`
+
 strace-lookup_dcookie.o: lookup_dcookie.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-lookup_dcookie.o -MD -MP -MF $(DEPDIR)/strace-lookup_dcookie.Tpo -c -o strace-lookup_dcookie.o `test -f 'lookup_dcookie.c' || echo '$(srcdir)/'`lookup_dcookie.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-lookup_dcookie.Tpo $(DEPDIR)/strace-lookup_dcookie.Po
@@ -4356,6 +4688,104 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink.obj `if test -f 'netlink.c'; then $(CYGPATH_W) 'netlink.c'; else $(CYGPATH_W) '$(srcdir)/netlink.c'; fi`
 
+strace-netlink_crypto.o: netlink_crypto.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_crypto.o -MD -MP -MF $(DEPDIR)/strace-netlink_crypto.Tpo -c -o strace-netlink_crypto.o `test -f 'netlink_crypto.c' || echo '$(srcdir)/'`netlink_crypto.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_crypto.Tpo $(DEPDIR)/strace-netlink_crypto.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_crypto.c' object='strace-netlink_crypto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_crypto.o `test -f 'netlink_crypto.c' || echo '$(srcdir)/'`netlink_crypto.c
+
+strace-netlink_crypto.obj: netlink_crypto.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_crypto.obj -MD -MP -MF $(DEPDIR)/strace-netlink_crypto.Tpo -c -o strace-netlink_crypto.obj `if test -f 'netlink_crypto.c'; then $(CYGPATH_W) 'netlink_crypto.c'; else $(CYGPATH_W) '$(srcdir)/netlink_crypto.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_crypto.Tpo $(DEPDIR)/strace-netlink_crypto.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_crypto.c' object='strace-netlink_crypto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_crypto.obj `if test -f 'netlink_crypto.c'; then $(CYGPATH_W) 'netlink_crypto.c'; else $(CYGPATH_W) '$(srcdir)/netlink_crypto.c'; fi`
+
+strace-netlink_inet_diag.o: netlink_inet_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_inet_diag.o -MD -MP -MF $(DEPDIR)/strace-netlink_inet_diag.Tpo -c -o strace-netlink_inet_diag.o `test -f 'netlink_inet_diag.c' || echo '$(srcdir)/'`netlink_inet_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_inet_diag.Tpo $(DEPDIR)/strace-netlink_inet_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_inet_diag.c' object='strace-netlink_inet_diag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_inet_diag.o `test -f 'netlink_inet_diag.c' || echo '$(srcdir)/'`netlink_inet_diag.c
+
+strace-netlink_inet_diag.obj: netlink_inet_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_inet_diag.obj -MD -MP -MF $(DEPDIR)/strace-netlink_inet_diag.Tpo -c -o strace-netlink_inet_diag.obj `if test -f 'netlink_inet_diag.c'; then $(CYGPATH_W) 'netlink_inet_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_inet_diag.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_inet_diag.Tpo $(DEPDIR)/strace-netlink_inet_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_inet_diag.c' object='strace-netlink_inet_diag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_inet_diag.obj `if test -f 'netlink_inet_diag.c'; then $(CYGPATH_W) 'netlink_inet_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_inet_diag.c'; fi`
+
+strace-netlink_netlink_diag.o: netlink_netlink_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_netlink_diag.o -MD -MP -MF $(DEPDIR)/strace-netlink_netlink_diag.Tpo -c -o strace-netlink_netlink_diag.o `test -f 'netlink_netlink_diag.c' || echo '$(srcdir)/'`netlink_netlink_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_netlink_diag.Tpo $(DEPDIR)/strace-netlink_netlink_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_netlink_diag.c' object='strace-netlink_netlink_diag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_netlink_diag.o `test -f 'netlink_netlink_diag.c' || echo '$(srcdir)/'`netlink_netlink_diag.c
+
+strace-netlink_netlink_diag.obj: netlink_netlink_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_netlink_diag.obj -MD -MP -MF $(DEPDIR)/strace-netlink_netlink_diag.Tpo -c -o strace-netlink_netlink_diag.obj `if test -f 'netlink_netlink_diag.c'; then $(CYGPATH_W) 'netlink_netlink_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_netlink_diag.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_netlink_diag.Tpo $(DEPDIR)/strace-netlink_netlink_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_netlink_diag.c' object='strace-netlink_netlink_diag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_netlink_diag.obj `if test -f 'netlink_netlink_diag.c'; then $(CYGPATH_W) 'netlink_netlink_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_netlink_diag.c'; fi`
+
+strace-netlink_packet_diag.o: netlink_packet_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_packet_diag.o -MD -MP -MF $(DEPDIR)/strace-netlink_packet_diag.Tpo -c -o strace-netlink_packet_diag.o `test -f 'netlink_packet_diag.c' || echo '$(srcdir)/'`netlink_packet_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_packet_diag.Tpo $(DEPDIR)/strace-netlink_packet_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_packet_diag.c' object='strace-netlink_packet_diag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_packet_diag.o `test -f 'netlink_packet_diag.c' || echo '$(srcdir)/'`netlink_packet_diag.c
+
+strace-netlink_packet_diag.obj: netlink_packet_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_packet_diag.obj -MD -MP -MF $(DEPDIR)/strace-netlink_packet_diag.Tpo -c -o strace-netlink_packet_diag.obj `if test -f 'netlink_packet_diag.c'; then $(CYGPATH_W) 'netlink_packet_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_packet_diag.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_packet_diag.Tpo $(DEPDIR)/strace-netlink_packet_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_packet_diag.c' object='strace-netlink_packet_diag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_packet_diag.obj `if test -f 'netlink_packet_diag.c'; then $(CYGPATH_W) 'netlink_packet_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_packet_diag.c'; fi`
+
+strace-netlink_route.o: netlink_route.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_route.o -MD -MP -MF $(DEPDIR)/strace-netlink_route.Tpo -c -o strace-netlink_route.o `test -f 'netlink_route.c' || echo '$(srcdir)/'`netlink_route.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_route.Tpo $(DEPDIR)/strace-netlink_route.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_route.c' object='strace-netlink_route.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_route.o `test -f 'netlink_route.c' || echo '$(srcdir)/'`netlink_route.c
+
+strace-netlink_route.obj: netlink_route.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_route.obj -MD -MP -MF $(DEPDIR)/strace-netlink_route.Tpo -c -o strace-netlink_route.obj `if test -f 'netlink_route.c'; then $(CYGPATH_W) 'netlink_route.c'; else $(CYGPATH_W) '$(srcdir)/netlink_route.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_route.Tpo $(DEPDIR)/strace-netlink_route.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_route.c' object='strace-netlink_route.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_route.obj `if test -f 'netlink_route.c'; then $(CYGPATH_W) 'netlink_route.c'; else $(CYGPATH_W) '$(srcdir)/netlink_route.c'; fi`
+
+strace-netlink_selinux.o: netlink_selinux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_selinux.o -MD -MP -MF $(DEPDIR)/strace-netlink_selinux.Tpo -c -o strace-netlink_selinux.o `test -f 'netlink_selinux.c' || echo '$(srcdir)/'`netlink_selinux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_selinux.Tpo $(DEPDIR)/strace-netlink_selinux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_selinux.c' object='strace-netlink_selinux.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_selinux.o `test -f 'netlink_selinux.c' || echo '$(srcdir)/'`netlink_selinux.c
+
+strace-netlink_selinux.obj: netlink_selinux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_selinux.obj -MD -MP -MF $(DEPDIR)/strace-netlink_selinux.Tpo -c -o strace-netlink_selinux.obj `if test -f 'netlink_selinux.c'; then $(CYGPATH_W) 'netlink_selinux.c'; else $(CYGPATH_W) '$(srcdir)/netlink_selinux.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_selinux.Tpo $(DEPDIR)/strace-netlink_selinux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_selinux.c' object='strace-netlink_selinux.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_selinux.obj `if test -f 'netlink_selinux.c'; then $(CYGPATH_W) 'netlink_selinux.c'; else $(CYGPATH_W) '$(srcdir)/netlink_selinux.c'; fi`
+
+strace-netlink_smc_diag.o: netlink_smc_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_smc_diag.o -MD -MP -MF $(DEPDIR)/strace-netlink_smc_diag.Tpo -c -o strace-netlink_smc_diag.o `test -f 'netlink_smc_diag.c' || echo '$(srcdir)/'`netlink_smc_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_smc_diag.Tpo $(DEPDIR)/strace-netlink_smc_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_smc_diag.c' object='strace-netlink_smc_diag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_smc_diag.o `test -f 'netlink_smc_diag.c' || echo '$(srcdir)/'`netlink_smc_diag.c
+
+strace-netlink_smc_diag.obj: netlink_smc_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_smc_diag.obj -MD -MP -MF $(DEPDIR)/strace-netlink_smc_diag.Tpo -c -o strace-netlink_smc_diag.obj `if test -f 'netlink_smc_diag.c'; then $(CYGPATH_W) 'netlink_smc_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_smc_diag.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_smc_diag.Tpo $(DEPDIR)/strace-netlink_smc_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_smc_diag.c' object='strace-netlink_smc_diag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_smc_diag.obj `if test -f 'netlink_smc_diag.c'; then $(CYGPATH_W) 'netlink_smc_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_smc_diag.c'; fi`
+
 strace-netlink_sock_diag.o: netlink_sock_diag.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_sock_diag.o -MD -MP -MF $(DEPDIR)/strace-netlink_sock_diag.Tpo -c -o strace-netlink_sock_diag.o `test -f 'netlink_sock_diag.c' || echo '$(srcdir)/'`netlink_sock_diag.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_sock_diag.Tpo $(DEPDIR)/strace-netlink_sock_diag.Po
@@ -4370,6 +4800,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_sock_diag.obj `if test -f 'netlink_sock_diag.c'; then $(CYGPATH_W) 'netlink_sock_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_sock_diag.c'; fi`
 
+strace-netlink_unix_diag.o: netlink_unix_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_unix_diag.o -MD -MP -MF $(DEPDIR)/strace-netlink_unix_diag.Tpo -c -o strace-netlink_unix_diag.o `test -f 'netlink_unix_diag.c' || echo '$(srcdir)/'`netlink_unix_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_unix_diag.Tpo $(DEPDIR)/strace-netlink_unix_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_unix_diag.c' object='strace-netlink_unix_diag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_unix_diag.o `test -f 'netlink_unix_diag.c' || echo '$(srcdir)/'`netlink_unix_diag.c
+
+strace-netlink_unix_diag.obj: netlink_unix_diag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_unix_diag.obj -MD -MP -MF $(DEPDIR)/strace-netlink_unix_diag.Tpo -c -o strace-netlink_unix_diag.obj `if test -f 'netlink_unix_diag.c'; then $(CYGPATH_W) 'netlink_unix_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_unix_diag.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_unix_diag.Tpo $(DEPDIR)/strace-netlink_unix_diag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_unix_diag.c' object='strace-netlink_unix_diag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-netlink_unix_diag.obj `if test -f 'netlink_unix_diag.c'; then $(CYGPATH_W) 'netlink_unix_diag.c'; else $(CYGPATH_W) '$(srcdir)/netlink_unix_diag.c'; fi`
+
 strace-nlattr.o: nlattr.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-nlattr.o -MD -MP -MF $(DEPDIR)/strace-nlattr.Tpo -c -o strace-nlattr.o `test -f 'nlattr.c' || echo '$(srcdir)/'`nlattr.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-nlattr.Tpo $(DEPDIR)/strace-nlattr.Po
@@ -4412,6 +4856,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-numa.obj `if test -f 'numa.c'; then $(CYGPATH_W) 'numa.c'; else $(CYGPATH_W) '$(srcdir)/numa.c'; fi`
 
+strace-number_set.o: number_set.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-number_set.o -MD -MP -MF $(DEPDIR)/strace-number_set.Tpo -c -o strace-number_set.o `test -f 'number_set.c' || echo '$(srcdir)/'`number_set.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-number_set.Tpo $(DEPDIR)/strace-number_set.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='number_set.c' object='strace-number_set.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-number_set.o `test -f 'number_set.c' || echo '$(srcdir)/'`number_set.c
+
+strace-number_set.obj: number_set.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-number_set.obj -MD -MP -MF $(DEPDIR)/strace-number_set.Tpo -c -o strace-number_set.obj `if test -f 'number_set.c'; then $(CYGPATH_W) 'number_set.c'; else $(CYGPATH_W) '$(srcdir)/number_set.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-number_set.Tpo $(DEPDIR)/strace-number_set.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='number_set.c' object='strace-number_set.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-number_set.obj `if test -f 'number_set.c'; then $(CYGPATH_W) 'number_set.c'; else $(CYGPATH_W) '$(srcdir)/number_set.c'; fi`
+
 strace-oldstat.o: oldstat.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-oldstat.o -MD -MP -MF $(DEPDIR)/strace-oldstat.Tpo -c -o strace-oldstat.o `test -f 'oldstat.c' || echo '$(srcdir)/'`oldstat.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-oldstat.Tpo $(DEPDIR)/strace-oldstat.Po
@@ -4552,6 +5010,34 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_dev_t.obj `if test -f 'print_dev_t.c'; then $(CYGPATH_W) 'print_dev_t.c'; else $(CYGPATH_W) '$(srcdir)/print_dev_t.c'; fi`
 
+strace-print_group_req.o: print_group_req.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_group_req.o -MD -MP -MF $(DEPDIR)/strace-print_group_req.Tpo -c -o strace-print_group_req.o `test -f 'print_group_req.c' || echo '$(srcdir)/'`print_group_req.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_group_req.Tpo $(DEPDIR)/strace-print_group_req.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_group_req.c' object='strace-print_group_req.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_group_req.o `test -f 'print_group_req.c' || echo '$(srcdir)/'`print_group_req.c
+
+strace-print_group_req.obj: print_group_req.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_group_req.obj -MD -MP -MF $(DEPDIR)/strace-print_group_req.Tpo -c -o strace-print_group_req.obj `if test -f 'print_group_req.c'; then $(CYGPATH_W) 'print_group_req.c'; else $(CYGPATH_W) '$(srcdir)/print_group_req.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_group_req.Tpo $(DEPDIR)/strace-print_group_req.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_group_req.c' object='strace-print_group_req.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_group_req.obj `if test -f 'print_group_req.c'; then $(CYGPATH_W) 'print_group_req.c'; else $(CYGPATH_W) '$(srcdir)/print_group_req.c'; fi`
+
+strace-print_ifindex.o: print_ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_ifindex.o -MD -MP -MF $(DEPDIR)/strace-print_ifindex.Tpo -c -o strace-print_ifindex.o `test -f 'print_ifindex.c' || echo '$(srcdir)/'`print_ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_ifindex.Tpo $(DEPDIR)/strace-print_ifindex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_ifindex.c' object='strace-print_ifindex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_ifindex.o `test -f 'print_ifindex.c' || echo '$(srcdir)/'`print_ifindex.c
+
+strace-print_ifindex.obj: print_ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_ifindex.obj -MD -MP -MF $(DEPDIR)/strace-print_ifindex.Tpo -c -o strace-print_ifindex.obj `if test -f 'print_ifindex.c'; then $(CYGPATH_W) 'print_ifindex.c'; else $(CYGPATH_W) '$(srcdir)/print_ifindex.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_ifindex.Tpo $(DEPDIR)/strace-print_ifindex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_ifindex.c' object='strace-print_ifindex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-print_ifindex.obj `if test -f 'print_ifindex.c'; then $(CYGPATH_W) 'print_ifindex.c'; else $(CYGPATH_W) '$(srcdir)/print_ifindex.c'; fi`
+
 strace-print_mq_attr.o: print_mq_attr.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_mq_attr.o -MD -MP -MF $(DEPDIR)/strace-print_mq_attr.Tpo -c -o strace-print_mq_attr.o `test -f 'print_mq_attr.c' || echo '$(srcdir)/'`print_mq_attr.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_mq_attr.Tpo $(DEPDIR)/strace-print_mq_attr.Po
@@ -4776,20 +5262,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ptp.obj `if test -f 'ptp.c'; then $(CYGPATH_W) 'ptp.c'; else $(CYGPATH_W) '$(srcdir)/ptp.c'; fi`
 
-strace-qualify.o: qualify.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-qualify.o -MD -MP -MF $(DEPDIR)/strace-qualify.Tpo -c -o strace-qualify.o `test -f 'qualify.c' || echo '$(srcdir)/'`qualify.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-qualify.Tpo $(DEPDIR)/strace-qualify.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='qualify.c' object='strace-qualify.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-qualify.o `test -f 'qualify.c' || echo '$(srcdir)/'`qualify.c
-
-strace-qualify.obj: qualify.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-qualify.obj -MD -MP -MF $(DEPDIR)/strace-qualify.Tpo -c -o strace-qualify.obj `if test -f 'qualify.c'; then $(CYGPATH_W) 'qualify.c'; else $(CYGPATH_W) '$(srcdir)/qualify.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-qualify.Tpo $(DEPDIR)/strace-qualify.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='qualify.c' object='strace-qualify.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-qualify.obj `if test -f 'qualify.c'; then $(CYGPATH_W) 'qualify.c'; else $(CYGPATH_W) '$(srcdir)/qualify.c'; fi`
-
 strace-quota.o: quota.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-quota.o -MD -MP -MF $(DEPDIR)/strace-quota.Tpo -c -o strace-quota.o `test -f 'quota.c' || echo '$(srcdir)/'`quota.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-quota.Tpo $(DEPDIR)/strace-quota.Po
@@ -4916,6 +5388,188 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtc.obj `if test -f 'rtc.c'; then $(CYGPATH_W) 'rtc.c'; else $(CYGPATH_W) '$(srcdir)/rtc.c'; fi`
 
+strace-rtnl_addr.o: rtnl_addr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_addr.o -MD -MP -MF $(DEPDIR)/strace-rtnl_addr.Tpo -c -o strace-rtnl_addr.o `test -f 'rtnl_addr.c' || echo '$(srcdir)/'`rtnl_addr.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_addr.Tpo $(DEPDIR)/strace-rtnl_addr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_addr.c' object='strace-rtnl_addr.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_addr.o `test -f 'rtnl_addr.c' || echo '$(srcdir)/'`rtnl_addr.c
+
+strace-rtnl_addr.obj: rtnl_addr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_addr.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_addr.Tpo -c -o strace-rtnl_addr.obj `if test -f 'rtnl_addr.c'; then $(CYGPATH_W) 'rtnl_addr.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_addr.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_addr.Tpo $(DEPDIR)/strace-rtnl_addr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_addr.c' object='strace-rtnl_addr.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_addr.obj `if test -f 'rtnl_addr.c'; then $(CYGPATH_W) 'rtnl_addr.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_addr.c'; fi`
+
+strace-rtnl_addrlabel.o: rtnl_addrlabel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_addrlabel.o -MD -MP -MF $(DEPDIR)/strace-rtnl_addrlabel.Tpo -c -o strace-rtnl_addrlabel.o `test -f 'rtnl_addrlabel.c' || echo '$(srcdir)/'`rtnl_addrlabel.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_addrlabel.Tpo $(DEPDIR)/strace-rtnl_addrlabel.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_addrlabel.c' object='strace-rtnl_addrlabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_addrlabel.o `test -f 'rtnl_addrlabel.c' || echo '$(srcdir)/'`rtnl_addrlabel.c
+
+strace-rtnl_addrlabel.obj: rtnl_addrlabel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_addrlabel.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_addrlabel.Tpo -c -o strace-rtnl_addrlabel.obj `if test -f 'rtnl_addrlabel.c'; then $(CYGPATH_W) 'rtnl_addrlabel.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_addrlabel.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_addrlabel.Tpo $(DEPDIR)/strace-rtnl_addrlabel.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_addrlabel.c' object='strace-rtnl_addrlabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_addrlabel.obj `if test -f 'rtnl_addrlabel.c'; then $(CYGPATH_W) 'rtnl_addrlabel.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_addrlabel.c'; fi`
+
+strace-rtnl_dcb.o: rtnl_dcb.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_dcb.o -MD -MP -MF $(DEPDIR)/strace-rtnl_dcb.Tpo -c -o strace-rtnl_dcb.o `test -f 'rtnl_dcb.c' || echo '$(srcdir)/'`rtnl_dcb.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_dcb.Tpo $(DEPDIR)/strace-rtnl_dcb.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_dcb.c' object='strace-rtnl_dcb.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_dcb.o `test -f 'rtnl_dcb.c' || echo '$(srcdir)/'`rtnl_dcb.c
+
+strace-rtnl_dcb.obj: rtnl_dcb.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_dcb.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_dcb.Tpo -c -o strace-rtnl_dcb.obj `if test -f 'rtnl_dcb.c'; then $(CYGPATH_W) 'rtnl_dcb.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_dcb.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_dcb.Tpo $(DEPDIR)/strace-rtnl_dcb.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_dcb.c' object='strace-rtnl_dcb.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_dcb.obj `if test -f 'rtnl_dcb.c'; then $(CYGPATH_W) 'rtnl_dcb.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_dcb.c'; fi`
+
+strace-rtnl_link.o: rtnl_link.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_link.o -MD -MP -MF $(DEPDIR)/strace-rtnl_link.Tpo -c -o strace-rtnl_link.o `test -f 'rtnl_link.c' || echo '$(srcdir)/'`rtnl_link.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_link.Tpo $(DEPDIR)/strace-rtnl_link.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_link.c' object='strace-rtnl_link.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_link.o `test -f 'rtnl_link.c' || echo '$(srcdir)/'`rtnl_link.c
+
+strace-rtnl_link.obj: rtnl_link.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_link.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_link.Tpo -c -o strace-rtnl_link.obj `if test -f 'rtnl_link.c'; then $(CYGPATH_W) 'rtnl_link.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_link.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_link.Tpo $(DEPDIR)/strace-rtnl_link.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_link.c' object='strace-rtnl_link.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_link.obj `if test -f 'rtnl_link.c'; then $(CYGPATH_W) 'rtnl_link.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_link.c'; fi`
+
+strace-rtnl_mdb.o: rtnl_mdb.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_mdb.o -MD -MP -MF $(DEPDIR)/strace-rtnl_mdb.Tpo -c -o strace-rtnl_mdb.o `test -f 'rtnl_mdb.c' || echo '$(srcdir)/'`rtnl_mdb.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_mdb.Tpo $(DEPDIR)/strace-rtnl_mdb.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_mdb.c' object='strace-rtnl_mdb.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_mdb.o `test -f 'rtnl_mdb.c' || echo '$(srcdir)/'`rtnl_mdb.c
+
+strace-rtnl_mdb.obj: rtnl_mdb.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_mdb.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_mdb.Tpo -c -o strace-rtnl_mdb.obj `if test -f 'rtnl_mdb.c'; then $(CYGPATH_W) 'rtnl_mdb.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_mdb.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_mdb.Tpo $(DEPDIR)/strace-rtnl_mdb.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_mdb.c' object='strace-rtnl_mdb.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_mdb.obj `if test -f 'rtnl_mdb.c'; then $(CYGPATH_W) 'rtnl_mdb.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_mdb.c'; fi`
+
+strace-rtnl_neigh.o: rtnl_neigh.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_neigh.o -MD -MP -MF $(DEPDIR)/strace-rtnl_neigh.Tpo -c -o strace-rtnl_neigh.o `test -f 'rtnl_neigh.c' || echo '$(srcdir)/'`rtnl_neigh.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_neigh.Tpo $(DEPDIR)/strace-rtnl_neigh.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_neigh.c' object='strace-rtnl_neigh.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_neigh.o `test -f 'rtnl_neigh.c' || echo '$(srcdir)/'`rtnl_neigh.c
+
+strace-rtnl_neigh.obj: rtnl_neigh.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_neigh.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_neigh.Tpo -c -o strace-rtnl_neigh.obj `if test -f 'rtnl_neigh.c'; then $(CYGPATH_W) 'rtnl_neigh.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_neigh.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_neigh.Tpo $(DEPDIR)/strace-rtnl_neigh.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_neigh.c' object='strace-rtnl_neigh.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_neigh.obj `if test -f 'rtnl_neigh.c'; then $(CYGPATH_W) 'rtnl_neigh.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_neigh.c'; fi`
+
+strace-rtnl_neightbl.o: rtnl_neightbl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_neightbl.o -MD -MP -MF $(DEPDIR)/strace-rtnl_neightbl.Tpo -c -o strace-rtnl_neightbl.o `test -f 'rtnl_neightbl.c' || echo '$(srcdir)/'`rtnl_neightbl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_neightbl.Tpo $(DEPDIR)/strace-rtnl_neightbl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_neightbl.c' object='strace-rtnl_neightbl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_neightbl.o `test -f 'rtnl_neightbl.c' || echo '$(srcdir)/'`rtnl_neightbl.c
+
+strace-rtnl_neightbl.obj: rtnl_neightbl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_neightbl.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_neightbl.Tpo -c -o strace-rtnl_neightbl.obj `if test -f 'rtnl_neightbl.c'; then $(CYGPATH_W) 'rtnl_neightbl.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_neightbl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_neightbl.Tpo $(DEPDIR)/strace-rtnl_neightbl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_neightbl.c' object='strace-rtnl_neightbl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_neightbl.obj `if test -f 'rtnl_neightbl.c'; then $(CYGPATH_W) 'rtnl_neightbl.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_neightbl.c'; fi`
+
+strace-rtnl_netconf.o: rtnl_netconf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_netconf.o -MD -MP -MF $(DEPDIR)/strace-rtnl_netconf.Tpo -c -o strace-rtnl_netconf.o `test -f 'rtnl_netconf.c' || echo '$(srcdir)/'`rtnl_netconf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_netconf.Tpo $(DEPDIR)/strace-rtnl_netconf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_netconf.c' object='strace-rtnl_netconf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_netconf.o `test -f 'rtnl_netconf.c' || echo '$(srcdir)/'`rtnl_netconf.c
+
+strace-rtnl_netconf.obj: rtnl_netconf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_netconf.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_netconf.Tpo -c -o strace-rtnl_netconf.obj `if test -f 'rtnl_netconf.c'; then $(CYGPATH_W) 'rtnl_netconf.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_netconf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_netconf.Tpo $(DEPDIR)/strace-rtnl_netconf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_netconf.c' object='strace-rtnl_netconf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_netconf.obj `if test -f 'rtnl_netconf.c'; then $(CYGPATH_W) 'rtnl_netconf.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_netconf.c'; fi`
+
+strace-rtnl_nsid.o: rtnl_nsid.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_nsid.o -MD -MP -MF $(DEPDIR)/strace-rtnl_nsid.Tpo -c -o strace-rtnl_nsid.o `test -f 'rtnl_nsid.c' || echo '$(srcdir)/'`rtnl_nsid.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_nsid.Tpo $(DEPDIR)/strace-rtnl_nsid.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_nsid.c' object='strace-rtnl_nsid.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_nsid.o `test -f 'rtnl_nsid.c' || echo '$(srcdir)/'`rtnl_nsid.c
+
+strace-rtnl_nsid.obj: rtnl_nsid.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_nsid.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_nsid.Tpo -c -o strace-rtnl_nsid.obj `if test -f 'rtnl_nsid.c'; then $(CYGPATH_W) 'rtnl_nsid.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_nsid.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_nsid.Tpo $(DEPDIR)/strace-rtnl_nsid.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_nsid.c' object='strace-rtnl_nsid.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_nsid.obj `if test -f 'rtnl_nsid.c'; then $(CYGPATH_W) 'rtnl_nsid.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_nsid.c'; fi`
+
+strace-rtnl_route.o: rtnl_route.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_route.o -MD -MP -MF $(DEPDIR)/strace-rtnl_route.Tpo -c -o strace-rtnl_route.o `test -f 'rtnl_route.c' || echo '$(srcdir)/'`rtnl_route.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_route.Tpo $(DEPDIR)/strace-rtnl_route.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_route.c' object='strace-rtnl_route.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_route.o `test -f 'rtnl_route.c' || echo '$(srcdir)/'`rtnl_route.c
+
+strace-rtnl_route.obj: rtnl_route.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_route.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_route.Tpo -c -o strace-rtnl_route.obj `if test -f 'rtnl_route.c'; then $(CYGPATH_W) 'rtnl_route.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_route.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_route.Tpo $(DEPDIR)/strace-rtnl_route.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_route.c' object='strace-rtnl_route.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_route.obj `if test -f 'rtnl_route.c'; then $(CYGPATH_W) 'rtnl_route.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_route.c'; fi`
+
+strace-rtnl_rule.o: rtnl_rule.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_rule.o -MD -MP -MF $(DEPDIR)/strace-rtnl_rule.Tpo -c -o strace-rtnl_rule.o `test -f 'rtnl_rule.c' || echo '$(srcdir)/'`rtnl_rule.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_rule.Tpo $(DEPDIR)/strace-rtnl_rule.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_rule.c' object='strace-rtnl_rule.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_rule.o `test -f 'rtnl_rule.c' || echo '$(srcdir)/'`rtnl_rule.c
+
+strace-rtnl_rule.obj: rtnl_rule.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_rule.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_rule.Tpo -c -o strace-rtnl_rule.obj `if test -f 'rtnl_rule.c'; then $(CYGPATH_W) 'rtnl_rule.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_rule.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_rule.Tpo $(DEPDIR)/strace-rtnl_rule.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_rule.c' object='strace-rtnl_rule.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_rule.obj `if test -f 'rtnl_rule.c'; then $(CYGPATH_W) 'rtnl_rule.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_rule.c'; fi`
+
+strace-rtnl_tc.o: rtnl_tc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_tc.o -MD -MP -MF $(DEPDIR)/strace-rtnl_tc.Tpo -c -o strace-rtnl_tc.o `test -f 'rtnl_tc.c' || echo '$(srcdir)/'`rtnl_tc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_tc.Tpo $(DEPDIR)/strace-rtnl_tc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_tc.c' object='strace-rtnl_tc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_tc.o `test -f 'rtnl_tc.c' || echo '$(srcdir)/'`rtnl_tc.c
+
+strace-rtnl_tc.obj: rtnl_tc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_tc.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_tc.Tpo -c -o strace-rtnl_tc.obj `if test -f 'rtnl_tc.c'; then $(CYGPATH_W) 'rtnl_tc.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_tc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_tc.Tpo $(DEPDIR)/strace-rtnl_tc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_tc.c' object='strace-rtnl_tc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_tc.obj `if test -f 'rtnl_tc.c'; then $(CYGPATH_W) 'rtnl_tc.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_tc.c'; fi`
+
+strace-rtnl_tc_action.o: rtnl_tc_action.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_tc_action.o -MD -MP -MF $(DEPDIR)/strace-rtnl_tc_action.Tpo -c -o strace-rtnl_tc_action.o `test -f 'rtnl_tc_action.c' || echo '$(srcdir)/'`rtnl_tc_action.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_tc_action.Tpo $(DEPDIR)/strace-rtnl_tc_action.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_tc_action.c' object='strace-rtnl_tc_action.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_tc_action.o `test -f 'rtnl_tc_action.c' || echo '$(srcdir)/'`rtnl_tc_action.c
+
+strace-rtnl_tc_action.obj: rtnl_tc_action.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-rtnl_tc_action.obj -MD -MP -MF $(DEPDIR)/strace-rtnl_tc_action.Tpo -c -o strace-rtnl_tc_action.obj `if test -f 'rtnl_tc_action.c'; then $(CYGPATH_W) 'rtnl_tc_action.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_tc_action.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-rtnl_tc_action.Tpo $(DEPDIR)/strace-rtnl_tc_action.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rtnl_tc_action.c' object='strace-rtnl_tc_action.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-rtnl_tc_action.obj `if test -f 'rtnl_tc_action.c'; then $(CYGPATH_W) 'rtnl_tc_action.c'; else $(CYGPATH_W) '$(srcdir)/rtnl_tc_action.c'; fi`
+
 strace-sched.o: sched.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sched.o -MD -MP -MF $(DEPDIR)/strace-sched.Tpo -c -o strace-sched.o `test -f 'sched.c' || echo '$(srcdir)/'`sched.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sched.Tpo $(DEPDIR)/strace-sched.Po
@@ -5000,6 +5654,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-sg_io_v4.obj `if test -f 'sg_io_v4.c'; then $(CYGPATH_W) 'sg_io_v4.c'; else $(CYGPATH_W) '$(srcdir)/sg_io_v4.c'; fi`
 
+strace-shutdown.o: shutdown.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-shutdown.o -MD -MP -MF $(DEPDIR)/strace-shutdown.Tpo -c -o strace-shutdown.o `test -f 'shutdown.c' || echo '$(srcdir)/'`shutdown.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-shutdown.Tpo $(DEPDIR)/strace-shutdown.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='shutdown.c' object='strace-shutdown.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-shutdown.o `test -f 'shutdown.c' || echo '$(srcdir)/'`shutdown.c
+
+strace-shutdown.obj: shutdown.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-shutdown.obj -MD -MP -MF $(DEPDIR)/strace-shutdown.Tpo -c -o strace-shutdown.obj `if test -f 'shutdown.c'; then $(CYGPATH_W) 'shutdown.c'; else $(CYGPATH_W) '$(srcdir)/shutdown.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-shutdown.Tpo $(DEPDIR)/strace-shutdown.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='shutdown.c' object='strace-shutdown.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-shutdown.obj `if test -f 'shutdown.c'; then $(CYGPATH_W) 'shutdown.c'; else $(CYGPATH_W) '$(srcdir)/shutdown.c'; fi`
+
 strace-sigaltstack.o: sigaltstack.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-sigaltstack.o -MD -MP -MF $(DEPDIR)/strace-sigaltstack.Tpo -c -o strace-sigaltstack.o `test -f 'sigaltstack.c' || echo '$(srcdir)/'`sigaltstack.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-sigaltstack.Tpo $(DEPDIR)/strace-sigaltstack.Po
@@ -5168,6 +5836,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-strace.obj `if test -f 'strace.c'; then $(CYGPATH_W) 'strace.c'; else $(CYGPATH_W) '$(srcdir)/strace.c'; fi`
 
+strace-string_to_uint.o: string_to_uint.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-string_to_uint.o -MD -MP -MF $(DEPDIR)/strace-string_to_uint.Tpo -c -o strace-string_to_uint.o `test -f 'string_to_uint.c' || echo '$(srcdir)/'`string_to_uint.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-string_to_uint.Tpo $(DEPDIR)/strace-string_to_uint.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='string_to_uint.c' object='strace-string_to_uint.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-string_to_uint.o `test -f 'string_to_uint.c' || echo '$(srcdir)/'`string_to_uint.c
+
+strace-string_to_uint.obj: string_to_uint.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-string_to_uint.obj -MD -MP -MF $(DEPDIR)/strace-string_to_uint.Tpo -c -o strace-string_to_uint.obj `if test -f 'string_to_uint.c'; then $(CYGPATH_W) 'string_to_uint.c'; else $(CYGPATH_W) '$(srcdir)/string_to_uint.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-string_to_uint.Tpo $(DEPDIR)/strace-string_to_uint.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='string_to_uint.c' object='strace-string_to_uint.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-string_to_uint.obj `if test -f 'string_to_uint.c'; then $(CYGPATH_W) 'string_to_uint.c'; else $(CYGPATH_W) '$(srcdir)/string_to_uint.c'; fi`
+
 strace-swapon.o: swapon.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-swapon.o -MD -MP -MF $(DEPDIR)/strace-swapon.Tpo -c -o strace-swapon.o `test -f 'swapon.c' || echo '$(srcdir)/'`swapon.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-swapon.Tpo $(DEPDIR)/strace-swapon.Po
@@ -5322,6 +6004,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ubi.obj `if test -f 'ubi.c'; then $(CYGPATH_W) 'ubi.c'; else $(CYGPATH_W) '$(srcdir)/ubi.c'; fi`
 
+strace-ucopy.o: ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ucopy.o -MD -MP -MF $(DEPDIR)/strace-ucopy.Tpo -c -o strace-ucopy.o `test -f 'ucopy.c' || echo '$(srcdir)/'`ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ucopy.Tpo $(DEPDIR)/strace-ucopy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='ucopy.c' object='strace-ucopy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ucopy.o `test -f 'ucopy.c' || echo '$(srcdir)/'`ucopy.c
+
+strace-ucopy.obj: ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-ucopy.obj -MD -MP -MF $(DEPDIR)/strace-ucopy.Tpo -c -o strace-ucopy.obj `if test -f 'ucopy.c'; then $(CYGPATH_W) 'ucopy.c'; else $(CYGPATH_W) '$(srcdir)/ucopy.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-ucopy.Tpo $(DEPDIR)/strace-ucopy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='ucopy.c' object='strace-ucopy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-ucopy.obj `if test -f 'ucopy.c'; then $(CYGPATH_W) 'ucopy.c'; else $(CYGPATH_W) '$(srcdir)/ucopy.c'; fi`
+
 strace-uid.o: uid.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-uid.o -MD -MP -MF $(DEPDIR)/strace-uid.Tpo -c -o strace-uid.o `test -f 'uid.c' || echo '$(srcdir)/'`uid.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-uid.Tpo $(DEPDIR)/strace-uid.Po
@@ -5623,6 +6319,10 @@
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
 check-valgrind-local: 
+check-valgrind-memcheck-local: 
+check-valgrind-helgrind-local: 
+check-valgrind-drd-local: 
+check-valgrind-sgcheck-local: 
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -5933,6 +6633,22 @@
 
 check-valgrind-am: check-valgrind-local
 
+check-valgrind-drd: check-valgrind-drd-recursive
+
+check-valgrind-drd-am: check-valgrind-drd-local
+
+check-valgrind-helgrind: check-valgrind-helgrind-recursive
+
+check-valgrind-helgrind-am: check-valgrind-helgrind-local
+
+check-valgrind-memcheck: check-valgrind-memcheck-recursive
+
+check-valgrind-memcheck-am: check-valgrind-memcheck-local
+
+check-valgrind-sgcheck: check-valgrind-sgcheck-recursive
+
+check-valgrind-sgcheck-am: check-valgrind-sgcheck-local
+
 clean: clean-recursive
 
 clean-am: clean-binPROGRAMS clean-generic clean-local \
@@ -6013,9 +6729,13 @@
 
 .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
 	am--refresh check check-am check-valgrind-am \
-	check-valgrind-local clean clean-binPROGRAMS clean-cscope \
-	clean-generic clean-local clean-noinstLIBRARIES cscope \
-	cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+	check-valgrind-drd-am check-valgrind-drd-local \
+	check-valgrind-helgrind-am check-valgrind-helgrind-local \
+	check-valgrind-local check-valgrind-memcheck-am \
+	check-valgrind-memcheck-local check-valgrind-sgcheck-am \
+	check-valgrind-sgcheck-local clean clean-binPROGRAMS \
+	clean-cscope clean-generic clean-local clean-noinstLIBRARIES \
+	cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
 	dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
 	dist-zip distcheck distclean distclean-compile \
 	distclean-generic distclean-hdr distclean-tags distcleancheck \
@@ -6076,6 +6796,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_commands.h: $(top_srcdir)/xlat/bpf_commands.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/bpf_map_flags.h: $(top_srcdir)/xlat/bpf_map_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_map_types.h: $(top_srcdir)/xlat/bpf_map_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_map_update_elem_flags.h: $(top_srcdir)/xlat/bpf_map_update_elem_flags.in $(top_srcdir)/xlat/gen.sh
@@ -6088,6 +6810,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_op_jmp.h: $(top_srcdir)/xlat/bpf_op_jmp.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/bpf_prog_flags.h: $(top_srcdir)/xlat/bpf_prog_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_prog_types.h: $(top_srcdir)/xlat/bpf_prog_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_rval.h: $(top_srcdir)/xlat/bpf_rval.in $(top_srcdir)/xlat/gen.sh
@@ -6170,6 +6894,10 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/cpuclocknames.h: $(top_srcdir)/xlat/cpuclocknames.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/crypto_nl_attrs.h: $(top_srcdir)/xlat/crypto_nl_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/dcb_commands.h: $(top_srcdir)/xlat/dcb_commands.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/delete_module_flags.h: $(top_srcdir)/xlat/delete_module_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/dirent_types.h: $(top_srcdir)/xlat/dirent_types.in $(top_srcdir)/xlat/gen.sh
@@ -6234,6 +6962,10 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/fdflags.h: $(top_srcdir)/xlat/fdflags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/fib_rule_actions.h: $(top_srcdir)/xlat/fib_rule_actions.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/fib_rule_flags.h: $(top_srcdir)/xlat/fib_rule_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/fiemap_extent_flags.h: $(top_srcdir)/xlat/fiemap_extent_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/fiemap_flags.h: $(top_srcdir)/xlat/fiemap_flags.in $(top_srcdir)/xlat/gen.sh
@@ -6268,10 +7000,14 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/if_dqinfo_valid.h: $(top_srcdir)/xlat/if_dqinfo_valid.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ifaddrflags.h: $(top_srcdir)/xlat/ifaddrflags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/iffflags.h: $(top_srcdir)/xlat/iffflags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/inet_diag_attrs.h: $(top_srcdir)/xlat/inet_diag_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet_diag_bytecodes.h: $(top_srcdir)/xlat/inet_diag_bytecodes.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/inet_diag_extended_flags.h: $(top_srcdir)/xlat/inet_diag_extended_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/inet_diag_req_attrs.h: $(top_srcdir)/xlat/inet_diag_req_attrs.in $(top_srcdir)/xlat/gen.sh
@@ -6290,6 +7026,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/ip_cmsg_types.h: $(top_srcdir)/xlat/ip_cmsg_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ip_type_of_services.h: $(top_srcdir)/xlat/ip_type_of_services.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/ipc_msg_flags.h: $(top_srcdir)/xlat/ipc_msg_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/ipccalls.h: $(top_srcdir)/xlat/ipccalls.in $(top_srcdir)/xlat/gen.sh
@@ -6320,6 +7058,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/loop_flags_options.h: $(top_srcdir)/xlat/loop_flags_options.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/lwtunnel_encap_types.h: $(top_srcdir)/xlat/lwtunnel_encap_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/madvise_cmds.h: $(top_srcdir)/xlat/madvise_cmds.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/mbindflags.h: $(top_srcdir)/xlat/mbindflags.in $(top_srcdir)/xlat/gen.sh
@@ -6372,6 +7112,12 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/name_to_handle_at_flags.h: $(top_srcdir)/xlat/name_to_handle_at_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/neighbor_cache_entry_flags.h: $(top_srcdir)/xlat/neighbor_cache_entry_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/neighbor_cache_entry_states.h: $(top_srcdir)/xlat/neighbor_cache_entry_states.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/netlink_ack_flags.h: $(top_srcdir)/xlat/netlink_ack_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_diag_attrs.h: $(top_srcdir)/xlat/netlink_diag_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_diag_show.h: $(top_srcdir)/xlat/netlink_diag_show.in $(top_srcdir)/xlat/gen.sh
@@ -6392,6 +7138,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nl_audit_types.h: $(top_srcdir)/xlat/nl_audit_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nl_crypto_types.h: $(top_srcdir)/xlat/nl_crypto_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nl_netfilter_msg_types.h: $(top_srcdir)/xlat/nl_netfilter_msg_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nl_netfilter_subsys_ids.h: $(top_srcdir)/xlat/nl_netfilter_subsys_ids.in $(top_srcdir)/xlat/gen.sh
@@ -6404,6 +7152,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nl_xfrm_types.h: $(top_srcdir)/xlat/nl_xfrm_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nlmsgerr_attrs.h: $(top_srcdir)/xlat/nlmsgerr_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/notifyflags.h: $(top_srcdir)/xlat/notifyflags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nt_descriptor_types.h: $(top_srcdir)/xlat/nt_descriptor_types.in $(top_srcdir)/xlat/gen.sh
@@ -6414,6 +7164,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/packet_diag_attrs.h: $(top_srcdir)/xlat/packet_diag_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/packet_diag_info_flags.h: $(top_srcdir)/xlat/packet_diag_info_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/packet_diag_show.h: $(top_srcdir)/xlat/packet_diag_show.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/packet_mreq_type.h: $(top_srcdir)/xlat/packet_mreq_type.in $(top_srcdir)/xlat/gen.sh
@@ -6492,6 +7244,58 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/resources.h: $(top_srcdir)/xlat/resources.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/route_nexthop_flags.h: $(top_srcdir)/xlat/route_nexthop_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_flags.h: $(top_srcdir)/xlat/routing_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_protocols.h: $(top_srcdir)/xlat/routing_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_scopes.h: $(top_srcdir)/xlat/routing_scopes.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_table_ids.h: $(top_srcdir)/xlat/routing_table_ids.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_types.h: $(top_srcdir)/xlat/routing_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_addr_attrs.h: $(top_srcdir)/xlat/rtnl_addr_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_addrlabel_attrs.h: $(top_srcdir)/xlat/rtnl_addrlabel_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_dcb_attrs.h: $(top_srcdir)/xlat/rtnl_dcb_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_brport_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_brport_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_info_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_info_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_port_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_port_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_vf_port_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_vf_port_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_xdp_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_xdp_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_link_attrs.h: $(top_srcdir)/xlat/rtnl_link_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_mdb_attrs.h: $(top_srcdir)/xlat/rtnl_mdb_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_neigh_attrs.h: $(top_srcdir)/xlat/rtnl_neigh_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_neightbl_attrs.h: $(top_srcdir)/xlat/rtnl_neightbl_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_neightbl_parms_attrs.h: $(top_srcdir)/xlat/rtnl_neightbl_parms_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_netconf_attrs.h: $(top_srcdir)/xlat/rtnl_netconf_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_nsid_attrs.h: $(top_srcdir)/xlat/rtnl_nsid_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_route_attrs.h: $(top_srcdir)/xlat/rtnl_route_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_rta_metrics_attrs.h: $(top_srcdir)/xlat/rtnl_rta_metrics_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_rule_attrs.h: $(top_srcdir)/xlat/rtnl_rule_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_tc_action_attrs.h: $(top_srcdir)/xlat/rtnl_tc_action_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_tc_attrs.h: $(top_srcdir)/xlat/rtnl_tc_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/rwf_flags.h: $(top_srcdir)/xlat/rwf_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/sa_handler_values.h: $(top_srcdir)/xlat/sa_handler_values.in $(top_srcdir)/xlat/gen.sh
@@ -6572,10 +7376,14 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/sigtrap_codes.h: $(top_srcdir)/xlat/sigtrap_codes.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/skf_ad.h: $(top_srcdir)/xlat/skf_ad.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/smc_diag_attrs.h: $(top_srcdir)/xlat/smc_diag_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/smc_diag_extended_flags.h: $(top_srcdir)/xlat/smc_diag_extended_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/smc_link_group_roles.h: $(top_srcdir)/xlat/smc_link_group_roles.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/smc_states.h: $(top_srcdir)/xlat/smc_states.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/sock_type_flags.h: $(top_srcdir)/xlat/sock_type_flags.in $(top_srcdir)/xlat/gen.sh
@@ -6656,6 +7464,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/ubi_volume_types.h: $(top_srcdir)/xlat/ubi_volume_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/uffd_api_features.h: $(top_srcdir)/xlat/uffd_api_features.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/uffd_api_flags.h: $(top_srcdir)/xlat/uffd_api_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/uffd_copy_flags.h: $(top_srcdir)/xlat/uffd_copy_flags.in $(top_srcdir)/xlat/gen.sh
@@ -6730,6 +7540,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/xattrflags.h: $(top_srcdir)/xlat/xattrflags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/xdp_flags.h: $(top_srcdir)/xlat/xdp_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/xfs_dqblk_flags.h: $(top_srcdir)/xlat/xfs_dqblk_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/xfs_quota_flags.h: $(top_srcdir)/xlat/xfs_quota_flags.in $(top_srcdir)/xlat/gen.sh
@@ -6759,6 +7571,7 @@
 dist-hook:
 	$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
 	${AM_V_GEN}echo $(COPYRIGHT_YEAR) > $(distdir)/.year
+	${AM_V_GEN}echo $(MANPAGE_DATE) > $(distdir)/.strace.1.in.date
 
 news-check: NEWS
 	$(AM_V_GEN)if head -1 $< |				\
diff --git a/NEWS b/NEWS
index 85806f9..46fe3b4 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,73 @@
+Noteworthy changes in release 4.19 (2017-09-05)
+===============================================
+
+* Changes in behaviour
+  * Changed formatting of personality names on tile architecture in order
+    to make it in line with other multi-personality architectures.
+  * Changed field output order in struct v4l2_requestbuffers to improve in/out
+    field formatting.
+  * Changed handling of multiple signal= specifications in an injection
+    expression: multiple specification now leads to error instead of implicit
+    usage the last specification.
+
+* Improvements
+  * Enhanced decoding of optlen argument of getsockopt syscall.
+  * Enhanced decoding of SO_LINGER option of getsockopt and setsockopt syscalls.
+  * Enhanced decoding of SO_PEERCRED option of getsockopt syscall.
+  * Enhanced decoding of IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP,
+    IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP, IPV6_JOIN_ANYCAST,
+    IPV6_LEAVE_ANYCAST, MCAST_JOIN_GROUP, and MCAST_LEAVE_GROUP options
+    of setsockopt syscall.
+  * Enhanced decoding of KEYCTL_DH_COMPUTE operation of keyctl syscall
+    (KDF parameters decoding).
+  * Implemented decoding of KEYCTL_RESTRICT_KEYRING operation of keyctl syscall.
+  * Enhanced decoding of UFFDIO_API ioctl command.
+  * Enhanced decoding of BPF_PROG_LOAD, BPF_MAP_CREATE, BPF_MAP_LOOKUP_ELEM,
+    and BPF_MAP_GET_NEXT_KEY commands of bpf syscall.
+  * Implemented decoding of linux socket filter programs specified
+    for SO_ATTACH_FILTER and SO_ATTACH_REUSEPORT_CBPF socket options.
+  * Implemented decoding of inet_diag_req_v2, inet_diag_req_compat,
+    packet_diag_msg, and smc_diag_msg netlink attributes of NETLINK_SOCK_DIAG.
+  * Implemented NETLINK_SELINUX protocol specific decoding.
+  * Implemented decoding of netlink message ack flags.
+  * Implemented decoding of nlmsgerr netlink attributes.
+  * Implemented basic protocol specific decoding of NETLINK_CRYPTO.
+  * Implemented decoding of crypto_user_alg netlink attributes
+    of NETLINK_CRYPTO.
+  * Implemented basic protocol specific decoding of addr, addrlabel, dcb, link,
+    mdb, neigh, neightbl, netconf, nsid, route, rule, tc, and tca messages
+    of NETLINK_ROUTE.
+  * Implemented decoding of NETLINK_KOBJECT_UEVENT messages.
+  * Improved handling of unexpected tracees (the ones that cloned with
+    CLONE_PARENT/CLONE_PTRACE or called PTRACE_TRACEME on themselves): they
+    are now PTRACE_DETACH'ed instead of PTRACE_CONT'ed.
+  * Updated lists of BPF_*, KEY_*, RWF_*, SCM_*, SO_*, and *_MAGIC constants.
+  * Added decoding of arch_prctl syscall on x86.
+  * Added decoding of seccomp, bpf, userfaultfd, membarrier, mlock2,
+    copy_file_range, preadv2, pwritev2, and statx on alpha.
+  * Added decoding of statx syscall on microblaze.
+  * Added decoding of s390_guarded_storage syscall on s390.
+  * Updated lists of ioctl commands from Linux 4.13.
+  * Enhanced manual page.
+
+* Bug fixes
+  * Fixed printing of group_req structure on non-native personalities.
+  * Fixed output formatting of blkpg_ioctl_arg, dm_name_list, and iocb
+    structures.
+  * Fixed formatting of nul-terminated strings which have kernel-imposed size
+    limit.
+  * Fixed printing of paths that hit PATM_MAX limit in order to match kernel's
+    behaviour.
+  * Fixed build warnings on Android mips64.
+  * Fixed unused function "is_negated_errno" build warning when built
+    with clang.
+  * Fixed syscall number and arguments retrieval behaviour on sparc64 and
+    mips o32 after prctl(PR_SET_DUMPABLE, 0) makes PTRACE_PEEKTEXT impossible
+    to use if Linux kernel has commit v4.10-rc1~114^2~2.
+  * Fixed path tracing for execveat, symlink, symlinkat, inotify_add_watch,
+    and inotify_init syscalls.
+  * Fixed personality switch printing on sparc64 and risc-v.
+
 Noteworthy changes in release 4.18 (2017-07-05)
 ===============================================
 
diff --git a/aclocal.m4 b/aclocal.m4
index cca8cf2..1d14520 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1204,6 +1204,7 @@
 m4_include([m4/ax_prog_cc_for_build.m4])
 m4_include([m4/ax_valgrind_check.m4])
 m4_include([m4/mpers.m4])
+m4_include([m4/st_bpf.m4])
 m4_include([m4/st_save_restore_var.m4])
 m4_include([m4/st_warn_cflags.m4])
 m4_include([m4/warnings.m4])
diff --git a/aio.c b/aio.c
index 7adb20d..600f88e 100644
--- a/aio.c
+++ b/aio.c
@@ -30,6 +30,7 @@
  */
 
 #include "defs.h"
+#include "print_fields.h"
 #include <linux/aio_abi.h>
 
 SYS_FUNC(io_setup)
@@ -53,21 +54,21 @@
 };
 
 static enum iocb_sub
-tprint_lio_opcode(unsigned cmd)
+tprint_lio_opcode(unsigned int cmd)
 {
 	static const struct {
 		const char *name;
 		enum iocb_sub sub;
 	} cmds[] = {
-		{ "pread", SUB_COMMON },
-		{ "pwrite", SUB_COMMON },
-		{ "fsync", SUB_NONE },
-		{ "fdsync", SUB_NONE },
-		{ "preadx", SUB_NONE },
-		{ "poll", SUB_NONE },
-		{ "noop", SUB_NONE },
-		{ "preadv", SUB_VECTOR },
-		{ "pwritev", SUB_VECTOR },
+		{ "IOCB_CMD_PREAD", SUB_COMMON },
+		{ "IOCB_CMD_PWRITE", SUB_COMMON },
+		{ "IOCB_CMD_FSYNC", SUB_NONE },
+		{ "IOCB_CMD_FDSYNC", SUB_NONE },
+		{ "IOCB_CMD_PREADX", SUB_NONE },
+		{ "IOCB_CMD_POLL", SUB_NONE },
+		{ "IOCB_CMD_NOOP", SUB_NONE },
+		{ "IOCB_CMD_PREADV", SUB_VECTOR },
+		{ "IOCB_CMD_PWRITEV", SUB_VECTOR },
 	};
 
 	if (cmd < ARRAY_SIZE(cmds)) {
@@ -75,7 +76,7 @@
 		return cmds[cmd].sub;
 	}
 	tprintf("%u", cmd);
-	tprints_comment("SUB_???");
+	tprints_comment("IOCB_CMD_???");
 	return SUB_NONE;
 }
 
@@ -84,12 +85,11 @@
 {
 /* IOCB_FLAG_RESFD is available since v2.6.22-rc1~47 */
 #ifdef IOCB_FLAG_RESFD
-	if (cb->aio_flags & IOCB_FLAG_RESFD) {
-		tprints(", resfd=");
-		printfd(tcp, cb->aio_resfd);
-	}
+	if (cb->aio_flags & IOCB_FLAG_RESFD)
+		PRINT_FIELD_FD(", ", *cb, aio_resfd, tcp);
+
 	if (cb->aio_flags & ~IOCB_FLAG_RESFD)
-		tprintf(", flags=%#x", cb->aio_flags);
+		PRINT_FIELD_X(", ", *cb, aio_flags);
 #endif
 }
 
@@ -106,19 +106,22 @@
 {
 	enum iocb_sub sub;
 
-	if (cb->aio_data)
-		tprintf("data=%#" PRIx64 ", ",
-			(uint64_t) cb->aio_data);
+	if (cb->aio_data){
+		PRINT_FIELD_X("", *cb, aio_data);
+		tprints(", ");
+	}
 
-	if (cb->aio_key)
-		tprintf("key=%u, ", cb->aio_key);
+	if (cb->aio_key) {
+		PRINT_FIELD_U("", *cb, aio_key);
+		tprints(", ");
+	}
 
+	tprints("aio_lio_opcode=");
 	sub = tprint_lio_opcode(cb->aio_lio_opcode);
 	if (cb->aio_reqprio)
-		tprintf(", reqprio=%hd", cb->aio_reqprio);
+		PRINT_FIELD_D(", ", *cb, aio_reqprio);
 
-	tprints(", fildes=");
-	printfd(tcp, cb->aio_fildes);
+	PRINT_FIELD_FD(", ", *cb, aio_fildes, tcp);
 
 	return sub;
 }
@@ -131,28 +134,27 @@
 	switch (sub) {
 	case SUB_COMMON:
 		if (cb->aio_lio_opcode == 1 && iocb_is_valid(cb)) {
-			tprints(", str=");
-			printstrn(tcp, cb->aio_buf, cb->aio_nbytes);
+			PRINT_FIELD_STRN(", ", *cb, aio_buf,
+					 cb->aio_nbytes, tcp);
 		} else {
-			tprintf(", buf=%#" PRIx64, (uint64_t) cb->aio_buf);
+			PRINT_FIELD_X(", ", *cb, aio_buf);
 		}
-		tprintf(", nbytes=%" PRIu64 ", offset=%" PRId64,
-			(uint64_t) cb->aio_nbytes, (int64_t) cb->aio_offset);
+		PRINT_FIELD_U(", ", *cb, aio_nbytes);
+		PRINT_FIELD_D(", ", *cb, aio_offset);
 		print_common_flags(tcp, cb);
 		break;
 	case SUB_VECTOR:
 		if (iocb_is_valid(cb)) {
-			tprints(", iovec=");
+			tprints(", aio_buf=");
 			tprint_iov(tcp, cb->aio_nbytes, cb->aio_buf,
 				   cb->aio_lio_opcode == 8
 				   ? IOV_DECODE_STR
 				   : IOV_DECODE_ADDR);
 		} else {
-			tprintf(", buf=%#" PRIx64 ", nbytes=%" PRIu64,
-				(uint64_t) cb->aio_buf,
-				(uint64_t) cb->aio_nbytes);
+			PRINT_FIELD_X(", ", *cb, aio_buf);
+			PRINT_FIELD_U(", ", *cb, aio_nbytes);
 		}
-		tprintf(", offset=%" PRId64, (int64_t) cb->aio_offset);
+		PRINT_FIELD_D(", ", *cb, aio_offset);
 		print_common_flags(tcp, cb);
 		break;
 	case SUB_NONE:
@@ -204,10 +206,11 @@
 {
 	struct io_event *event = elem_buf;
 
-	tprintf("{data=%#" PRIx64 ", obj=%#" PRIx64
-		", res=%" PRId64 ", res2=%" PRId64 "}",
-		(uint64_t) event->data, (uint64_t) event->obj,
-		(int64_t) event->res, (int64_t) event->res2);
+	PRINT_FIELD_X("{", *event, data);
+	PRINT_FIELD_X(", ", *event, obj);
+	PRINT_FIELD_D(", ", *event, res);
+	PRINT_FIELD_D(", ", *event, res2);
+	tprints("}");
 
 	return true;
 }
diff --git a/basic_filters.c b/basic_filters.c
new file mode 100644
index 0000000..7b7f0a5
--- /dev/null
+++ b/basic_filters.c
@@ -0,0 +1,321 @@
+/*
+ * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "number_set.h"
+#include "filter.h"
+#include <regex.h>
+
+static bool
+qualify_syscall_number(const char *s, struct number_set *set)
+{
+	int n = string_to_uint(s);
+	if (n < 0)
+		return false;
+
+	unsigned int p;
+	bool done = false;
+
+	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
+		if ((unsigned) n >= nsyscall_vec[p]) {
+			continue;
+		}
+		add_number_to_set_array(n, set, p);
+		done = true;
+	}
+
+	return done;
+}
+
+static void
+regerror_msg_and_die(int errcode, const regex_t *preg,
+		     const char *str, const char *pattern)
+{
+	char buf[512];
+
+	regerror(errcode, preg, buf, sizeof(buf));
+	error_msg_and_die("%s: %s: %s", str, pattern, buf);
+}
+
+static bool
+qualify_syscall_regex(const char *s, struct number_set *set)
+{
+	regex_t preg;
+	int rc;
+
+	if ((rc = regcomp(&preg, s, REG_EXTENDED | REG_NOSUB)) != 0)
+		regerror_msg_and_die(rc, &preg, "regcomp", s);
+
+	unsigned int p;
+	bool found = false;
+	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
+		unsigned int i;
+
+		for (i = 0; i < nsyscall_vec[p]; ++i) {
+			if (!sysent_vec[p][i].sys_name)
+				continue;
+			rc = regexec(&preg, sysent_vec[p][i].sys_name,
+				     0, NULL, 0);
+			if (rc == REG_NOMATCH)
+				continue;
+			else if (rc)
+				regerror_msg_and_die(rc, &preg, "regexec", s);
+			add_number_to_set_array(i, set, p);
+			found = true;
+		}
+	}
+
+	regfree(&preg);
+	return found;
+}
+
+static unsigned int
+lookup_class(const char *s)
+{
+	static const struct {
+		const char *name;
+		unsigned int value;
+	} syscall_class[] = {
+		{ "desc",	TRACE_DESC	},
+		{ "file",	TRACE_FILE	},
+		{ "memory",	TRACE_MEMORY	},
+		{ "process",	TRACE_PROCESS	},
+		{ "signal",	TRACE_SIGNAL	},
+		{ "ipc",	TRACE_IPC	},
+		{ "network",	TRACE_NETWORK	},
+		{ "%desc",	TRACE_DESC	},
+		{ "%file",	TRACE_FILE	},
+		{ "%memory",	TRACE_MEMORY	},
+		{ "%process",	TRACE_PROCESS	},
+		{ "%signal",	TRACE_SIGNAL	},
+		{ "%ipc",	TRACE_IPC	},
+		{ "%network",	TRACE_NETWORK	},
+		{ "%stat",	TRACE_STAT	},
+		{ "%lstat",	TRACE_LSTAT	},
+		{ "%fstat",	TRACE_FSTAT	},
+		{ "%%stat",	TRACE_STAT_LIKE	},
+		{ "%statfs",	TRACE_STATFS	},
+		{ "%fstatfs",	TRACE_FSTATFS	},
+		{ "%%statfs",	TRACE_STATFS_LIKE	},
+	};
+
+	unsigned int i;
+	for (i = 0; i < ARRAY_SIZE(syscall_class); ++i) {
+		if (strcmp(s, syscall_class[i].name) == 0) {
+			return syscall_class[i].value;
+		}
+	}
+
+	return 0;
+}
+
+static bool
+qualify_syscall_class(const char *s, struct number_set *set)
+{
+	const unsigned int n = lookup_class(s);
+	if (!n)
+		return false;
+
+	unsigned int p;
+	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
+		unsigned int i;
+
+		for (i = 0; i < nsyscall_vec[p]; ++i) {
+			if (!sysent_vec[p][i].sys_name
+			    || (sysent_vec[p][i].sys_flags & n) != n) {
+				continue;
+			}
+			add_number_to_set_array(i, set, p);
+		}
+	}
+
+	return true;
+}
+
+static bool
+qualify_syscall_name(const char *s, struct number_set *set)
+{
+	unsigned int p;
+	bool found = false;
+
+	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
+		unsigned int i;
+
+		for (i = 0; i < nsyscall_vec[p]; ++i) {
+			if (!sysent_vec[p][i].sys_name
+			    || strcmp(s, sysent_vec[p][i].sys_name)) {
+				continue;
+			}
+			add_number_to_set_array(i, set, p);
+			found = true;
+		}
+	}
+
+	return found;
+}
+
+static bool
+qualify_syscall(const char *token, struct number_set *set)
+{
+	bool ignore_fail = false;
+
+	while (*token == '?') {
+		token++;
+		ignore_fail = true;
+	}
+	if (*token >= '0' && *token <= '9')
+		return qualify_syscall_number(token, set) || ignore_fail;
+	if (*token == '/')
+		return qualify_syscall_regex(token + 1, set) || ignore_fail;
+	return qualify_syscall_class(token, set)
+	       || qualify_syscall_name(token, set)
+	       || ignore_fail;
+}
+
+/*
+ * Add syscall numbers to SETs for each supported personality
+ * according to STR specification.
+ */
+void
+qualify_syscall_tokens(const char *const str, struct number_set *const set,
+		       const char *const name)
+{
+	/* Clear all sets. */
+	clear_number_set_array(set, SUPPORTED_PERSONALITIES);
+
+	/*
+	 * Each leading ! character means inversion
+	 * of the remaining specification.
+	 */
+	const char *s = str;
+handle_inversion:
+	while (*s == '!') {
+		invert_number_set_array(set, SUPPORTED_PERSONALITIES);
+		++s;
+	}
+
+	if (strcmp(s, "none") == 0) {
+		/*
+		 * No syscall numbers are added to sets.
+		 * Subsequent is_number_in_set* invocations
+		 * will return set[p]->not.
+		 */
+		return;
+	} else if (strcmp(s, "all") == 0) {
+		s = "!none";
+		goto handle_inversion;
+	}
+
+	/*
+	 * Split the string into comma separated tokens.
+	 * For each token, call qualify_syscall that will take care
+	 * if adding appropriate syscall numbers to sets.
+	 * The absence of tokens or a negative return code
+	 * from qualify_syscall is a fatal error.
+	 */
+	char *copy = xstrdup(s);
+	char *saveptr = NULL;
+	const char *token;
+	bool done = false;
+
+	for (token = strtok_r(copy, ",", &saveptr); token;
+	     token = strtok_r(NULL, ",", &saveptr)) {
+		done = qualify_syscall(token, set);
+		if (!done) {
+			error_msg_and_die("invalid %s '%s'", name, token);
+		}
+	}
+
+	free(copy);
+
+	if (!done) {
+		error_msg_and_die("invalid %s '%s'", name, str);
+	}
+}
+
+/*
+ * Add numbers to SET according to STR specification.
+ */
+void
+qualify_tokens(const char *const str, struct number_set *const set,
+	       string_to_uint_func func, const char *const name)
+{
+	/* Clear the set. */
+	clear_number_set_array(set, 1);
+
+	/*
+	 * Each leading ! character means inversion
+	 * of the remaining specification.
+	 */
+	const char *s = str;
+handle_inversion:
+	while (*s == '!') {
+		invert_number_set_array(set, 1);
+		++s;
+	}
+
+	if (strcmp(s, "none") == 0) {
+		/*
+		 * No numbers are added to the set.
+		 * Subsequent is_number_in_set* invocations
+		 * will return set->not.
+		 */
+		return;
+	} else if (strcmp(s, "all") == 0) {
+		s = "!none";
+		goto handle_inversion;
+	}
+
+	/*
+	 * Split the string into comma separated tokens.
+	 * For each token, find out the corresponding number
+	 * by calling FUNC, and add that number to the set.
+	 * The absence of tokens or a negative answer
+	 * from FUNC is a fatal error.
+	 */
+	char *copy = xstrdup(s);
+	char *saveptr = NULL;
+	const char *token;
+	int number = -1;
+
+	for (token = strtok_r(copy, ",", &saveptr); token;
+	     token = strtok_r(NULL, ",", &saveptr)) {
+		number = func(token);
+		if (number < 0) {
+			error_msg_and_die("invalid %s '%s'", name, token);
+		}
+
+		add_number_to_set(number, set);
+	}
+
+	free(copy);
+
+	if (number < 0) {
+		error_msg_and_die("invalid %s '%s'", name, str);
+	}
+}
diff --git a/bind.c b/bind.c
new file mode 100644
index 0000000..315a8aa
--- /dev/null
+++ b/bind.c
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+ * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+ * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * Copyright (c) 1996-2000 Wichert Akkerman <wichert@cistron.nl>
+ * Copyright (c) 1999-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+SYS_FUNC(bind)
+{
+	printfd(tcp, tcp->u_arg[0]);
+	tprints(", ");
+	const int addrlen = tcp->u_arg[2];
+	decode_sockaddr(tcp, tcp->u_arg[1], addrlen);
+	tprintf(", %d", addrlen);
+
+	return RVAL_DECODED;
+}
diff --git a/block.c b/block.c
index c77b92a..b402f68 100644
--- a/block.c
+++ b/block.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
  * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2011-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,6 +67,8 @@
 
 #include MPERS_DEFS
 
+#include "print_fields.h"
+
 #ifndef BLKPG
 # define BLKPG      _IO(0x12, 105)
 #endif
@@ -123,21 +126,17 @@
 {
 	struct_blkpg_partition p;
 
-	tprints("{");
-	printxval(blkpg_ops, blkpg->op, "BLKPG_???");
+	PRINT_FIELD_XVAL("{", *blkpg, op, blkpg_ops, "BLKPG_???");
+	PRINT_FIELD_D(", ", *blkpg, flags);
+	PRINT_FIELD_D(", ", *blkpg, datalen);
 
-	tprintf(", flags=%d, datalen=%d, data=",
-		blkpg->flags, blkpg->datalen);
-
+	tprints(", data=");
 	if (!umove_or_printaddr(tcp, ptr_to_kulong(blkpg->data), &p)) {
-		tprintf("{start=%" PRId64 ", length=%" PRId64
-			", pno=%d, devname=",
-			p.start, p.length, p.pno);
-		print_quoted_string(p.devname, sizeof(p.devname),
-				    QUOTE_0_TERMINATED);
-		tprints(", volname=");
-		print_quoted_string(p.volname, sizeof(p.volname),
-				    QUOTE_0_TERMINATED);
+		PRINT_FIELD_D("{", p, start);
+		PRINT_FIELD_D(", ", p, length);
+		PRINT_FIELD_D(", ", p, pno);
+		PRINT_FIELD_CSTRING(", ", p, devname);
+		PRINT_FIELD_CSTRING(", ", p, volname);
 		tprints("}");
 	}
 	tprints("}");
@@ -240,21 +239,18 @@
 			tprints(", ");
 			if (umove_or_printaddr(tcp, arg, &buts))
 				break;
-			tprintf("{act_mask=%u, buf_size=%u, "
-				"buf_nr=%u, start_lba=%" PRIu64 ", "
-				"end_lba=%" PRIu64 ", pid=%u",
-				(unsigned)buts.act_mask, buts.buf_size,
-				buts.buf_nr, buts.start_lba,
-				buts.end_lba, buts.pid);
-			return 1;
+			PRINT_FIELD_U("{", buts, act_mask);
+			PRINT_FIELD_U(", ", buts, buf_size);
+			PRINT_FIELD_U(", ", buts, buf_nr);
+			PRINT_FIELD_U(", ", buts, start_lba);
+			PRINT_FIELD_U(", ", buts, end_lba);
+			PRINT_FIELD_U(", ", buts, pid);
+			return 0;
 		} else {
 			struct_blk_user_trace_setup buts;
 
-			if (!syserror(tcp) && !umove(tcp, arg, &buts)) {
-				tprints(", name=");
-				print_quoted_string(buts.name, sizeof(buts.name),
-						    QUOTE_0_TERMINATED);
-			}
+			if (!syserror(tcp) && !umove(tcp, arg, &buts))
+				PRINT_FIELD_CSTRING(", ", buts, name);
 			tprints("}");
 			break;
 		}
@@ -270,5 +266,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/bpf.c b/bpf.c
index de909d3..7734b07 100644
--- a/bpf.c
+++ b/bpf.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2017 Quentin Monnet <quentin.monnet@6wind.com>
  * All rights reserved.
  *
@@ -27,6 +27,7 @@
  */
 
 #include "defs.h"
+#include "print_fields.h"
 
 #ifdef HAVE_LINUX_BPF_H
 # include <linux/bpf.h>
@@ -34,39 +35,101 @@
 
 #include "xlat/bpf_commands.h"
 #include "xlat/bpf_map_types.h"
+#include "xlat/bpf_map_flags.h"
 #include "xlat/bpf_prog_types.h"
+#include "xlat/bpf_prog_flags.h"
 #include "xlat/bpf_map_update_elem_flags.h"
 #include "xlat/bpf_attach_type.h"
 #include "xlat/bpf_attach_flags.h"
 
+#define DECL_BPF_CMD_DECODER(bpf_cmd_decoder)				\
+int									\
+bpf_cmd_decoder(struct tcb *const tcp,					\
+		const kernel_ulong_t addr,				\
+		const unsigned int size,				\
+		void *const data)					\
+/* End of DECL_BPF_CMD_DECODER definition. */
+
+#define DEF_BPF_CMD_DECODER(bpf_cmd)					\
+	static DECL_BPF_CMD_DECODER(decode_ ## bpf_cmd)
+
+#define BPF_CMD_ENTRY(bpf_cmd)						\
+	[bpf_cmd] = decode_ ## bpf_cmd
+
+typedef DECL_BPF_CMD_DECODER((*bpf_cmd_decoder_t));
+
 static int
-bpf_map_create(struct tcb *const tcp, const kernel_ulong_t addr,
-	       unsigned int size)
+decode_attr_extra_data(struct tcb *const tcp,
+		       const char *data,
+		       unsigned int size,
+		       const size_t attr_size)
+{
+	if (size <= attr_size)
+		return 0;
+
+	data += attr_size;
+	size -= attr_size;
+
+	unsigned int i;
+	for (i = 0; i < size; ++i) {
+		if (data[i]) {
+			tprints(", ");
+			if (abbrev(tcp))
+				tprints("...");
+			else
+				print_quoted_string(data, size,
+						    QUOTE_FORCE_HEX);
+			return RVAL_DECODED;
+		}
+	}
+
+	return 0;
+}
+
+DEF_BPF_CMD_DECODER(BPF_MAP_CREATE)
 {
 	struct {
-		uint32_t map_type, key_size, value_size, max_entries;
+		uint32_t map_type, key_size, value_size, max_entries,
+			 map_flags, inner_map_fd;
 	} attr = {};
+	const unsigned int len = size < sizeof(attr) ? size : sizeof(attr);
 
-	if (!size) {
-		printaddr(addr);
-		return RVAL_DECODED | RVAL_FD;
-	}
-	if (size > sizeof(attr))
-		size = sizeof(attr);
-	if (umoven_or_printaddr(tcp, addr, size, &attr))
-		return RVAL_DECODED | RVAL_FD;
+	memcpy(&attr, data, len);
 
-	tprints("{map_type=");
-	printxval(bpf_map_types, attr.map_type, "BPF_MAP_TYPE_???");
-	tprintf(", key_size=%u, value_size=%u, max_entries=%u}",
-		attr.key_size, attr.value_size, attr.max_entries);
+	PRINT_FIELD_XVAL("{", attr, map_type, bpf_map_types,
+			 "BPF_MAP_TYPE_???");
+	PRINT_FIELD_U(", ", attr, key_size);
+	PRINT_FIELD_U(", ", attr, value_size);
+	PRINT_FIELD_U(", ", attr, max_entries);
+	PRINT_FIELD_FLAGS(", ", attr, map_flags, bpf_map_flags, "BPF_F_???");
+	PRINT_FIELD_FD(", ", attr, inner_map_fd, tcp);
+	decode_attr_extra_data(tcp, data, size, sizeof(attr));
+	tprints("}");
 
 	return RVAL_DECODED | RVAL_FD;
 }
 
-static void
-bpf_map_update_elem(struct tcb *const tcp, const kernel_ulong_t addr,
-		    unsigned int size)
+DEF_BPF_CMD_DECODER(BPF_MAP_LOOKUP_ELEM)
+{
+	struct bpf_io_elem_struct {
+		uint32_t map_fd;
+		uint64_t ATTRIBUTE_ALIGNED(8) key, value;
+	} attr = {};
+
+	const unsigned int len = size < sizeof(attr) ? size : sizeof(attr);
+
+	memcpy(&attr, data, len);
+
+	PRINT_FIELD_FD("{", attr, map_fd, tcp);
+	PRINT_FIELD_X(", ", attr, key);
+	PRINT_FIELD_X(", ", attr, value);
+	decode_attr_extra_data(tcp, data, size, sizeof(attr));
+	tprints("}");
+
+	return RVAL_DECODED;
+}
+
+DEF_BPF_CMD_DECODER(BPF_MAP_UPDATE_ELEM)
 {
 	struct {
 		uint32_t map_fd;
@@ -74,233 +137,192 @@
 		uint64_t ATTRIBUTE_ALIGNED(8) value;
 		uint64_t flags;
 	} attr = {};
+	const unsigned int len = size < sizeof(attr) ? size : sizeof(attr);
 
-	if (!size) {
-		printaddr(addr);
-		return;
-	}
-	if (size > sizeof(attr))
-		size = sizeof(attr);
-	if (umoven_or_printaddr(tcp, addr, size, &attr))
-		return;
+	memcpy(&attr, data, len);
 
-	tprints("{map_fd=");
-	printfd(tcp, attr.map_fd);
-	tprintf(", key=%#" PRIx64 ", value=%#" PRIx64 ", flags=",
-		attr.key, attr.value);
-	printxval64(bpf_map_update_elem_flags, attr.flags, "BPF_???");
-	tprints("}");
-}
-
-static void
-bpf_map_delete_elem(struct tcb *const tcp, const kernel_ulong_t addr,
-		    unsigned int size)
-{
-	struct {
-		uint32_t map_fd;
-		uint64_t ATTRIBUTE_ALIGNED(8) key;
-	} attr = {};
-
-	if (!size) {
-		printaddr(addr);
-		return;
-	}
-	if (size > sizeof(attr))
-		size = sizeof(attr);
-	if (umoven_or_printaddr(tcp, addr, size, &attr))
-		return;
-
-	tprints("{map_fd=");
-	printfd(tcp, attr.map_fd);
-	tprintf(", key=%#" PRIx64 "}", attr.key);
-}
-
-static int
-bpf_map_io(struct tcb *const tcp, const kernel_ulong_t addr, unsigned int size,
-	   const char *const text)
-{
-	struct bpf_io_elem_struct {
-		uint32_t map_fd;
-		uint64_t ATTRIBUTE_ALIGNED(8) key;
-		uint64_t ATTRIBUTE_ALIGNED(8) value;
-	} attr = {};
-
-	if (exiting(tcp)) {
-		if (!syserror(tcp) && !umove_or_printaddr(tcp, addr, &attr))
-			tprintf(", %s=%#" PRIx64, text, attr.value);
-		tprints("}");
-		return RVAL_DECODED;
-	}
-
-	if (!size) {
-		printaddr(addr);
-		return RVAL_DECODED;
-	}
-	if (size > sizeof(attr))
-		size = sizeof(attr);
-	if (umoven_or_printaddr(tcp, addr, size, &attr))
-		return RVAL_DECODED;
-
-	tprints("{map_fd=");
-	printfd(tcp, attr.map_fd);
-	tprintf(", key=%#" PRIx64, attr.key);
-
-	return 0;
-}
-
-static int
-bpf_prog_load(struct tcb *const tcp, const kernel_ulong_t addr,
-	      unsigned int size)
-{
-	struct {
-		uint32_t prog_type, insn_cnt;
-		uint64_t ATTRIBUTE_ALIGNED(8) insns, license;
-		uint32_t log_level, log_size;
-		uint64_t ATTRIBUTE_ALIGNED(8) log_buf;
-		uint32_t kern_version;
-	} attr = {};
-
-	if (!size) {
-		printaddr(addr);
-		return RVAL_DECODED | RVAL_FD;
-	}
-	if (size > sizeof(attr))
-		size = sizeof(attr);
-	if (umoven_or_printaddr(tcp, addr, size, &attr))
-		return RVAL_DECODED | RVAL_FD;
-
-	tprints("{prog_type=");
-	printxval(bpf_prog_types, attr.prog_type, "BPF_PROG_TYPE_???");
-	tprintf(", insn_cnt=%u, insns=%#" PRIx64 ", license=",
-		attr.insn_cnt, attr.insns);
-	printstr(tcp, attr.license);
-	tprintf(", log_level=%u, log_size=%u, log_buf=%#" PRIx64 ", kern_version=%u}",
-		attr.log_level, attr.log_size, attr.log_buf, attr.kern_version);
-
-	return RVAL_DECODED | RVAL_FD;
-}
-
-static int
-bpf_obj_manage(struct tcb *const tcp, const kernel_ulong_t addr,
-	       unsigned int size)
-{
-	struct {
-		uint64_t ATTRIBUTE_ALIGNED(8) pathname;
-		uint32_t bpf_fd;
-	} attr = {};
-
-	if (!size) {
-		printaddr(addr);
-		return RVAL_DECODED | RVAL_FD;
-	}
-	if (size > sizeof(attr))
-		size = sizeof(attr);
-	if (umoven_or_printaddr(tcp, addr, size, &attr))
-		return RVAL_DECODED | RVAL_FD;
-
-	tprints("{pathname=");
-	printpath(tcp, attr.pathname);
-	tprints(", bpf_fd=");
-	printfd(tcp, attr.bpf_fd);
-	tprints("}");
-
-	return RVAL_DECODED | RVAL_FD;
-}
-
-static int
-bpf_prog_attach_detach(struct tcb *const tcp, const kernel_ulong_t addr,
-		       unsigned int size, bool print_attach)
-{
-	struct {
-		uint32_t target_fd, attach_bpf_fd, attach_type, attach_flags;
-	} attr = {};
-
-	if (!size) {
-		printaddr(addr);
-		return RVAL_DECODED;
-	}
-	if (size > sizeof(attr))
-		size = sizeof(attr);
-	if (umoven_or_printaddr(tcp, addr, size, &attr))
-		return RVAL_DECODED;
-
-	tprints("{target_fd=");
-	printfd(tcp, attr.target_fd);
-	if (print_attach) {
-		tprints(", attach_bpf_fd=");
-		printfd(tcp, attr.attach_bpf_fd);
-	}
-	tprints(", attach_type=");
-	printxval(bpf_attach_type, attr.attach_type, "BPF_???");
-	if (print_attach) {
-		tprints(", attach_flags=");
-		printflags(bpf_attach_flags, attr.attach_flags, "BPF_F_???");
-	}
+	PRINT_FIELD_FD("{", attr, map_fd, tcp);
+	PRINT_FIELD_X(", ", attr, key);
+	PRINT_FIELD_X(", ", attr, value);
+	PRINT_FIELD_XVAL(", ", attr, flags, bpf_map_update_elem_flags,
+			 "BPF_???");
+	decode_attr_extra_data(tcp, data, size, sizeof(attr));
 	tprints("}");
 
 	return RVAL_DECODED;
 }
 
-static int
-bpf_prog_attach(struct tcb *const tcp, const kernel_ulong_t addr,
-		unsigned int size)
+DEF_BPF_CMD_DECODER(BPF_MAP_DELETE_ELEM)
 {
-	return bpf_prog_attach_detach(tcp, addr, size, true);
+	struct {
+		uint32_t map_fd;
+		uint64_t ATTRIBUTE_ALIGNED(8) key;
+	} attr = {};
+	const unsigned int len = size < sizeof(attr) ? size : sizeof(attr);
+
+	memcpy(&attr, data, len);
+
+	PRINT_FIELD_FD("{", attr, map_fd, tcp);
+	PRINT_FIELD_X(", ", attr, key);
+	decode_attr_extra_data(tcp, data, size, sizeof(attr));
+	tprints("}");
+
+	return RVAL_DECODED;
 }
 
-static int
-bpf_prog_detach(struct tcb *const tcp, const kernel_ulong_t addr,
-		unsigned int size)
+DEF_BPF_CMD_DECODER(BPF_MAP_GET_NEXT_KEY)
 {
-	return bpf_prog_attach_detach(tcp, addr, size, false);
+	struct bpf_io_elem_struct {
+		uint32_t map_fd;
+		uint64_t ATTRIBUTE_ALIGNED(8) key, next_key;
+	} attr = {};
+
+	const unsigned int len = size < sizeof(attr) ? size : sizeof(attr);
+
+	memcpy(&attr, data, len);
+
+	PRINT_FIELD_FD("{", attr, map_fd, tcp);
+	PRINT_FIELD_X(", ", attr, key);
+	PRINT_FIELD_X(", ", attr, next_key);
+	decode_attr_extra_data(tcp, data, size, sizeof(attr));
+	tprints("}");
+
+	return RVAL_DECODED;
+}
+
+DEF_BPF_CMD_DECODER(BPF_PROG_LOAD)
+{
+	struct bpf_prog_load {
+		uint32_t prog_type, insn_cnt;
+		uint64_t ATTRIBUTE_ALIGNED(8) insns, license;
+		uint32_t log_level, log_size;
+		uint64_t ATTRIBUTE_ALIGNED(8) log_buf;
+		uint32_t kern_version, prog_flags;
+	} attr = {};
+	const unsigned int len = size < sizeof(attr) ? size : sizeof(attr);
+
+	memcpy(&attr, data, len);
+
+	PRINT_FIELD_XVAL("{", attr, prog_type, bpf_prog_types,
+			 "BPF_PROG_TYPE_???");
+	PRINT_FIELD_U(", ", attr, insn_cnt);
+	PRINT_FIELD_X(", ", attr, insns);
+	PRINT_FIELD_STR(", ", attr, license, tcp);
+	PRINT_FIELD_U(", ", attr, log_level);
+	PRINT_FIELD_U(", ", attr, log_size);
+	PRINT_FIELD_X(", ", attr, log_buf);
+	PRINT_FIELD_U(", ", attr, kern_version);
+	PRINT_FIELD_FLAGS(", ", attr, prog_flags, bpf_prog_flags, "BPF_F_???");
+	decode_attr_extra_data(tcp, data, size, sizeof(attr));
+	tprints("}");
+
+	return RVAL_DECODED | RVAL_FD;
+}
+
+DEF_BPF_CMD_DECODER(BPF_OBJ_PIN)
+{
+	struct bpf_obj {
+		uint64_t ATTRIBUTE_ALIGNED(8) pathname;
+		uint32_t bpf_fd;
+	} attr = {};
+	const size_t attr_size =
+		offsetofend(struct bpf_obj, bpf_fd);
+	const unsigned int len = size < attr_size ? size : attr_size;
+
+	memcpy(&attr, data, len);
+
+	PRINT_FIELD_PATH("{", attr, pathname, tcp);
+	PRINT_FIELD_FD(", ", attr, bpf_fd, tcp);
+	decode_attr_extra_data(tcp, data, size, attr_size);
+	tprints("}");
+
+	return RVAL_DECODED | RVAL_FD;
+}
+
+#define decode_BPF_OBJ_GET decode_BPF_OBJ_PIN
+
+DEF_BPF_CMD_DECODER(BPF_PROG_ATTACH)
+{
+	struct {
+		uint32_t target_fd, attach_bpf_fd, attach_type, attach_flags;
+	} attr = {};
+	const unsigned int len = size < sizeof(attr) ? size : sizeof(attr);
+
+	memcpy(&attr, data, len);
+
+	PRINT_FIELD_FD("{", attr, target_fd, tcp);
+	PRINT_FIELD_FD(", ", attr, attach_bpf_fd, tcp);
+	PRINT_FIELD_XVAL(", ", attr, attach_type, bpf_attach_type, "BPF_???");
+	PRINT_FIELD_FLAGS(", ", attr, attach_flags, bpf_attach_flags,
+			  "BPF_F_???");
+	decode_attr_extra_data(tcp, data, size, sizeof(attr));
+	tprints("}");
+
+	return RVAL_DECODED;
+}
+
+DEF_BPF_CMD_DECODER(BPF_PROG_DETACH)
+{
+	struct {
+		uint32_t target_fd, dummy, attach_type;
+	} attr = {};
+	const unsigned int len = size < sizeof(attr) ? size : sizeof(attr);
+
+	memcpy(&attr, data, len);
+
+	PRINT_FIELD_FD("{", attr, target_fd, tcp);
+	PRINT_FIELD_XVAL(", ", attr, attach_type, bpf_attach_type, "BPF_???");
+	decode_attr_extra_data(tcp, data, size, sizeof(attr));
+	tprints("}");
+
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(bpf)
 {
+	static const bpf_cmd_decoder_t bpf_cmd_decoders[] = {
+		BPF_CMD_ENTRY(BPF_MAP_CREATE),
+		BPF_CMD_ENTRY(BPF_MAP_LOOKUP_ELEM),
+		BPF_CMD_ENTRY(BPF_MAP_UPDATE_ELEM),
+		BPF_CMD_ENTRY(BPF_MAP_DELETE_ELEM),
+		BPF_CMD_ENTRY(BPF_MAP_GET_NEXT_KEY),
+		BPF_CMD_ENTRY(BPF_PROG_LOAD),
+		BPF_CMD_ENTRY(BPF_OBJ_PIN),
+		BPF_CMD_ENTRY(BPF_OBJ_GET),
+		BPF_CMD_ENTRY(BPF_PROG_ATTACH),
+		BPF_CMD_ENTRY(BPF_PROG_DETACH),
+	};
+
 	const unsigned int cmd = tcp->u_arg[0];
 	const kernel_ulong_t addr = tcp->u_arg[1];
 	const unsigned int size = tcp->u_arg[2];
-	int rc = RVAL_DECODED;
+	int rc;
 
 	if (entering(tcp)) {
+		static size_t page_size;
+		static char *buf;
+
+		if (!buf) {
+			page_size = get_pagesize();
+			buf = xmalloc(page_size);
+		}
+
 		printxval(bpf_commands, cmd, "BPF_???");
 		tprints(", ");
-	}
 
-	switch (cmd) {
-	case BPF_MAP_CREATE:
-		rc = bpf_map_create(tcp, addr, size);
-		break;
-	case BPF_MAP_LOOKUP_ELEM:
-		rc = bpf_map_io(tcp, addr, size, "value");
-		break;
-	case BPF_MAP_UPDATE_ELEM:
-		bpf_map_update_elem(tcp, addr, size);
-		break;
-	case BPF_MAP_DELETE_ELEM:
-		bpf_map_delete_elem(tcp, addr, size);
-		break;
-	case BPF_MAP_GET_NEXT_KEY:
-		rc = bpf_map_io(tcp, addr, size, "next_key");
-		break;
-	case BPF_PROG_LOAD:
-		rc = bpf_prog_load(tcp, addr, size);
-		break;
-	case BPF_OBJ_PIN:
-		rc = bpf_obj_manage(tcp, addr, size);
-		break;
-	case BPF_OBJ_GET:
-		rc = bpf_obj_manage(tcp, addr, size);
-		break;
-	case BPF_PROG_ATTACH:
-		rc = bpf_prog_attach(tcp, addr, size);
-		break;
-	case BPF_PROG_DETACH:
-		rc = bpf_prog_detach(tcp, addr, size);
-		break;
-	default:
-		printaddr(addr);
-		break;
+		if (size > 0
+		    && size <= get_pagesize()
+		    && cmd < ARRAY_SIZE(bpf_cmd_decoders)
+		    && bpf_cmd_decoders[cmd]) {
+			rc = umoven_or_printaddr(tcp, addr, size, buf)
+			     ? RVAL_DECODED
+			     : bpf_cmd_decoders[cmd](tcp, addr, size, buf);
+		} else {
+			printaddr(addr);
+			rc = RVAL_DECODED;
+		}
+	} else {
+		rc = bpf_cmd_decoders[cmd](tcp, addr, size, NULL) | RVAL_DECODED;
 	}
 
 	if (rc & RVAL_DECODED)
diff --git a/bpf_filter.c b/bpf_filter.c
new file mode 100644
index 0000000..5314c84
--- /dev/null
+++ b/bpf_filter.c
@@ -0,0 +1,170 @@
+/*
+ * Decoder of classic BPF programs.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#include "bpf_filter.h"
+#include "bpf_fprog.h"
+
+#include <linux/filter.h>
+#include "xlat/bpf_class.h"
+#include "xlat/bpf_miscop.h"
+#include "xlat/bpf_mode.h"
+#include "xlat/bpf_op_alu.h"
+#include "xlat/bpf_op_jmp.h"
+#include "xlat/bpf_rval.h"
+#include "xlat/bpf_size.h"
+#include "xlat/bpf_src.h"
+
+static void
+print_bpf_filter_code(const uint16_t code)
+{
+	uint16_t i = code & ~BPF_CLASS(code);
+
+	printxval(bpf_class, BPF_CLASS(code), "BPF_???");
+	switch (BPF_CLASS(code)) {
+		case BPF_LD:
+		case BPF_LDX:
+			tprints("|");
+			printxval(bpf_size, BPF_SIZE(code), "BPF_???");
+			tprints("|");
+			printxval(bpf_mode, BPF_MODE(code), "BPF_???");
+			break;
+		case BPF_ST:
+		case BPF_STX:
+			if (i) {
+				tprintf("|%#x", i);
+				tprints_comment("BPF_???");
+			}
+			break;
+		case BPF_ALU:
+			tprints("|");
+			printxval(bpf_src, BPF_SRC(code), "BPF_???");
+			tprints("|");
+			printxval(bpf_op_alu, BPF_OP(code), "BPF_???");
+			break;
+		case BPF_JMP:
+			tprints("|");
+			printxval(bpf_src, BPF_SRC(code), "BPF_???");
+			tprints("|");
+			printxval(bpf_op_jmp, BPF_OP(code), "BPF_???");
+			break;
+		case BPF_RET:
+			tprints("|");
+			printxval(bpf_rval, BPF_RVAL(code), "BPF_???");
+			i &= ~BPF_RVAL(code);
+			if (i) {
+				tprintf("|%#x", i);
+				tprints_comment("BPF_???");
+			}
+			break;
+		case BPF_MISC:
+			tprints("|");
+			printxval(bpf_miscop, BPF_MISCOP(code), "BPF_???");
+			i &= ~BPF_MISCOP(code);
+			if (i) {
+				tprintf("|%#x", i);
+				tprints_comment("BPF_???");
+			}
+			break;
+	}
+}
+
+static void
+print_bpf_filter_stmt(const struct bpf_filter_block *const filter,
+		      const print_bpf_filter_fn print_k)
+{
+	tprints("BPF_STMT(");
+	print_bpf_filter_code(filter->code);
+	tprints(", ");
+	if (!print_k || !print_k(filter))
+		tprintf("%#x", filter->k);
+	tprints(")");
+}
+
+static void
+print_bpf_filter_jump(const struct bpf_filter_block *const filter)
+{
+	tprints("BPF_JUMP(");
+	print_bpf_filter_code(filter->code);
+	tprintf(", %#x, %#x, %#x)", filter->k, filter->jt, filter->jf);
+}
+
+struct bpf_filter_block_data {
+	const print_bpf_filter_fn fn;
+	unsigned int count;
+};
+
+static bool
+print_bpf_filter_block(struct tcb *const tcp, void *const elem_buf,
+		       const size_t elem_size, void *const data)
+{
+	const struct bpf_filter_block *const filter = elem_buf;
+	struct bpf_filter_block_data *const fbd = data;
+
+	if (fbd->count++ >= BPF_MAXINSNS) {
+		tprints("...");
+		return false;
+	}
+
+	if (filter->jt || filter->jf)
+		print_bpf_filter_jump(filter);
+	else
+		print_bpf_filter_stmt(filter, fbd->fn);
+
+	return true;
+}
+
+void
+print_bpf_fprog(struct tcb *const tcp, const kernel_ulong_t addr,
+		const unsigned short len, const print_bpf_filter_fn print_k)
+{
+	if (abbrev(tcp)) {
+		printaddr(addr);
+	} else {
+		struct bpf_filter_block_data fbd = { .fn = print_k };
+		struct bpf_filter_block filter;
+
+		print_array(tcp, addr, len, &filter, sizeof(filter),
+			    umoven_or_printaddr, print_bpf_filter_block, &fbd);
+	}
+}
+
+void
+decode_bpf_fprog(struct tcb *const tcp, const kernel_ulong_t addr,
+		 const print_bpf_filter_fn print_k)
+{
+	struct bpf_fprog fprog;
+
+	if (fetch_bpf_fprog(tcp, addr, &fprog)) {
+		tprintf("{len=%hu, filter=", fprog.len);
+		print_bpf_fprog(tcp, fprog.filter, fprog.len, print_k);
+		tprints("}");
+	}
+}
diff --git a/bpf_filter.h b/bpf_filter.h
new file mode 100644
index 0000000..cf1a510
--- /dev/null
+++ b/bpf_filter.h
@@ -0,0 +1,50 @@
+/*
+ * Classic BPF filter block.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_BPF_FILTER_H
+#define STRACE_BPF_FILTER_H
+
+struct bpf_filter_block {
+	uint16_t code;
+	uint8_t jt;
+	uint8_t jf;
+	uint32_t k;
+};
+
+typedef bool (*print_bpf_filter_fn)(const struct bpf_filter_block *);
+
+extern void
+print_bpf_fprog(struct tcb *const tcp, const kernel_ulong_t addr,
+		const unsigned short len, const print_bpf_filter_fn print_k);
+
+extern void
+decode_bpf_fprog(struct tcb *const tcp, const kernel_ulong_t addr,
+		 const print_bpf_filter_fn print_k);
+
+#endif /* !STRACE_BPF_FILTER_H */
diff --git a/bpf_fprog.h b/bpf_fprog.h
new file mode 100644
index 0000000..daaa01c
--- /dev/null
+++ b/bpf_fprog.h
@@ -0,0 +1,9 @@
+#ifndef STRACE_BPF_FPROG_H
+#define STRACE_BPF_FPROG_H
+
+struct bpf_fprog {
+	unsigned short len;
+	kernel_ulong_t filter;
+};
+
+#endif /* !STRACE_BPF_FPROG_H */
diff --git a/bpf_seccomp_filter.c b/bpf_seccomp_filter.c
new file mode 100644
index 0000000..9852f49
--- /dev/null
+++ b/bpf_seccomp_filter.c
@@ -0,0 +1,71 @@
+/*
+ * Decoder of seccomp filter programs.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#include "bpf_filter.h"
+
+#include <linux/filter.h>
+#ifdef HAVE_LINUX_SECCOMP_H
+# include <linux/seccomp.h>
+#endif
+#ifndef SECCOMP_RET_ACTION
+# define SECCOMP_RET_ACTION 0x7fff0000U
+#endif
+#include "xlat/seccomp_ret_action.h"
+
+static bool
+print_seccomp_filter_k(const struct bpf_filter_block *const fp)
+{
+	if (BPF_CLASS(fp->code) == BPF_RET) {
+		unsigned int action = SECCOMP_RET_ACTION & fp->k;
+		unsigned int data = fp->k & ~action;
+
+		printxval(seccomp_ret_action, action, "SECCOMP_RET_???");
+		if (data)
+			tprintf("|%#x", data);
+
+		return true;
+	}
+
+	return false;
+}
+
+void
+print_seccomp_fprog(struct tcb *const tcp, const kernel_ulong_t addr,
+		    const unsigned short len)
+{
+	print_bpf_fprog(tcp, addr, len, print_seccomp_filter_k);
+}
+
+void
+decode_seccomp_fprog(struct tcb *const tcp, const kernel_ulong_t addr)
+{
+	decode_bpf_fprog(tcp, addr, print_seccomp_filter_k);
+}
diff --git a/bpf_sock_filter.c b/bpf_sock_filter.c
new file mode 100644
index 0000000..7f8e16a
--- /dev/null
+++ b/bpf_sock_filter.c
@@ -0,0 +1,71 @@
+/*
+ * Decoder of socket filter programs.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#include "bpf_filter.h"
+
+#include <linux/filter.h>
+#include "xlat/skf_ad.h"
+
+static bool
+print_sock_filter_k(const struct bpf_filter_block *const fp)
+{
+	if (BPF_CLASS(fp->code) == BPF_LD && BPF_MODE(fp->code) == BPF_ABS) {
+		if (fp->k >= (unsigned int) SKF_AD_OFF) {
+			tprints("SKF_AD_OFF+");
+			printxval(skf_ad, fp->k - (unsigned int) SKF_AD_OFF,
+				  "SKF_AD_???");
+			return true;
+		} else if (fp->k >= (unsigned int) SKF_NET_OFF) {
+			tprintf("%s+%u", "SKF_NET_OFF",
+				fp->k - (unsigned int) SKF_NET_OFF);
+			return true;
+		} else if (fp->k >= (unsigned int) SKF_LL_OFF) {
+			tprintf("%s+%u", "SKF_LL_OFF",
+				fp->k - (unsigned int) SKF_LL_OFF);
+			return true;
+		}
+	}
+
+	return false;
+}
+
+void
+print_sock_fprog(struct tcb *const tcp, const kernel_ulong_t addr,
+		    const unsigned short len)
+{
+	print_bpf_fprog(tcp, addr, len, print_sock_filter_k);
+}
+
+void
+decode_sock_fprog(struct tcb *const tcp, const kernel_ulong_t addr)
+{
+	decode_bpf_fprog(tcp, addr, print_sock_filter_k);
+}
diff --git a/btrfs.c b/btrfs.c
index e730c7a..543acd7 100644
--- a/btrfs.c
+++ b/btrfs.c
@@ -52,6 +52,7 @@
 
 #ifdef HAVE_LINUX_BTRFS_H
 
+#include "print_fields.h"
 #include <linux/fs.h>
 
 /*
@@ -646,10 +647,9 @@
 		if (valid)
 			tprintf("uuid=%s, ", uuid);
 		tprintf("bytes_used=%" PRI__u64
-			", total_bytes=%" PRI__u64 ", path=",
+			", total_bytes=%" PRI__u64,
 			args.bytes_used, args.total_bytes);
-		print_quoted_string((const char *)args.path, sizeof(args.path),
-				    QUOTE_0_TERMINATED);
+		PRINT_FIELD_CSTRING(", ", args, path);
 		tprints("}");
 		break;
 	}
@@ -680,14 +680,12 @@
 				   (uint64_t) args.start.cont_reading_from_srcdev_mode);
 
 				str = (const char *) args.start.srcdev_name;
-				print_quoted_string(str,
-						sizeof(args.start.srcdev_name),
-						QUOTE_0_TERMINATED);
+				print_quoted_cstring(str,
+						sizeof(args.start.srcdev_name));
 				tprints(", tgtdev_name=");
 				str = (const char *) args.start.tgtdev_name;
-				print_quoted_string(str,
-						sizeof(args.start.tgtdev_name),
-						QUOTE_0_TERMINATED);
+				print_quoted_cstring(str,
+						sizeof(args.start.tgtdev_name));
 				tprints("}");
 
 			}
@@ -901,9 +899,7 @@
 			tprints(", ");
 		}
 
-		tprints("name=");
-		print_quoted_string(args.name, sizeof(args.name),
-				    QUOTE_0_TERMINATED);
+		PRINT_FIELD_CSTRING("", args, name);
 		tprints("}");
 		break;
 	}
@@ -1279,9 +1275,7 @@
 
 		tprints("{fd=");
 		printfd(tcp, args.fd);
-		tprints(", name=");
-		print_quoted_string(args.name, sizeof(args.name),
-				    QUOTE_0_TERMINATED);
+		PRINT_FIELD_CSTRING(", ", args, name);
 		tprints("}");
 		break;
 	}
@@ -1313,9 +1307,7 @@
 				btrfs_print_qgroup_inherit(tcp,
 					ptr_to_kulong(args.qgroup_inherit));
 			}
-			tprints(", name=");
-			print_quoted_string(args.name, sizeof(args.name),
-					    QUOTE_0_TERMINATED);
+			PRINT_FIELD_CSTRING(", ", args, name);
 			tprints("}");
 			return 0;
 		}
@@ -1333,7 +1325,7 @@
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &label))
 			break;
-		print_quoted_string(label, sizeof(label), QUOTE_0_TERMINATED);
+		print_quoted_cstring(label, sizeof(label));
 		break;
 	}
 
@@ -1353,6 +1345,6 @@
 	default:
 		return RVAL_DECODED;
 	};
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 #endif /* HAVE_LINUX_BTRFS_H */
diff --git a/config.h b/config.h
index 73ae7f6..a8876e3 100644
--- a/config.h
+++ b/config.h
@@ -17,7 +17,7 @@
 /* #undef ARM */
 
 /* SA_RESTORER defined in <asm/signal.h> */
-/* #undef ASM_SA_RESTORER */
+#define ASM_SA_RESTORER 0x04000000
 
 /* SIGRTMIN defined in <asm/signal.h> */
 /* #undef ASM_SIGRTMIN */
@@ -52,6 +52,9 @@
 /* Define to 1 if you have the <asm/sysmips.h> header file. */
 /* #undef HAVE_ASM_SYSMIPS_H */
 
+/* Define to 1 if you have the `be64toh' function. */
+/* #undef HAVE_BE64TOH */
+
 /* Define to 1 if you have BLKGETSIZE64. */
 #define HAVE_BLKGETSIZE64 1
 
@@ -396,11 +399,11 @@
 
 /* Define to 1 if you have the declaration of `V4L2_BUF_TYPE_SDR_CAPTURE', and
    to 0 if you don't. */
-#define HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE 0
+#define HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE 1
 
 /* Define to 1 if you have the declaration of `V4L2_BUF_TYPE_SDR_OUTPUT', and
    to 0 if you don't. */
-#define HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT 0
+#define HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT 1
 
 /* Define to 1 if you have the declaration of
    `V4L2_BUF_TYPE_SLICED_VBI_CAPTURE', and to 0 if you don't. */
@@ -703,6 +706,9 @@
 /* Define to 1 if you have the <linux/btrfs.h> header file. */
 #define HAVE_LINUX_BTRFS_H 1
 
+/* Define to 1 if you have the <linux/cryptouser.h> header file. */
+#define HAVE_LINUX_CRYPTOUSER_H 1
+
 /* Define to 1 if you have the <linux/dm-ioctl.h> header file. */
 #define HAVE_LINUX_DM_IOCTL_H 1
 
@@ -712,18 +718,24 @@
 /* Define to 1 if you have the <linux/falloc.h> header file. */
 #define HAVE_LINUX_FALLOC_H 1
 
+/* Define to 1 if you have the <linux/fib_rules.h> header file. */
+#define HAVE_LINUX_FIB_RULES_H 1
+
 /* Define to 1 if you have the <linux/fiemap.h> header file. */
 #define HAVE_LINUX_FIEMAP_H 1
 
-/* Define to 1 if you have the <linux/filter.h> header file. */
-#define HAVE_LINUX_FILTER_H 1
-
 /* Define to 1 if you have the <linux/genetlink.h> header file. */
 #define HAVE_LINUX_GENETLINK_H 1
 
 /* Define to 1 if you have the <linux/hiddev.h> header file. */
 #define HAVE_LINUX_HIDDEV_H 1
 
+/* Define to 1 if you have the <linux/if_addr.h> header file. */
+#define HAVE_LINUX_IF_ADDR_H 1
+
+/* Define to 1 if you have the <linux/if_link.h> header file. */
+#define HAVE_LINUX_IF_LINK_H 1
+
 /* Define to 1 if you have the <linux/input.h> header file. */
 #define HAVE_LINUX_INPUT_H 1
 
@@ -742,6 +754,9 @@
 /* Define to 1 if you have the <linux/msg.h> header file. */
 #define HAVE_LINUX_MSG_H 1
 
+/* Define to 1 if you have the <linux/neighbour.h> header file. */
+#define HAVE_LINUX_NEIGHBOUR_H 1
+
 /* Define to 1 if you have the <linux/netfilter_arp/arp_tables.h> header file.
    */
 #define HAVE_LINUX_NETFILTER_ARP_ARP_TABLES_H 1
@@ -907,6 +922,9 @@
 /* Define to 1 if the system has the type `struct blk_user_trace_setup'. */
 #define HAVE_STRUCT_BLK_USER_TRACE_SETUP 1
 
+/* Define to 1 if the system has the type `struct br_port_msg'. */
+#define HAVE_STRUCT_BR_PORT_MSG 1
+
 /* Define to 1 if `start' is a member of `struct
    btrfs_ioctl_defrag_range_args'. */
 #define HAVE_STRUCT_BTRFS_IOCTL_DEFRAG_RANGE_ARGS_START 1
@@ -923,6 +941,27 @@
    btrfs_ioctl_search_args_v2'. */
 #define HAVE_STRUCT_BTRFS_IOCTL_SEARCH_ARGS_V2_BUF_SIZE 1
 
+/* Define to 1 if the system has the type `struct crypto_report_aead'. */
+#define HAVE_STRUCT_CRYPTO_REPORT_AEAD 1
+
+/* Define to 1 if the system has the type `struct crypto_report_blkcipher'. */
+#define HAVE_STRUCT_CRYPTO_REPORT_BLKCIPHER 1
+
+/* Define to 1 if the system has the type `struct crypto_report_cipher'. */
+#define HAVE_STRUCT_CRYPTO_REPORT_CIPHER 1
+
+/* Define to 1 if the system has the type `struct crypto_report_hash'. */
+#define HAVE_STRUCT_CRYPTO_REPORT_HASH 1
+
+/* Define to 1 if the system has the type `struct crypto_report_rng'. */
+#define HAVE_STRUCT_CRYPTO_REPORT_RNG 1
+
+/* Define to 1 if the system has the type `struct dcbmsg'. */
+#define HAVE_STRUCT_DCBMSG 1
+
+/* Define to 1 if the system has the type `struct fib_rule_uid_range'. */
+#define HAVE_STRUCT_FIB_RULE_UID_RANGE 1
+
 /* Define to 1 if the system has the type `struct flock'. */
 #define HAVE_STRUCT_FLOCK 1
 
@@ -932,12 +971,36 @@
 /* Define to 1 if the system has the type `struct ia64_fpreg'. */
 /* #undef HAVE_STRUCT_IA64_FPREG */
 
+/* Define to 1 if the system has the type `struct ifaddrlblmsg'. */
+#define HAVE_STRUCT_IFADDRLBLMSG 1
+
+/* Define to 1 if the system has the type `struct ifla_bridge_id'. */
+#define HAVE_STRUCT_IFLA_BRIDGE_ID 1
+
+/* Define to 1 if the system has the type `struct ifla_port_vsi'. */
+#define HAVE_STRUCT_IFLA_PORT_VSI 1
+
 /* Define to 1 if `resolution' is a member of `struct input_absinfo'. */
 #define HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION 1
 
+/* Define to 1 if the system has the type `struct keyctl_kdf_params'. */
+#define HAVE_STRUCT_KEYCTL_KDF_PARAMS 1
+
 /* Define to 1 if the system has the type `struct mmsghdr'. */
 #define HAVE_STRUCT_MMSGHDR 1
 
+/* Define to 1 if the system has the type `struct ndt_config'. */
+#define HAVE_STRUCT_NDT_CONFIG 1
+
+/* Define to 1 if the system has the type `struct ndt_stats'. */
+#define HAVE_STRUCT_NDT_STATS 1
+
+/* Define to 1 if `ndts_table_fulls' is a member of `struct ndt_stats'. */
+#define HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS 1
+
+/* Define to 1 if the system has the type `struct netconfmsg'. */
+#define HAVE_STRUCT_NETCONFMSG 1
+
 /* Define to 1 if `aux_watermark' is a member of `struct perf_event_attr'. */
 #define HAVE_STRUCT_PERF_EVENT_ATTR_AUX_WATERMARK 1
 
@@ -1014,6 +1077,21 @@
 /* Define to 1 if the system has the type `struct pt_all_user_regs'. */
 /* #undef HAVE_STRUCT_PT_ALL_USER_REGS */
 
+/* Define to 1 if the system has the type `struct rta_mfc_stats'. */
+#define HAVE_STRUCT_RTA_MFC_STATS 1
+
+/* Define to 1 if the system has the type `struct rtnl_link_stats64'. */
+#define HAVE_STRUCT_RTNL_LINK_STATS64 1
+
+/* Define to 1 if `rx_nohandler' is a member of `struct rtnl_link_stats64'. */
+#define HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER 1
+
+/* Define to 1 if `rx_nohandler' is a member of `struct rtnl_link_stats'. */
+#define HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER 1
+
+/* Define to 1 if the system has the type `struct rtvia'. */
+#define HAVE_STRUCT_RTVIA 1
+
 /* Define to 1 if the system has the type `struct sigcontext'. */
 #define HAVE_STRUCT_SIGCONTEXT 1
 
@@ -1125,14 +1203,20 @@
 /* Define to 1 if typeof works with your compiler. */
 #define HAVE_TYPEOF 1
 
-/* Define to 1 if union bpf_attr.attach_flags initialization works */
+/* Define to 1 if attr_text initialization works */
 #define HAVE_UNION_BPF_ATTR_ATTACH_FLAGS 1
 
-/* Define to 1 if union bpf_attr.bpf_fd initialization works */
+/* Define to 1 if attr_text initialization works */
 #define HAVE_UNION_BPF_ATTR_BPF_FD 1
 
-/* Define to 1 if union bpf_attr.log_buf initialization works */
-#define HAVE_UNION_BPF_ATTR_LOG_BUF 1
+/* Define to 1 if attr_text initialization works */
+#define HAVE_UNION_BPF_ATTR_FLAGS 1
+
+/* Define to 1 if attr_text initialization works */
+#define HAVE_UNION_BPF_ATTR_INNER_MAP_FD 1
+
+/* Define to 1 if attr_text initialization works */
+#define HAVE_UNION_BPF_ATTR_PROG_FLAGS 1
 
 /* Define to 1 if you have the <unistd.h> header file. */
 #define HAVE_UNISTD_H 1
@@ -1173,6 +1257,9 @@
 /* Define for the m68k architecture. */
 /* #undef M68K */
 
+/* Date */
+#define MANPAGE_DATE "2017-08-28"
+
 /* Define for the Meta architecture. */
 /* #undef METAG */
 
@@ -1198,7 +1285,7 @@
 #define PACKAGE_NAME "strace"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "strace 4.18"
+#define PACKAGE_STRING "strace 4.19"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "strace"
@@ -1207,7 +1294,7 @@
 #define PACKAGE_URL "https://strace.io"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "4.18"
+#define PACKAGE_VERSION "4.19"
 
 /* Define for the PowerPC architecture. */
 /* #undef POWERPC */
@@ -1231,16 +1318,12 @@
 /* #undef SH64 */
 
 /* The size of `kernel_long_t', as computed by sizeof. */
-/* #undef SIZEOF_KERNEL_LONG_T */
 
 /* The size of `long', as computed by sizeof. */
-/* #undef SIZEOF_LONG */
 
 /* The size of `long long', as computed by sizeof. */
-/* #undef SIZEOF_LONG_LONG */
 
 /* The size of `off_t', as computed by sizeof. */
-/* #undef SIZEOF_OFF_T */
 
 /* The size of `struct i64_i32', as computed by sizeof. */
 #define SIZEOF_STRUCT_I64_I32 16
@@ -1283,7 +1366,7 @@
 
 
 /* Version number of package */
-#define VERSION "4.18"
+#define VERSION "4.19"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
diff --git a/config.h.in b/config.h.in
index f639455..c0185a2 100644
--- a/config.h.in
+++ b/config.h.in
@@ -51,6 +51,9 @@
 /* Define to 1 if you have the <asm/sysmips.h> header file. */
 #undef HAVE_ASM_SYSMIPS_H
 
+/* Define to 1 if you have the `be64toh' function. */
+#undef HAVE_BE64TOH
+
 /* Define to 1 if you have BLKGETSIZE64. */
 #undef HAVE_BLKGETSIZE64
 
@@ -702,6 +705,9 @@
 /* Define to 1 if you have the <linux/btrfs.h> header file. */
 #undef HAVE_LINUX_BTRFS_H
 
+/* Define to 1 if you have the <linux/cryptouser.h> header file. */
+#undef HAVE_LINUX_CRYPTOUSER_H
+
 /* Define to 1 if you have the <linux/dm-ioctl.h> header file. */
 #undef HAVE_LINUX_DM_IOCTL_H
 
@@ -711,18 +717,24 @@
 /* Define to 1 if you have the <linux/falloc.h> header file. */
 #undef HAVE_LINUX_FALLOC_H
 
+/* Define to 1 if you have the <linux/fib_rules.h> header file. */
+#undef HAVE_LINUX_FIB_RULES_H
+
 /* Define to 1 if you have the <linux/fiemap.h> header file. */
 #undef HAVE_LINUX_FIEMAP_H
 
-/* Define to 1 if you have the <linux/filter.h> header file. */
-#undef HAVE_LINUX_FILTER_H
-
 /* Define to 1 if you have the <linux/genetlink.h> header file. */
 #undef HAVE_LINUX_GENETLINK_H
 
 /* Define to 1 if you have the <linux/hiddev.h> header file. */
 #undef HAVE_LINUX_HIDDEV_H
 
+/* Define to 1 if you have the <linux/if_addr.h> header file. */
+#undef HAVE_LINUX_IF_ADDR_H
+
+/* Define to 1 if you have the <linux/if_link.h> header file. */
+#undef HAVE_LINUX_IF_LINK_H
+
 /* Define to 1 if you have the <linux/input.h> header file. */
 #undef HAVE_LINUX_INPUT_H
 
@@ -741,6 +753,9 @@
 /* Define to 1 if you have the <linux/msg.h> header file. */
 #undef HAVE_LINUX_MSG_H
 
+/* Define to 1 if you have the <linux/neighbour.h> header file. */
+#undef HAVE_LINUX_NEIGHBOUR_H
+
 /* Define to 1 if you have the <linux/netfilter_arp/arp_tables.h> header file.
    */
 #undef HAVE_LINUX_NETFILTER_ARP_ARP_TABLES_H
@@ -906,6 +921,9 @@
 /* Define to 1 if the system has the type `struct blk_user_trace_setup'. */
 #undef HAVE_STRUCT_BLK_USER_TRACE_SETUP
 
+/* Define to 1 if the system has the type `struct br_port_msg'. */
+#undef HAVE_STRUCT_BR_PORT_MSG
+
 /* Define to 1 if `start' is a member of `struct
    btrfs_ioctl_defrag_range_args'. */
 #undef HAVE_STRUCT_BTRFS_IOCTL_DEFRAG_RANGE_ARGS_START
@@ -922,6 +940,27 @@
    btrfs_ioctl_search_args_v2'. */
 #undef HAVE_STRUCT_BTRFS_IOCTL_SEARCH_ARGS_V2_BUF_SIZE
 
+/* Define to 1 if the system has the type `struct crypto_report_aead'. */
+#undef HAVE_STRUCT_CRYPTO_REPORT_AEAD
+
+/* Define to 1 if the system has the type `struct crypto_report_blkcipher'. */
+#undef HAVE_STRUCT_CRYPTO_REPORT_BLKCIPHER
+
+/* Define to 1 if the system has the type `struct crypto_report_cipher'. */
+#undef HAVE_STRUCT_CRYPTO_REPORT_CIPHER
+
+/* Define to 1 if the system has the type `struct crypto_report_hash'. */
+#undef HAVE_STRUCT_CRYPTO_REPORT_HASH
+
+/* Define to 1 if the system has the type `struct crypto_report_rng'. */
+#undef HAVE_STRUCT_CRYPTO_REPORT_RNG
+
+/* Define to 1 if the system has the type `struct dcbmsg'. */
+#undef HAVE_STRUCT_DCBMSG
+
+/* Define to 1 if the system has the type `struct fib_rule_uid_range'. */
+#undef HAVE_STRUCT_FIB_RULE_UID_RANGE
+
 /* Define to 1 if the system has the type `struct flock'. */
 #undef HAVE_STRUCT_FLOCK
 
@@ -931,12 +970,36 @@
 /* Define to 1 if the system has the type `struct ia64_fpreg'. */
 #undef HAVE_STRUCT_IA64_FPREG
 
+/* Define to 1 if the system has the type `struct ifaddrlblmsg'. */
+#undef HAVE_STRUCT_IFADDRLBLMSG
+
+/* Define to 1 if the system has the type `struct ifla_bridge_id'. */
+#undef HAVE_STRUCT_IFLA_BRIDGE_ID
+
+/* Define to 1 if the system has the type `struct ifla_port_vsi'. */
+#undef HAVE_STRUCT_IFLA_PORT_VSI
+
 /* Define to 1 if `resolution' is a member of `struct input_absinfo'. */
 #undef HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION
 
+/* Define to 1 if the system has the type `struct keyctl_kdf_params'. */
+#undef HAVE_STRUCT_KEYCTL_KDF_PARAMS
+
 /* Define to 1 if the system has the type `struct mmsghdr'. */
 #undef HAVE_STRUCT_MMSGHDR
 
+/* Define to 1 if the system has the type `struct ndt_config'. */
+#undef HAVE_STRUCT_NDT_CONFIG
+
+/* Define to 1 if the system has the type `struct ndt_stats'. */
+#undef HAVE_STRUCT_NDT_STATS
+
+/* Define to 1 if `ndts_table_fulls' is a member of `struct ndt_stats'. */
+#undef HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS
+
+/* Define to 1 if the system has the type `struct netconfmsg'. */
+#undef HAVE_STRUCT_NETCONFMSG
+
 /* Define to 1 if `aux_watermark' is a member of `struct perf_event_attr'. */
 #undef HAVE_STRUCT_PERF_EVENT_ATTR_AUX_WATERMARK
 
@@ -1013,6 +1076,21 @@
 /* Define to 1 if the system has the type `struct pt_all_user_regs'. */
 #undef HAVE_STRUCT_PT_ALL_USER_REGS
 
+/* Define to 1 if the system has the type `struct rta_mfc_stats'. */
+#undef HAVE_STRUCT_RTA_MFC_STATS
+
+/* Define to 1 if the system has the type `struct rtnl_link_stats64'. */
+#undef HAVE_STRUCT_RTNL_LINK_STATS64
+
+/* Define to 1 if `rx_nohandler' is a member of `struct rtnl_link_stats64'. */
+#undef HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER
+
+/* Define to 1 if `rx_nohandler' is a member of `struct rtnl_link_stats'. */
+#undef HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER
+
+/* Define to 1 if the system has the type `struct rtvia'. */
+#undef HAVE_STRUCT_RTVIA
+
 /* Define to 1 if the system has the type `struct sigcontext'. */
 #undef HAVE_STRUCT_SIGCONTEXT
 
@@ -1124,14 +1202,20 @@
 /* Define to 1 if typeof works with your compiler. */
 #undef HAVE_TYPEOF
 
-/* Define to 1 if union bpf_attr.attach_flags initialization works */
+/* Define to 1 if attr_text initialization works */
 #undef HAVE_UNION_BPF_ATTR_ATTACH_FLAGS
 
-/* Define to 1 if union bpf_attr.bpf_fd initialization works */
+/* Define to 1 if attr_text initialization works */
 #undef HAVE_UNION_BPF_ATTR_BPF_FD
 
-/* Define to 1 if union bpf_attr.log_buf initialization works */
-#undef HAVE_UNION_BPF_ATTR_LOG_BUF
+/* Define to 1 if attr_text initialization works */
+#undef HAVE_UNION_BPF_ATTR_FLAGS
+
+/* Define to 1 if attr_text initialization works */
+#undef HAVE_UNION_BPF_ATTR_INNER_MAP_FD
+
+/* Define to 1 if attr_text initialization works */
+#undef HAVE_UNION_BPF_ATTR_PROG_FLAGS
 
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
@@ -1172,6 +1256,9 @@
 /* Define for the m68k architecture. */
 #undef M68K
 
+/* Date */
+#undef MANPAGE_DATE
+
 /* Define for the Meta architecture. */
 #undef METAG
 
diff --git a/config.status b/config.status
deleted file mode 100755
index da6c496..0000000
--- a/config.status
+++ /dev/null
@@ -1,1746 +0,0 @@
-#! /bin/sh
-# Generated by configure.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by strace $as_me 4.17, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-# Files that config.status was made for.
-config_files=" Makefile tests/Makefile tests-m32/Makefile tests-mx32/Makefile strace.spec debian/changelog"
-config_headers=" config.h"
-config_commands=" depfiles"
-
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <strace-devel@lists.sourceforge.net>.
-strace home page: <https://strace.io>."
-
-ac_cs_config=""
-ac_cs_version="\
-strace config.status 4.17
-configured by ./configure, generated by GNU Autoconf 2.69,
-  with options \"$ac_cs_config\"
-
-Copyright (C)  Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='/tmp/strace-4.17'
-srcdir='.'
-INSTALL='/usr/bin/install -c'
-MKDIR_P='/bin/mkdir -p'
-AWK='gawk'
-test -n "$AWK" || AWK=awk
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-if $ac_cs_recheck; then
-  set X /bin/sh './configure'  $ac_configure_extra_args --no-create --no-recursion
-  shift
-  $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6
-  CONFIG_SHELL='/bin/sh'
-  export CONFIG_SHELL
-  exec "$@"
-fi
-
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-#
-# INIT-COMMANDS
-#
-AMDEP_TRUE="" ac_aux_dir="."
-
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
-    "tests-m32/Makefile") CONFIG_FILES="$CONFIG_FILES tests-m32/Makefile" ;;
-    "tests-mx32/Makefile") CONFIG_FILES="$CONFIG_FILES tests-mx32/Makefile" ;;
-    "strace.spec") CONFIG_FILES="$CONFIG_FILES strace.spec" ;;
-    "debian/changelog") CONFIG_FILES="$CONFIG_FILES debian/changelog" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX")` &&
-  test -n "$tmp" && test -d "$tmp"
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-cat >>"$ac_tmp/subs1.awk" <<\_ACAWK &&
-S["am__EXEEXT_FALSE"]=""
-S["am__EXEEXT_TRUE"]="#"
-S["LTLIBOBJS"]=""
-S["LIBOBJS"]=""
-S["VALGRIND_CHECK_RULES"]="\n"\
-"# Valgrind check\n"\
-"#\n"\
-"# Optional:\n"\
-"#  - VALGRIND_SUPPRESSIONS_FILES: Space-separated list of Valgrind suppressions\n"\
-"#    files to load. (Default: empty)\n"\
-"#  - VALGRIND_FLAGS: General flags to pass to all Valgrind tools.\n"\
-"#    (Default: --num-callers=30)\n"\
-"#  - VALGRIND_$toolname_FLAGS: Flags to pass to Valgrind $toolname (one of:\n"\
-"#    memcheck, helgrind, drd, sgcheck). (Default: various)\n"\
-"\n"\
-"# Optional variables\n"\
-"VALGRIND_SUPPRESSIONS ?= $(addprefix --suppressions=,$(VALGRIND_SUPPRESSIONS_FILES))\n"\
-"VALGRIND_FLAGS ?= --num-callers=30\n"\
-"VALGRIND_memcheck_FLAGS ?= --leak-check=full --show-reachable=no\n"\
-"VALGRIND_helgrind_FLAGS ?= --history-level=approx\n"\
-"VALGRIND_drd_FLAGS ?=\n"\
-"VALGRIND_sgcheck_FLAGS ?=\n"\
-"\n"\
-"# Internal use\n"\
-"valgrind_log_files = $(addprefix test-suite-,$(addsuffix .log,$(valgrind_tools)))\n"\
-"\n"\
-"valgrind_memcheck_flags = --tool=memcheck $(VALGRIND_memcheck_FLAGS)\n"\
-"valgrind_helgrind_flags = --tool=helgrind $(VALGRIND_helgrind_FLAGS)\n"\
-"valgrind_drd_flags = --tool=drd $(VALGRIND_drd_FLAGS)\n"\
-"valgrind_sgcheck_flags = --tool=exp-sgcheck $(VALGRIND_sgcheck_FLAGS)\n"\
-"\n"\
-"valgrind_quiet = $(valgrind_quiet_$(V))\n"\
-"valgrind_quiet_ = $(valgrind_quiet_$(AM_DEFAULT_VERBOSITY))\n"\
-"valgrind_quiet_0 = --quiet\n"\
-"valgrind_v_use   = $(valgrind_v_use_$(V))\n"\
-"valgrind_v_use_  = $(valgrind_v_use_$(AM_DEFAULT_VERBOSITY))\n"\
-"valgrind_v_use_0 = @echo \"  USE   \" $(patsubst check-valgrind-%,%,$@):;\n"\
-"\n"\
-"# Support running with and without libtool.\n"\
-"ifneq ($(LIBTOOL),)\n"\
-"valgrind_lt = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=execute\n"\
-"else\n"\
-"valgrind_lt =\n"\
-"endif\n"\
-"\n"\
-"# Use recursive makes in order to ignore errors during check\n"\
-"check-valgrind:\n"\
-"ifeq ($(VALGRIND_ENABLED),yes)\n"\
-"	-$(AM_V_at)$(foreach tool,$(valgrind_enabled_tools), \\\n"\
-"		$(MAKE) $(AM_MAKEFLAGS) -k check-valgrind-$(tool); \\\n"\
-"	)\n"\
-"else\n"\
-"	@echo \"Need to reconfigure with --enable-valgrind\"\n"\
-"endif\n"\
-"\n"\
-"# Valgrind running\n"\
-"VALGRIND_TESTS_ENVIRONMENT = \\\n"\
-"	$(TESTS_ENVIRONMENT) \\\n"\
-"	env VALGRIND=$(VALGRIND) \\\n"\
-"	G_SLICE=always-malloc,debug-blocks \\\n"\
-"	G_DEBUG=fatal-warnings,fatal-criticals,gc-friendly\n"\
-"\n"\
-"VALGRIND_LOG_COMPILER = \\\n"\
-"	$(valgrind_lt) \\\n"\
-"	$(VALGRIND) $(VALGRIND_SUPPRESSIONS) --error-exitcode=1 $(VALGRIND_FLAGS)\n"\
-"\n"\
-"define valgrind_tool_rule =\n"\
-"check-valgrind-$(1): $$(BUILT_SOURCES)\n"\
-"ifeq ($$(VALGRIND_ENABLED)-$$(ENABLE_VALGRIND_$(1)),yes-yes)\n"\
-"	$$(valgrind_v_use)$$(MAKE) $$(AM_MAKEFLAGS) check-am \\\n"\
-"		TESTS_ENVIRONMENT=\"$$(VALGRIND_TESTS_ENVIRONMENT)\" \\\n"\
-"		LOG_COMPILER=\"$$(VALGRIND_LOG_COMPILER)\" \\\n"\
-"		LOG_FLAGS=\"$$(valgrind_$(1)_flags)\" \\\n"\
-"		TEST_SUITE_LOG=test-suite-$(1).log\n"\
-"else ifeq ($$(VALGRIND_ENABLED),yes)\n"\
-"	@echo \"Need to reconfigure with --enable-valgrind-$(1)\"\n"\
-"else\n"\
-"	@echo \"Need to reconfigure with --enable-valgrind\"\n"\
-"endif\n"\
-"endef\n"\
-"\n"\
-"$(foreach tool,$(valgrind_tools),$(eval $(call valgrind_tool_rule,$(tool))))\n"\
-"\n"\
-"AM_DISTCHECK_CONFIGURE_FLAGS ?=\n"\
-"AM_DISTCHECK_CONFIGURE_FLAGS += --disable-valgrind\n"\
-"\n"\
-"MOSTLYCLEANFILES ?=\n"\
-"MOSTLYCLEANFILES += $(valgrind_log_files)\n"\
-"\n"\
-".PHONY: check-valgrind $(add-prefix check-valgrind-,$(valgrind_tools))\n"\
-""
-S["valgrind_enabled_tools"]=" memcheck"
-S["valgrind_tools"]="memcheck helgrind drd sgcheck"
-S["ENABLE_VALGRIND_sgcheck"]=""
-S["ENABLE_VALGRIND_drd"]="no"
-S["ENABLE_VALGRIND_helgrind"]="no"
-S["ENABLE_VALGRIND_memcheck"]="yes"
-S["VALGRIND_ENABLED"]="yes"
-S["VALGRIND_ENABLED_FALSE"]="#"
-S["VALGRIND_ENABLED_TRUE"]=""
-S["VALGRIND"]="valgrind"
-S["HAVE_MX32_MPERS_FALSE"]="#"
-S["HAVE_MX32_MPERS_TRUE"]=""
-S["HAVE_MX32_RUNTIME_FALSE"]="#"
-S["HAVE_MX32_RUNTIME_TRUE"]=""
-S["HAVE_M32_MPERS_FALSE"]="#"
-S["HAVE_M32_MPERS_TRUE"]=""
-S["HAVE_M32_RUNTIME_FALSE"]="#"
-S["HAVE_M32_RUNTIME_TRUE"]=""
-S["USE_LIBUNWIND_FALSE"]=""
-S["USE_LIBUNWIND_TRUE"]="#"
-S["libunwind_CPPFLAGS"]=""
-S["libunwind_LDFLAGS"]=""
-S["libunwind_LIBS"]=""
-S["PERL"]="/usr/bin/perl"
-S["dl_LIBS"]="-ldl"
-S["MIPS_ABI"]=""
-S["arch_mx32"]="x32"
-S["arch_m32"]="i386"
-S["arch"]="x86_64"
-S["COPYRIGHT_YEAR"]="2017"
-S["CODE_COVERAGE_RULES"]="\n"\
-"# Code coverage\n"\
-"#\n"\
-"# Optional:\n"\
-"#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.\n"\
-"#    Multiple directories may be specified, separated by whitespace.\n"\
-"#    (Default: $(top_builddir))\n"\
-"#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated\n"\
-"#    by lcov for code coverage. (Default:\n"\
-"#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)\n"\
-"#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage\n"\
-"#    reports to be created. (Default:\n"\
-"#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)\n"\
-"#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,\n"\
-"#    set to 0 to disable it and leave empty to stay with the default.\n"\
-"#    (Default: empty)\n"\
-"#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov\n"\
-"#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)\n"\
-"#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov\n"\
-"#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)\n"\
-"#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov\n"\
-"#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the\n"\
-"#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)\n"\
-"#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov\n"\
-"#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)\n"\
-"#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering\n"\
-"#    lcov instance. (Default: empty)\n"\
-"#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov\n"\
-"#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)\n"\
-"#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the\n"\
-"#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)\n"\
-"#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml\n"\
-"#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)\n"\
-"#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore\n"\
-"#\n"\
-"# The generated report will be titled using the $(PACKAGE_NAME) and\n"\
-"# $(PACKAGE_VERSION). In order to add the current git hash to the title,\n"\
-"# use the git-version-gen script, available online.\n"\
-"\n"\
-"# Optional variables\n"\
-"CODE_COVERAGE_DIRECTORY ?= $(top_builddir)\n"\
-"CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info\n"\
-"CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage\n"\
-"CODE_COVERAGE_BRANCH_COVERAGE ?=\n"\
-"CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\\\n"\
-"--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))\n"\
-"CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)\n"\
-"CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool \"$(GCOV)\"\n"\
-"CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)\n"\
-"CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)\n"\
-"CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=\n"\
-"CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)\n"\
-"CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\\\n"\
-"$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\\\n"\
-"--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))\n"\
-"CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULTS)\n"\
-"CODE_COVERAGE_IGNORE_PATTERN ?=\n"\
-"\n"\
-"code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))\n"\
-"code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))\n"\
-"code_coverage_v_lcov_cap_0 = @echo \"  LCOV   --capture\"\\\n"\
-" $(CODE_COVERAGE_OUTPUT_FILE);\n"\
-"code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))\n"\
-"code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))\n"\
-"code_coverage_v_lcov_ign_0 = @echo \"  LCOV   --remove /tmp/*\"\\\n"\
-" $(CODE_COVERAGE_IGNORE_PATTERN);\n"\
-"code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))\n"\
-"code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))\n"\
-"code_coverage_v_genhtml_0 = @echo \"  GEN   \" $(CODE_COVERAGE_OUTPUT_DIRECTORY);\n"\
-"code_coverage_quiet = $(code_coverage_quiet_$(V))\n"\
-"code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))\n"\
-"code_coverage_quiet_0 = --quiet\n"\
-"\n"\
-"# sanitizes the test-name: replaces with underscores: dashes and dots\n"\
-"code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))\n"\
-"\n"\
-"# Use recursive makes in order to ignore errors during check\n"\
-"check-code-coverage:\n"\
-"ifeq ($(CODE_COVERAGE_ENABLED),yes)\n"\
-"	-$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check\n"\
-"	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture\n"\
-"else\n"\
-"	@echo \"Need to reconfigure with --enable-code-coverage\"\n"\
-"endif\n"\
-"\n"\
-"# Capture code coverage data\n"\
-"code-coverage-capture: code-coverage-capture-hook\n"\
-"ifeq ($(CODE_COVERAGE_ENABLED),yes)\n"\
-"	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file \"$(CODE_COVE"\
-"RAGE_OUTPUT_FILE).tmp\" --test-name \"$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))\" --no-checksum --compat-libtool $(CODE_COVERAG"\
-"E_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)\n"\
-"	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove \"$(CODE_COVERAGE_OUTPUT_FIL"\
-"E).tmp\" \"/tmp/*\" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file \"$(CODE_COVERAGE_OUTPUT_FILE)\" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOP"\
-"TS)\n"\
-"	-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp\n"\
-"	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory \"$(CODE_COV"\
-"ERAGE_OUTPUT_DIRECTORY)\" --title \"$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage\" --legend --show-details \"$(CODE_COVERAGE_OUTPUT_FILE)\" $(CODE_CO"\
-"VERAGE_GENHTML_OPTIONS)\n"\
-"	@echo \"file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html\"\n"\
-"else\n"\
-"	@echo \"Need to reconfigure with --enable-code-coverage\"\n"\
-"endif\n"\
-"\n"\
-"# Hook rule executed before code-coverage-capture, overridable by the user\n"\
-"code-coverage-capture-hook:\n"\
-"\n"\
-"ifeq ($(CODE_COVERAGE_ENABLED),yes)\n"\
-"clean: code-coverage-clean\n"\
-"distclean: code-coverage-clean\n"\
-"code-coverage-clean:\n"\
-"	-$(LCOV) --directory $(top_builddir) -z\n"\
-"	-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)\n"\
-"	-find . \\( -name \"*.gcda\" -o -name \"*.gcno\" -o -name \"*.gcov\" \\) -delete\n"\
-"endif\n"\
-"\n"\
-"GITIGNOREFILES ?=\n"\
-"GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)\n"\
-"\n"\
-"AM_DISTCHECK_CONFIGURE_FLAGS ?=\n"\
-"AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage\n"\
-"\n"\
-".PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean\n"\
-""
-S["CODE_COVERAGE_LDFLAGS"]=""
-S["CODE_COVERAGE_CXXFLAGS"]=""
-S["CODE_COVERAGE_CFLAGS"]=""
-S["CODE_COVERAGE_CPPFLAGS"]=""
-S["GENHTML"]=""
-S["LCOV"]=""
-S["GCOV"]=""
-S["CODE_COVERAGE_ENABLED"]="no"
-S["CODE_COVERAGE_ENABLED_FALSE"]=""
-S["CODE_COVERAGE_ENABLED_TRUE"]="#"
-S["SED"]="/bin/sed"
-S["EGREP"]="/bin/grep -E"
-S["GREP"]="/bin/grep"
-S["RANLIB"]="ranlib"
-S["WARN_CFLAGS_FOR_BUILD"]=" -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaratio"\
-"n -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings"
-S["LDFLAGS_FOR_BUILD"]=""
-S["CPPFLAGS_FOR_BUILD"]=""
-S["CFLAGS_FOR_BUILD"]="-g -O2"
-S["BUILD_OBJEXT"]=""
-S["BUILD_EXEEXT"]=""
-S["CPP_FOR_BUILD"]="gcc -E"
-S["ac_ct_CC_FOR_BUILD"]="gcc"
-S["CC_FOR_BUILD"]="gcc"
-S["WARN_CFLAGS"]=" -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaratio"\
-"n -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings"
-S["CPP"]="gcc -E"
-S["am__fastdepCC_FALSE"]="#"
-S["am__fastdepCC_TRUE"]=""
-S["CCDEPMODE"]="depmode=gcc3"
-S["am__nodep"]="_no"
-S["AMDEPBACKSLASH"]="\\"
-S["AMDEP_FALSE"]="#"
-S["AMDEP_TRUE"]=""
-S["am__quote"]=""
-S["am__include"]="include"
-S["DEPDIR"]=".deps"
-S["OBJEXT"]="o"
-S["EXEEXT"]=""
-S["ac_ct_CC"]="gcc"
-S["CPPFLAGS"]=""
-S["LDFLAGS"]=""
-S["CFLAGS"]="-g -O2"
-S["CC"]="gcc"
-S["DEB_CHANGELOGTIME"]="Thu, 25 May 2017 15:09:49 -0700"
-S["RPM_CHANGELOGTIME"]="Thu May 25 2017"
-S["host_os"]="linux-gnu"
-S["host_vendor"]="pc"
-S["host_cpu"]="x86_64"
-S["host"]="x86_64-pc-linux-gnu"
-S["build_os"]="linux-gnu"
-S["build_vendor"]="pc"
-S["build_cpu"]="x86_64"
-S["build"]="x86_64-pc-linux-gnu"
-S["MAINT"]="#"
-S["MAINTAINER_MODE_FALSE"]=""
-S["MAINTAINER_MODE_TRUE"]="#"
-S["AM_BACKSLASH"]="\\"
-S["AM_DEFAULT_VERBOSITY"]="1"
-S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)"
-S["AM_V"]="$(V)"
-S["am__untar"]="$${TAR-tar} xf -"
-S["am__tar"]="$${TAR-tar} chof - \"$$tardir\""
-S["AMTAR"]="$${TAR-tar}"
-S["am__leading_dot"]="."
-S["SET_MAKE"]=""
-S["AWK"]="gawk"
-S["mkdir_p"]="$(MKDIR_P)"
-S["MKDIR_P"]="/bin/mkdir -p"
-S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s"
-S["STRIP"]=""
-S["install_sh"]="${SHELL} /tmp/strace-4.17/install-sh"
-S["MAKEINFO"]="${SHELL} /tmp/strace-4.17/missing makeinfo"
-S["AUTOHEADER"]="${SHELL} /tmp/strace-4.17/missing autoheader"
-S["AUTOMAKE"]="${SHELL} /tmp/strace-4.17/missing automake-1.14"
-S["AUTOCONF"]="${SHELL} /tmp/strace-4.17/missing autoconf"
-S["ACLOCAL"]="${SHELL} /tmp/strace-4.17/missing aclocal-1.14"
-S["VERSION"]="4.17"
-S["PACKAGE"]="strace"
-S["CYGPATH_W"]="echo"
-S["am__isrc"]=""
-S["INSTALL_DATA"]="${INSTALL} -m 644"
-S["INSTALL_SCRIPT"]="${INSTALL}"
-S["INSTALL_PROGRAM"]="${INSTALL}"
-S["target_alias"]=""
-S["host_alias"]=""
-S["build_alias"]=""
-S["LIBS"]=""
-S["ECHO_T"]=""
-S["ECHO_N"]="-n"
-S["ECHO_C"]=""
-S["DEFS"]="-DHAVE_CONFIG_H"
-S["mandir"]="${datarootdir}/man"
-S["localedir"]="${datarootdir}/locale"
-S["libdir"]="${exec_prefix}/lib"
-S["psdir"]="${docdir}"
-S["pdfdir"]="${docdir}"
-S["dvidir"]="${docdir}"
-S["htmldir"]="${docdir}"
-S["infodir"]="${datarootdir}/info"
-S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}"
-S["oldincludedir"]="/usr/include"
-S["includedir"]="${prefix}/include"
-S["localstatedir"]="${prefix}/var"
-S["sharedstatedir"]="${prefix}/com"
-S["sysconfdir"]="${prefix}/etc"
-S["datadir"]="${datarootdir}"
-S["datarootdir"]="${prefix}/share"
-S["libexecdir"]="${exec_prefix}/libexec"
-S["sbindir"]="${exec_prefix}/sbin"
-S["bindir"]="${exec_prefix}/bin"
-S["program_transform_name"]="s,x,x,"
-S["prefix"]="/usr/local"
-S["exec_prefix"]="${prefix}"
-S["PACKAGE_URL"]="https://strace.io"
-S["PACKAGE_BUGREPORT"]="strace-devel@lists.sourceforge.net"
-S["PACKAGE_STRING"]="strace 4.17"
-S["PACKAGE_VERSION"]="4.17"
-S["PACKAGE_TARNAME"]="strace"
-S["PACKAGE_NAME"]="strace"
-S["PATH_SEPARATOR"]=":"
-S["SHELL"]="/bin/sh"
-_ACAWK
-cat >>"$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-D["PACKAGE_NAME"]=" \"strace\""
-D["PACKAGE_TARNAME"]=" \"strace\""
-D["PACKAGE_VERSION"]=" \"4.17\""
-D["PACKAGE_STRING"]=" \"strace 4.17\""
-D["PACKAGE_BUGREPORT"]=" \"strace-devel@lists.sourceforge.net\""
-D["PACKAGE_URL"]=" \"https://strace.io\""
-D["PACKAGE"]=" \"strace\""
-D["VERSION"]=" \"4.17\""
-D["STDC_HEADERS"]=" 1"
-D["HAVE_SYS_TYPES_H"]=" 1"
-D["HAVE_SYS_STAT_H"]=" 1"
-D["HAVE_STDLIB_H"]=" 1"
-D["HAVE_STRING_H"]=" 1"
-D["HAVE_MEMORY_H"]=" 1"
-D["HAVE_STRINGS_H"]=" 1"
-D["HAVE_INTTYPES_H"]=" 1"
-D["HAVE_STDINT_H"]=" 1"
-D["HAVE_UNISTD_H"]=" 1"
-D["__EXTENSIONS__"]=" 1"
-D["_ALL_SOURCE"]=" 1"
-D["_GNU_SOURCE"]=" 1"
-D["_POSIX_PTHREAD_SEMANTICS"]=" 1"
-D["_TANDEM_SOURCE"]=" 1"
-D["COPYRIGHT_YEAR"]=" \"2017\""
-D["X86_64"]=" 1"
-D["ENABLE_ARM_OABI"]=" 0"
-D["HAVE_TYPEOF"]=" 1"
-D["HAVE_ACCEPT4"]=" 1"
-D["HAVE_FALLOCATE"]=" 1"
-D["HAVE_FANOTIFY_MARK"]=" 1"
-D["HAVE_FOPEN64"]=" 1"
-D["HAVE_FORK"]=" 1"
-D["HAVE_FPUTS_UNLOCKED"]=" 1"
-D["HAVE_FSTATAT"]=" 1"
-D["HAVE_FTRUNCATE"]=" 1"
-D["HAVE_FUTIMENS"]=" 1"
-D["HAVE_IF_INDEXTONAME"]=" 1"
-D["HAVE_OPEN64"]=" 1"
-D["HAVE_PRCTL"]=" 1"
-D["HAVE_PREADV"]=" 1"
-D["HAVE_PROCESS_VM_READV"]=" 1"
-D["HAVE_PWRITEV"]=" 1"
-D["HAVE_READAHEAD"]=" 1"
-D["HAVE_SIGNALFD"]=" 1"
-D["HAVE_STPCPY"]=" 1"
-D["HAVE_STRERROR"]=" 1"
-D["HAVE_STRSIGNAL"]=" 1"
-D["HAVE_SYNC_FILE_RANGE"]=" 1"
-D["HAVE_UTIMENSAT"]=" 1"
-D["HAVE_SIG_ATOMIC_T"]=" 1"
-D["HAVE_STRUCT_SIGCONTEXT"]=" 1"
-D["HAVE_STRUCT_MMSGHDR"]=" 1"
-D["HAVE___KERNEL_LONG_T"]=" 1"
-D["HAVE___KERNEL_ULONG_T"]=" 1"
-D["HAVE_STRUCT___OLD_KERNEL_STAT"]=" 1"
-D["HAVE_STRUCT_USER_DESC"]=" 1"
-D["HAVE_STRUCT_STAT_ST_MTIME_NSEC"]=" 1"
-D["HAVE_STRUCT_FLOCK"]=" 1"
-D["HAVE_STRUCT_FLOCK64"]=" 1"
-D["HAVE_STRUCT_TIMEX_TAI"]=" 1"
-D["HAVE_STRUCT_UTSNAME_DOMAINNAME"]=" 1"
-D["HAVE_SIGINFO_T_SI_SYSCALL"]=" 1"
-D["HAVE_SIGINFO_T_SI_TIMERID"]=" 1"
-D["HAVE_SIGINFO_T_SI_OVERRUN"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_PRECISE_IP"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_MMAP_DATA"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_SAMPLE_ID_ALL"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_EXCLUDE_HOST"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_EXCLUDE_GUEST"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_EXCLUDE_CALLCHAIN_KERNEL"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_EXCLUDE_CALLCHAIN_USER"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_MMAP2"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_BP_TYPE"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_CONFIG1"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_CONFIG2"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_BRANCH_SAMPLE_TYPE"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_SAMPLE_REGS_USER"]=" 1"
-D["HAVE_STRUCT_PERF_EVENT_ATTR_SAMPLE_STACK_USER"]=" 1"
-D["HAVE_ELF_H"]=" 1"
-D["HAVE_INTTYPES_H"]=" 1"
-D["HAVE_LINUX_BSG_H"]=" 1"
-D["HAVE_LINUX_DM_IOCTL_H"]=" 1"
-D["HAVE_LINUX_DQBLK_XFS_H"]=" 1"
-D["HAVE_LINUX_FALLOC_H"]=" 1"
-D["HAVE_LINUX_FIEMAP_H"]=" 1"
-D["HAVE_LINUX_FILTER_H"]=" 1"
-D["HAVE_LINUX_HIDDEV_H"]=" 1"
-D["HAVE_LINUX_IP_VS_H"]=" 1"
-D["HAVE_LINUX_IPC_H"]=" 1"
-D["HAVE_LINUX_MMTIMER_H"]=" 1"
-D["HAVE_LINUX_MSG_H"]=" 1"
-D["HAVE_LINUX_PERF_EVENT_H"]=" 1"
-D["HAVE_LINUX_QUOTA_H"]=" 1"
-D["HAVE_LINUX_SECCOMP_H"]=" 1"
-D["HAVE_LINUX_SECUREBITS_H"]=" 1"
-D["HAVE_LINUX_SEM_H"]=" 1"
-D["HAVE_LINUX_SHM_H"]=" 1"
-D["HAVE_LINUX_UTSNAME_H"]=" 1"
-D["HAVE_MQUEUE_H"]=" 1"
-D["HAVE_NETIPX_IPX_H"]=" 1"
-D["HAVE_SCSI_SG_H"]=" 1"
-D["HAVE_STROPTS_H"]=" 1"
-D["HAVE_SYS_EVENTFD_H"]=" 1"
-D["HAVE_SYS_FANOTIFY_H"]=" 1"
-D["HAVE_SYS_IPC_H"]=" 1"
-D["HAVE_SYS_MSG_H"]=" 1"
-D["HAVE_SYS_QUOTA_H"]=" 1"
-D["HAVE_SYS_REG_H"]=" 1"
-D["HAVE_SYS_SEM_H"]=" 1"
-D["HAVE_SYS_SHM_H"]=" 1"
-D["HAVE_SYS_SIGNALFD_H"]=" 1"
-D["HAVE_SYS_XATTR_H"]=" 1"
-D["HAVE_USTAT_H"]=" 1"
-D["HAVE_NETINET_TCP_H"]=" 1"
-D["HAVE_NETINET_UDP_H"]=" 1"
-D["HAVE_LINUX_MQUEUE_H"]=" 1"
-D["HAVE_LINUX_NETFILTER_ARP_ARP_TABLES_H"]=" 1"
-D["HAVE_LINUX_NETFILTER_IPV4_IP_TABLES_H"]=" 1"
-D["HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H"]=" 1"
-D["HAVE_LINUX_INPUT_H"]=" 1"
-D["HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION"]=" 1"
-D["HAVE_STRUCT_STATFS"]=" 1"
-D["HAVE_STRUCT_STATFS_F_FRSIZE"]=" 1"
-D["HAVE_STRUCT_STATFS_F_FLAGS"]=" 1"
-D["HAVE_STRUCT_STATFS_F_FSID_VAL"]=" 1"
-D["HAVE_STRUCT_STATFS64"]=" 1"
-D["HAVE_STRUCT_STATFS64_F_FRSIZE"]=" 1"
-D["HAVE_STRUCT_STATFS64_F_FLAGS"]=" 1"
-D["HAVE_STRUCT_STATFS64_F_FSID_VAL"]=" 1"
-D["HAVE_STRUCT_BLK_USER_TRACE_SETUP"]=" 1"
-D["HAVE_LINUX_BTRFS_H"]=" 1"
-D["HAVE_DECL_BTRFS_COMPRESS_NONE"]=" 0"
-D["HAVE_DECL_BTRFS_COMPRESS_ZLIB"]=" 0"
-D["HAVE_DECL_BTRFS_COMPRESS_LZO"]=" 0"
-D["HAVE_DECL_SYS_ERRLIST"]=" 1"
-D["HAVE_DECL_PTRACE_PEEKUSER"]=" 1"
-D["HAVE_DECL_PTRACE_POKEUSER"]=" 1"
-D["HAVE_DECL_P_PID"]=" 1"
-D["HAVE_DECL_P_PPID"]=" 0"
-D["HAVE_DECL_P_PGID"]=" 1"
-D["HAVE_DECL_P_SID"]=" 0"
-D["HAVE_DECL_P_CID"]=" 0"
-D["HAVE_DECL_P_UID"]=" 0"
-D["HAVE_DECL_P_GID"]=" 0"
-D["HAVE_DECL_P_ALL"]=" 1"
-D["HAVE_DECL_P_LWPID"]=" 0"
-D["HAVE_DECL_LO_FLAGS_READ_ONLY"]=" 1"
-D["HAVE_DECL_LO_FLAGS_USE_AOPS"]=" 0"
-D["HAVE_DECL_LO_FLAGS_AUTOCLEAR"]=" 1"
-D["HAVE_DECL_LO_FLAGS_PARTSCAN"]=" 1"
-D["HAVE_DECL_LO_FLAGS_DIRECT_IO"]=" 0"
-D["HAVE_DECL_CTL_PROC"]=" 1"
-D["HAVE_DECL_CTL_ARLAN"]=" 1"
-D["HAVE_DECL_CTL_S390DBF"]=" 1"
-D["HAVE_DECL_CTL_SUNRPC"]=" 1"
-D["HAVE_DECL_CTL_PM"]=" 1"
-D["HAVE_DECL_CTL_FRV"]=" 1"
-D["HAVE_DECL_KERN_PRINTK_RATELIMIT"]=" 1"
-D["HAVE_DECL_KERN_PRINTK_RATELIMIT_BURST"]=" 1"
-D["HAVE_DECL_KERN_PTY"]=" 1"
-D["HAVE_DECL_KERN_NGROUPS_MAX"]=" 1"
-D["HAVE_DECL_KERN_SPARC_SCONS_PWROFF"]=" 1"
-D["HAVE_DECL_KERN_HZ_TIMER"]=" 1"
-D["HAVE_DECL_KERN_UNKNOWN_NMI_PANIC"]=" 1"
-D["HAVE_DECL_KERN_BOOTLOADER_TYPE"]=" 1"
-D["HAVE_DECL_KERN_RANDOMIZE"]=" 1"
-D["HAVE_DECL_KERN_SETUID_DUMPABLE"]=" 1"
-D["HAVE_DECL_KERN_SPIN_RETRY"]=" 1"
-D["HAVE_DECL_KERN_ACPI_VIDEO_FLAGS"]=" 1"
-D["HAVE_DECL_KERN_IA64_UNALIGNED"]=" 1"
-D["HAVE_DECL_KERN_COMPAT_LOG"]=" 1"
-D["HAVE_DECL_KERN_MAX_LOCK_DEPTH"]=" 1"
-D["HAVE_DECL_KERN_NMI_WATCHDOG"]=" 1"
-D["HAVE_DECL_KERN_PANIC_ON_NMI"]=" 1"
-D["HAVE_DECL_NET_LLC"]=" 1"
-D["HAVE_DECL_NET_NETFILTER"]=" 1"
-D["HAVE_DECL_NET_DCCP"]=" 1"
-D["HAVE_DECL_NET_IRDA"]=" 1"
-D["HAVE_DECL_NET_CORE_DESTROY_DELAY"]=" 0"
-D["HAVE_DECL_NET_CORE_BUDGET"]=" 1"
-D["HAVE_DECL_NET_CORE_AEVENT_ETIME"]=" 1"
-D["HAVE_DECL_NET_CORE_AEVENT_RSEQTH"]=" 1"
-D["HAVE_DECL_NET_CORE_WARNINGS"]=" 1"
-D["HAVE_DECL_NET_IPV4_IGMP_MAX_MSF"]=" 1"
-D["HAVE_DECL_NET_TCP_NO_METRICS_SAVE"]=" 1"
-D["HAVE_DECL_NET_TCP_DEFAULT_WIN_SCALE"]=" 1"
-D["HAVE_DECL_NET_TCP_MODERATE_RCVBUF"]=" 1"
-D["HAVE_DECL_NET_TCP_TSO_WIN_DIVISOR"]=" 1"
-D["HAVE_DECL_NET_TCP_BIC_BETA"]=" 1"
-D["HAVE_DECL_NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR"]=" 1"
-D["HAVE_DECL_NET_TCP_CONG_CONTROL"]=" 1"
-D["HAVE_DECL_NET_TCP_ABC"]=" 1"
-D["HAVE_DECL_NET_IPV4_IPFRAG_MAX_DIST"]=" 1"
-D["HAVE_DECL_NET_TCP_MTU_PROBING"]=" 1"
-D["HAVE_DECL_NET_TCP_BASE_MSS"]=" 1"
-D["HAVE_DECL_NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS"]=" 1"
-D["HAVE_DECL_NET_TCP_DMA_COPYBREAK"]=" 1"
-D["HAVE_DECL_NET_TCP_SLOW_START_AFTER_IDLE"]=" 1"
-D["HAVE_DECL_NET_CIPSOV4_CACHE_ENABLE"]=" 1"
-D["HAVE_DECL_NET_CIPSOV4_CACHE_BUCKET_SIZE"]=" 1"
-D["HAVE_DECL_NET_CIPSOV4_RBM_OPTFMT"]=" 1"
-D["HAVE_DECL_NET_CIPSOV4_RBM_STRICTVALID"]=" 1"
-D["HAVE_DECL_NET_TCP_AVAIL_CONG_CONTROL"]=" 1"
-D["HAVE_DECL_NET_TCP_ALLOWED_CONG_CONTROL"]=" 1"
-D["HAVE_DECL_NET_TCP_MAX_SSTHRESH"]=" 1"
-D["HAVE_DECL_NET_TCP_FRTO_RESPONSE"]=" 1"
-D["HAVE_DECL_NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS"]=" 1"
-D["HAVE_DECL_NET_IPV4_CONF_FORCE_IGMP_VERSION"]=" 1"
-D["HAVE_DECL_NET_IPV4_CONF_ARP_ANNOUNCE"]=" 1"
-D["HAVE_DECL_NET_IPV4_CONF_ARP_IGNORE"]=" 1"
-D["HAVE_DECL_NET_IPV4_CONF_PROMOTE_SECONDARIES"]=" 1"
-D["HAVE_DECL_NET_IPV4_CONF_ARP_ACCEPT"]=" 1"
-D["HAVE_DECL_NET_IPV4_CONF_ARP_NOTIFY"]=" 1"
-D["HAVE_DECL_NET_IPV6_MLD_MAX_MSF"]=" 1"
-D["HAVE_DECL_NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS"]=" 1"
-D["HAVE_DECL_VM_MAX_MAP_COUNT"]=" 1"
-D["HAVE_DECL_VM_LAPTOP_MODE"]=" 1"
-D["HAVE_DECL_VM_BLOCK_DUMP"]=" 1"
-D["HAVE_DECL_VM_HUGETLB_GROUP"]=" 1"
-D["HAVE_DECL_VM_VFS_CACHE_PRESSURE"]=" 1"
-D["HAVE_DECL_VM_LEGACY_VA_LAYOUT"]=" 1"
-D["HAVE_DECL_VM_SWAP_TOKEN_TIMEOUT"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_ANY"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_NONE"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_TOP"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_BOTTOM"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_INTERLACED"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_SEQ_TB"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_SEQ_BT"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_ALTERNATE"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_INTERLACED_TB"]=" 1"
-D["HAVE_DECL_V4L2_FIELD_INTERLACED_BT"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OVERLAY"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_VBI_CAPTURE"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_VBI_OUTPUT"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_OUTPUT"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY"]=" 1"
-D["HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE"]=" 0"
-D["HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT"]=" 0"
-D["HAVE_DECL_V4L2_TUNER_RADIO"]=" 1"
-D["HAVE_DECL_V4L2_TUNER_ANALOG_TV"]=" 1"
-D["HAVE_DECL_V4L2_TUNER_DIGITAL_TV"]=" 1"
-D["HAVE_DECL_V4L2_MEMORY_MMAP"]=" 1"
-D["HAVE_DECL_V4L2_MEMORY_USERPTR"]=" 1"
-D["HAVE_DECL_V4L2_MEMORY_OVERLAY"]=" 1"
-D["HAVE_DECL_V4L2_MEMORY_DMABUF"]=" 1"
-D["HAVE_DECL_V4L2_COLORSPACE_SMPTE170M"]=" 1"
-D["HAVE_DECL_V4L2_COLORSPACE_SMPTE240M"]=" 1"
-D["HAVE_DECL_V4L2_COLORSPACE_REC709"]=" 1"
-D["HAVE_DECL_V4L2_COLORSPACE_BT878"]=" 1"
-D["HAVE_DECL_V4L2_COLORSPACE_470_SYSTEM_M"]=" 1"
-D["HAVE_DECL_V4L2_COLORSPACE_470_SYSTEM_BG"]=" 1"
-D["HAVE_DECL_V4L2_COLORSPACE_JPEG"]=" 1"
-D["HAVE_DECL_V4L2_COLORSPACE_SRGB"]=" 1"
-D["HAVE_DECL_V4L2_PRIORITY_UNSET"]=" 1"
-D["HAVE_DECL_V4L2_PRIORITY_BACKGROUND"]=" 1"
-D["HAVE_DECL_V4L2_PRIORITY_INTERACTIVE"]=" 1"
-D["HAVE_DECL_V4L2_PRIORITY_RECORD"]=" 1"
-D["HAVE_DECL_V4L2_FRMSIZE_TYPE_DISCRETE"]=" 1"
-D["HAVE_DECL_V4L2_FRMSIZE_TYPE_CONTINUOUS"]=" 1"
-D["HAVE_DECL_V4L2_FRMSIZE_TYPE_STEPWISE"]=" 1"
-D["HAVE_DECL_V4L2_FRMIVAL_TYPE_DISCRETE"]=" 1"
-D["HAVE_DECL_V4L2_FRMIVAL_TYPE_CONTINUOUS"]=" 1"
-D["HAVE_DECL_V4L2_FRMIVAL_TYPE_STEPWISE"]=" 1"
-D["HAVE_DECL_V4L2_CTRL_TYPE_INTEGER"]=" 1"
-D["HAVE_DECL_V4L2_CTRL_TYPE_BOOLEAN"]=" 1"
-D["HAVE_DECL_V4L2_CTRL_TYPE_MENU"]=" 1"
-D["HAVE_DECL_V4L2_CTRL_TYPE_BUTTON"]=" 1"
-D["HAVE_DECL_V4L2_CTRL_TYPE_INTEGER64"]=" 1"
-D["HAVE_DECL_V4L2_CTRL_TYPE_CTRL_CLASS"]=" 1"
-D["HAVE_DECL_V4L2_CTRL_TYPE_STRING"]=" 1"
-D["HAVE_DECL_V4L2_CTRL_TYPE_BITMASK"]=" 1"
-D["HAVE_DECL_V4L2_CTRL_TYPE_INTEGER_MENU"]=" 1"
-D["HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA"]=" 1"
-D["HAVE_BLKGETSIZE64"]=" 1"
-D["SIZEOF_LONG"]=" 8"
-D["SIZEOF_LONG_LONG"]=" 8"
-D["SIZEOF_OFF_T"]=" 8"
-D["SIZEOF_KERNEL_LONG_T"]=" 8"
-D["SIZEOF_STRUCT_I64_I32"]=" 16"
-D["ASM_SIGRTMIN"]=" 32"
-D["ASM_SA_RESTORER"]=" 0x04000000"
-D["HAVE___BUILTIN_POPCOUNT"]=" 1"
-D["HAVE_DLADDR"]=" 1"
-D["HAVE_GNU_STUBS_32_H"]=" 1"
-D["HAVE_M32_MPERS"]=" 1"
-D["HAVE_M32_STRUCT_STAT"]=" 1"
-D["HAVE_M32_STRUCT_STAT_ST_MTIME_NSEC"]=" 1"
-D["HAVE_M32_STRUCT_STAT64"]=" 1"
-D["HAVE_M32_STRUCT_STAT64_ST_MTIME_NSEC"]=" 1"
-D["HAVE_GNU_STUBS_X32_H"]=" 1"
-D["HAVE_MX32_MPERS"]=" 1"
-D["HAVE_MX32_STRUCT_STAT"]=" 1"
-D["HAVE_MX32_STRUCT_STAT_ST_MTIME_NSEC"]=" 1"
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ {
-  line = $ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-  ac_MKDIR_P=$MKDIR_P
-  case $MKDIR_P in
-  [\\/$]* | ?:[\\/]* ) ;;
-  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
-  esac
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-  ac_datarootdir_hack='
-  s&@datadir@&${datarootdir}&g
-  s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g
-  s&@infodir@&${datarootdir}/info&g
-  s&@localedir@&${datarootdir}/locale&g
-  s&@mandir@&${datarootdir}/man&g
-  s&\${datarootdir}&${prefix}/share&g' ;;
-esac
-ac_sed_extra="/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}
-
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
-# Compute "$ac_file"'s index in $config_headers.
-_am_arg="$ac_file"
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$_am_arg" : 'X\(//\)[^/]' \| \
-	 X"$_am_arg" : 'X\(//\)$' \| \
-	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`/stamp-h$_am_stamp_count
- ;;
-
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
-  esac
-
-
-  case $ac_file$ac_mode in
-    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Older Autoconf quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named 'Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$mf" : 'X\(//\)[^/]' \| \
-	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running 'make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "$am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$file" : 'X\(//\)[^/]' \| \
-	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      as_dir=$dirpart/$fdir; as_fn_mkdir_p
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
- ;;
-
-  esac
-done # for ac_tag
-
-
-as_fn_exit 0
diff --git a/configure b/configure
index c85be08..4ebd921 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for strace 4.18.
+# Generated by GNU Autoconf 2.69 for strace 4.19.
 #
 # Report bugs to <strace-devel@lists.sourceforge.net>.
 #
@@ -582,8 +582,8 @@
 # Identity of this package.
 PACKAGE_NAME='strace'
 PACKAGE_TARNAME='strace'
-PACKAGE_VERSION='4.18'
-PACKAGE_STRING='strace 4.18'
+PACKAGE_VERSION='4.19'
+PACKAGE_STRING='strace 4.19'
 PACKAGE_BUGREPORT='strace-devel@lists.sourceforge.net'
 PACKAGE_URL='https://strace.io'
 
@@ -658,9 +658,11 @@
 arch_mx32
 arch_m32
 arch
+MANPAGE_DATE
 COPYRIGHT_YEAR
 CODE_COVERAGE_RULES
 CODE_COVERAGE_LDFLAGS
+CODE_COVERAGE_LIBS
 CODE_COVERAGE_CXXFLAGS
 CODE_COVERAGE_CFLAGS
 CODE_COVERAGE_CPPFLAGS
@@ -1346,7 +1348,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures strace 4.18 to adapt to many kinds of systems.
+\`configure' configures strace 4.19 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1416,7 +1418,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of strace 4.18:";;
+     short | recursive ) echo "Configuration of strace 4.19:";;
    esac
   cat <<\_ACEOF
 
@@ -1528,7 +1530,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-strace configure 4.18
+strace configure 4.19
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2268,7 +2270,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by strace $as_me 4.18, which was
+It was created by strace $as_me 4.19, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2621,6 +2623,7 @@
 
 
 
+
 ac_aux_dir=
 for ac_dir in . "$srcdir"/.; do
   if test -f "$ac_dir/install-sh"; then
@@ -3138,7 +3141,7 @@
 
 # Define the identity of the package.
  PACKAGE='strace'
- VERSION='4.18'
+ VERSION='4.19'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3231,7 +3234,6 @@
   fi
 fi
 
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
     # Check whether --enable-maintainer-mode was given.
@@ -8278,9 +8280,6 @@
 
 fi
 
-		# List of supported lcov versions.
-		lcov_version_list="1.6 1.7 1.8 1.9 1.10 1.11 1.12"
-
 		# Extract the first word of "lcov", so it can be a program name with args.
 set dummy lcov; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -8356,40 +8355,11 @@
 
 
 
-		if  test "$LCOV" ; then :
+		if  test -z "$LCOV" ; then :
 
-			{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lcov version" >&5
-$as_echo_n "checking for lcov version... " >&6; }
-if ${ax_cv_lcov_version+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-				ax_cv_lcov_version=invalid
-				lcov_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'`
-				for lcov_check_version in $lcov_version_list; do
-					if test "$lcov_version" = "$lcov_check_version"; then
-						ax_cv_lcov_version="$lcov_check_version (ok)"
-					fi
-				done
+			as_fn_error $? "To enable code coverage reporting you must have lcov installed" "$LINENO" 5
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_lcov_version" >&5
-$as_echo "$ax_cv_lcov_version" >&6; }
-
-else
-
-			lcov_msg="To enable code coverage reporting you must have one of the following lcov versions installed: $lcov_version_list"
-			as_fn_error $? "$lcov_msg" "$LINENO" 5
-
-fi
-
-		case $ax_cv_lcov_version in
-			""|invalid)
-				lcov_msg="You must have one of the following versions of lcov: $lcov_version_list (found: $lcov_version)."
-				as_fn_error $? "$lcov_msg" "$LINENO" 5
-				LCOV="exit 0;"
-			;;
-		esac
 
 		if  test -z "$GENHTML" ; then :
 
@@ -8397,16 +8367,46 @@
 
 fi
 
-				CODE_COVERAGE_CPPFLAGS="-DENABLE_COVERAGE_GCOV -DNDEBUG"
+						CODE_COVERAGE_CPPFLAGS="-DENABLE_COVERAGE_GCOV -DNDEBUG"
 		CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
 		CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
-		CODE_COVERAGE_LDFLAGS="-lgcov"
+		CODE_COVERAGE_LIBS="-lgcov"
+		CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
 
 
 
 
 
 
+
+		CODE_COVERAGE_RULES_CHECK='
+	-$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+	$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+'
+		CODE_COVERAGE_RULES_CAPTURE='
+	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+	-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
+	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+	@echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+'
+		CODE_COVERAGE_RULES_CLEAN='
+clean: code-coverage-clean
+distclean: code-coverage-clean
+code-coverage-clean:
+	-$(LCOV) --directory $(top_builddir) -z
+	-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+	-find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+'
+
+else
+
+		CODE_COVERAGE_RULES_CHECK='
+	@echo "Need to reconfigure with --enable-code-coverage"
+'
+		CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK"
+		CODE_COVERAGE_RULES_CLEAN=''
+
 fi
 
 CODE_COVERAGE_RULES='
@@ -8464,7 +8464,7 @@
 CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
 $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
 --rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
-CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULTS)
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
 CODE_COVERAGE_IGNORE_PATTERN ?=
 
 code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
@@ -8486,37 +8486,15 @@
 code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
 
 # Use recursive makes in order to ignore errors during check
-check-code-coverage:
-ifeq ($(CODE_COVERAGE_ENABLED),yes)
-	-$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
-	$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
-else
-	@echo "Need to reconfigure with --enable-code-coverage"
-endif
+check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"'
 
 # Capture code coverage data
-code-coverage-capture: code-coverage-capture-hook
-ifeq ($(CODE_COVERAGE_ENABLED),yes)
-	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
-	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
-	-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
-	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
-	@echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
-else
-	@echo "Need to reconfigure with --enable-code-coverage"
-endif
+code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"'
 
 # Hook rule executed before code-coverage-capture, overridable by the user
 code-coverage-capture-hook:
 
-ifeq ($(CODE_COVERAGE_ENABLED),yes)
-clean: code-coverage-clean
-distclean: code-coverage-clean
-code-coverage-clean:
-	-$(LCOV) --directory $(top_builddir) -z
-	-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
-	-find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
-endif
+'"$CODE_COVERAGE_RULES_CLEAN"'
 
 GITIGNOREFILES ?=
 GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
@@ -8537,6 +8515,12 @@
 COPYRIGHT_YEAR=2017
 
 
+
+$as_echo "#define MANPAGE_DATE \"2017-08-28\"" >>confdefs.h
+
+MANPAGE_DATE=2017-08-28
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supported architecture" >&5
 $as_echo_n "checking for supported architecture... " >&6; }
 arch_m32=
@@ -9203,7 +9187,7 @@
 fi
 
 
-for ac_func in accept4 fallocate fanotify_mark fopen64 fork fputs_unlocked fstatat ftruncate futimens if_indextoname open64 prctl preadv process_vm_readv pwritev readahead signalfd stpcpy strerror strndup strsignal sync_file_range utimensat
+for ac_func in accept4 be64toh fallocate fanotify_mark fopen64 fork fputs_unlocked fstatat ftruncate futimens if_indextoname open64 prctl preadv process_vm_readv pwritev readahead signalfd stpcpy strerror strndup strsignal sync_file_range utimensat
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -9410,6 +9394,70 @@
 fi
 
 
+ac_fn_c_check_type "$LINENO" "struct crypto_report_aead" "ac_cv_type_struct_crypto_report_aead" "#include <linux/cryptouser.h>
+"
+if test "x$ac_cv_type_struct_crypto_report_aead" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_CRYPTO_REPORT_AEAD 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct crypto_report_blkcipher" "ac_cv_type_struct_crypto_report_blkcipher" "#include <linux/cryptouser.h>
+"
+if test "x$ac_cv_type_struct_crypto_report_blkcipher" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_CRYPTO_REPORT_BLKCIPHER 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct crypto_report_cipher" "ac_cv_type_struct_crypto_report_cipher" "#include <linux/cryptouser.h>
+"
+if test "x$ac_cv_type_struct_crypto_report_cipher" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_CRYPTO_REPORT_CIPHER 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct crypto_report_hash" "ac_cv_type_struct_crypto_report_hash" "#include <linux/cryptouser.h>
+"
+if test "x$ac_cv_type_struct_crypto_report_hash" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_CRYPTO_REPORT_HASH 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct crypto_report_rng" "ac_cv_type_struct_crypto_report_rng" "#include <linux/cryptouser.h>
+"
+if test "x$ac_cv_type_struct_crypto_report_rng" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_CRYPTO_REPORT_RNG 1
+_ACEOF
+
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "struct keyctl_kdf_params" "ac_cv_type_struct_keyctl_kdf_params" "#include <linux/keyctl.h>
+"
+if test "x$ac_cv_type_struct_keyctl_kdf_params" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_KEYCTL_KDF_PARAMS 1
+_ACEOF
+
+
+fi
+
+
 ac_fn_c_check_member "$LINENO" "struct timex" "tai" "ac_cv_member_struct_timex_tai" "#include <sys/timex.h>
 "
 if test "x$ac_cv_member_struct_timex_tai" = xyes; then :
@@ -9678,7 +9726,7 @@
 fi
 
 
-for ac_header in asm/cachectl.h asm/sysmips.h bluetooth/bluetooth.h elf.h inttypes.h linux/bsg.h linux/dm-ioctl.h linux/dqblk_xfs.h linux/falloc.h linux/fiemap.h linux/filter.h linux/genetlink.h linux/hiddev.h linux/ip_vs.h linux/ipc.h linux/mmtimer.h linux/msg.h linux/netfilter/nfnetlink.h linux/nsfs.h linux/perf_event.h linux/quota.h linux/seccomp.h linux/securebits.h linux/sem.h linux/shm.h linux/userfaultfd.h linux/utsname.h mqueue.h netinet/sctp.h netipx/ipx.h scsi/sg.h stropts.h sys/conf.h sys/eventfd.h sys/fanotify.h sys/ipc.h sys/msg.h sys/quota.h sys/reg.h sys/sem.h sys/shm.h sys/signalfd.h sys/xattr.h ustat.h
+for ac_header in asm/cachectl.h asm/sysmips.h bluetooth/bluetooth.h elf.h inttypes.h linux/bsg.h linux/cryptouser.h linux/dm-ioctl.h linux/dqblk_xfs.h linux/falloc.h linux/fib_rules.h linux/fiemap.h linux/genetlink.h linux/hiddev.h linux/if_addr.h linux/if_link.h linux/ip_vs.h linux/ipc.h linux/mmtimer.h linux/msg.h linux/neighbour.h linux/netfilter/nfnetlink.h linux/nsfs.h linux/perf_event.h linux/quota.h linux/seccomp.h linux/securebits.h linux/sem.h linux/shm.h linux/userfaultfd.h linux/utsname.h mqueue.h netinet/sctp.h netipx/ipx.h scsi/sg.h stropts.h sys/conf.h sys/eventfd.h sys/fanotify.h sys/ipc.h sys/msg.h sys/quota.h sys/reg.h sys/sem.h sys/shm.h sys/signalfd.h sys/xattr.h ustat.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -9784,69 +9832,15 @@
 #define HAVE_LINUX_BPF_H 1
 _ACEOF
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether union bpf_attr.log_buf initialization works" >&5
-$as_echo_n "checking whether union bpf_attr.log_buf initialization works... " >&6; }
-if ${st_cv_have_union_bpf_attr_log_buf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <linux/bpf.h>
-int
-main ()
-{
-union bpf_attr a = { .log_buf = 0 };
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  st_cv_have_union_bpf_attr_log_buf=yes
-else
-  st_cv_have_union_bpf_attr_log_buf=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_have_union_bpf_attr_log_buf" >&5
-$as_echo "$st_cv_have_union_bpf_attr_log_buf" >&6; }
-	if test $st_cv_have_union_bpf_attr_log_buf = yes; then
 
-$as_echo "#define HAVE_UNION_BPF_ATTR_LOG_BUF 1" >>confdefs.h
 
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether union bpf_attr.bpf_fd initialization works" >&5
-$as_echo_n "checking whether union bpf_attr.bpf_fd initialization works... " >&6; }
-if ${st_cv_have_union_bpf_attr_bpf_fd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <linux/bpf.h>
-int
-main ()
-{
-union bpf_attr a = { .bpf_fd = 0 };
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  st_cv_have_union_bpf_attr_bpf_fd=yes
-else
-  st_cv_have_union_bpf_attr_bpf_fd=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_have_union_bpf_attr_bpf_fd" >&5
-$as_echo "$st_cv_have_union_bpf_attr_bpf_fd" >&6; }
-	if test $st_cv_have_union_bpf_attr_bpf_fd = yes; then
 
-$as_echo "#define HAVE_UNION_BPF_ATTR_BPF_FD 1" >>confdefs.h
 
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether union bpf_attr.attach_flags initialization works" >&5
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether union bpf_attr.attach_flags initialization works" >&5
 $as_echo_n "checking whether union bpf_attr.attach_flags initialization works... " >&6; }
-if ${st_cv_have_union_bpf_attr_attach_flags+:} false; then :
+if ${st_cv_member_union_bpf_attr_attach_flags+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -9861,25 +9855,364 @@
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  st_cv_have_union_bpf_attr_attach_flags=yes
+  st_cv_member_union_bpf_attr_attach_flags=yes
 else
-  st_cv_have_union_bpf_attr_attach_flags=no
+  st_cv_member_union_bpf_attr_attach_flags=no
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_have_union_bpf_attr_attach_flags" >&5
-$as_echo "$st_cv_have_union_bpf_attr_attach_flags" >&6; }
-	if test $st_cv_have_union_bpf_attr_attach_flags = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_member_union_bpf_attr_attach_flags" >&5
+$as_echo "$st_cv_member_union_bpf_attr_attach_flags" >&6; }
+
+if test $st_cv_member_union_bpf_attr_attach_flags = yes; then
 
 $as_echo "#define HAVE_UNION_BPF_ATTR_ATTACH_FLAGS 1" >>confdefs.h
 
-	fi
+fi
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether union bpf_attr.bpf_fd initialization works" >&5
+$as_echo_n "checking whether union bpf_attr.bpf_fd initialization works... " >&6; }
+if ${st_cv_member_union_bpf_attr_bpf_fd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/bpf.h>
+int
+main ()
+{
+union bpf_attr a = { .bpf_fd = 0 };
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  st_cv_member_union_bpf_attr_bpf_fd=yes
+else
+  st_cv_member_union_bpf_attr_bpf_fd=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_member_union_bpf_attr_bpf_fd" >&5
+$as_echo "$st_cv_member_union_bpf_attr_bpf_fd" >&6; }
+
+if test $st_cv_member_union_bpf_attr_bpf_fd = yes; then
+
+$as_echo "#define HAVE_UNION_BPF_ATTR_BPF_FD 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether union bpf_attr.flags initialization works" >&5
+$as_echo_n "checking whether union bpf_attr.flags initialization works... " >&6; }
+if ${st_cv_member_union_bpf_attr_flags+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/bpf.h>
+int
+main ()
+{
+union bpf_attr a = { .flags = 0 };
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  st_cv_member_union_bpf_attr_flags=yes
+else
+  st_cv_member_union_bpf_attr_flags=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_member_union_bpf_attr_flags" >&5
+$as_echo "$st_cv_member_union_bpf_attr_flags" >&6; }
+
+if test $st_cv_member_union_bpf_attr_flags = yes; then
+
+$as_echo "#define HAVE_UNION_BPF_ATTR_FLAGS 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether union bpf_attr.inner_map_fd initialization works" >&5
+$as_echo_n "checking whether union bpf_attr.inner_map_fd initialization works... " >&6; }
+if ${st_cv_member_union_bpf_attr_inner_map_fd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/bpf.h>
+int
+main ()
+{
+union bpf_attr a = { .inner_map_fd = 0 };
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  st_cv_member_union_bpf_attr_inner_map_fd=yes
+else
+  st_cv_member_union_bpf_attr_inner_map_fd=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_member_union_bpf_attr_inner_map_fd" >&5
+$as_echo "$st_cv_member_union_bpf_attr_inner_map_fd" >&6; }
+
+if test $st_cv_member_union_bpf_attr_inner_map_fd = yes; then
+
+$as_echo "#define HAVE_UNION_BPF_ATTR_INNER_MAP_FD 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether union bpf_attr.prog_flags initialization works" >&5
+$as_echo_n "checking whether union bpf_attr.prog_flags initialization works... " >&6; }
+if ${st_cv_member_union_bpf_attr_prog_flags+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/bpf.h>
+int
+main ()
+{
+union bpf_attr a = { .prog_flags = 0 };
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  st_cv_member_union_bpf_attr_prog_flags=yes
+else
+  st_cv_member_union_bpf_attr_prog_flags=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_member_union_bpf_attr_prog_flags" >&5
+$as_echo "$st_cv_member_union_bpf_attr_prog_flags" >&6; }
+
+if test $st_cv_member_union_bpf_attr_prog_flags = yes; then
+
+$as_echo "#define HAVE_UNION_BPF_ATTR_PROG_FLAGS 1" >>confdefs.h
+
+fi
+
+
+
+
+
 
 fi
 
 done
 
 
+ac_fn_c_check_type "$LINENO" "struct br_port_msg" "ac_cv_type_struct_br_port_msg" "#include <linux/if_bridge.h>
+"
+if test "x$ac_cv_type_struct_br_port_msg" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BR_PORT_MSG 1
+_ACEOF
+
+
+fi
+
+ac_fn_c_check_type "$LINENO" "struct dcbmsg" "ac_cv_type_struct_dcbmsg" "#include <linux/dcbnl.h>
+"
+if test "x$ac_cv_type_struct_dcbmsg" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_DCBMSG 1
+_ACEOF
+
+
+fi
+
+ac_fn_c_check_type "$LINENO" "struct ifaddrlblmsg" "ac_cv_type_struct_ifaddrlblmsg" "#include <linux/if_addrlabel.h>
+"
+if test "x$ac_cv_type_struct_ifaddrlblmsg" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_IFADDRLBLMSG 1
+_ACEOF
+
+
+fi
+
+ac_fn_c_check_type "$LINENO" "struct netconfmsg" "ac_cv_type_struct_netconfmsg" "#include <linux/netconf.h>
+"
+if test "x$ac_cv_type_struct_netconfmsg" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_NETCONFMSG 1
+_ACEOF
+
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "struct rta_mfc_stats" "ac_cv_type_struct_rta_mfc_stats" "#include <linux/rtnetlink.h>
+"
+if test "x$ac_cv_type_struct_rta_mfc_stats" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_RTA_MFC_STATS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct rtvia" "ac_cv_type_struct_rtvia" "#include <linux/rtnetlink.h>
+"
+if test "x$ac_cv_type_struct_rtvia" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_RTVIA 1
+_ACEOF
+
+
+fi
+
+
+ac_fn_c_check_member "$LINENO" "struct ndt_stats" "ndts_table_fulls" "ac_cv_member_struct_ndt_stats_ndts_table_fulls" "#include <linux/neighbour.h>
+"
+if test "x$ac_cv_member_struct_ndt_stats_ndts_table_fulls" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS 1
+_ACEOF
+
+
+fi
+
+ac_fn_c_check_type "$LINENO" "struct ndt_config" "ac_cv_type_struct_ndt_config" "#include <linux/neighbour.h>
+"
+if test "x$ac_cv_type_struct_ndt_config" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_NDT_CONFIG 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct ndt_stats" "ac_cv_type_struct_ndt_stats" "#include <linux/neighbour.h>
+"
+if test "x$ac_cv_type_struct_ndt_stats" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_NDT_STATS 1
+_ACEOF
+
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "struct ifla_bridge_id" "ac_cv_type_struct_ifla_bridge_id" "#include <linux/if_link.h>
+"
+if test "x$ac_cv_type_struct_ifla_bridge_id" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_IFLA_BRIDGE_ID 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct ifla_port_vsi" "ac_cv_type_struct_ifla_port_vsi" "#include <linux/if_link.h>
+"
+if test "x$ac_cv_type_struct_ifla_port_vsi" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_IFLA_PORT_VSI 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct rtnl_link_stats64" "ac_cv_type_struct_rtnl_link_stats64" "#include <linux/if_link.h>
+"
+if test "x$ac_cv_type_struct_rtnl_link_stats64" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_RTNL_LINK_STATS64 1
+_ACEOF
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct rtnl_link_stats" "rx_nohandler" "ac_cv_member_struct_rtnl_link_stats_rx_nohandler" "#include <linux/if_link.h>
+"
+if test "x$ac_cv_member_struct_rtnl_link_stats_rx_nohandler" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct rtnl_link_stats64" "rx_nohandler" "ac_cv_member_struct_rtnl_link_stats64_rx_nohandler" "#include <linux/if_link.h>
+"
+if test "x$ac_cv_member_struct_rtnl_link_stats64_rx_nohandler" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER 1
+_ACEOF
+
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "struct fib_rule_uid_range" "ac_cv_type_struct_fib_rule_uid_range" "#include <linux/fib_rules.h>
+"
+if test "x$ac_cv_type_struct_fib_rule_uid_range" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_FIB_RULE_UID_RANGE 1
+_ACEOF
+
+
+fi
+
+
 ac_fn_c_check_type "$LINENO" "struct statfs" "ac_cv_type_struct_statfs" "#include <linux/types.h>
 #include <asm/statfs.h>
 "
@@ -9901,8 +10234,7 @@
 
 
 fi
-
-	ac_fn_c_check_member "$LINENO" "struct statfs" "f_flags" "ac_cv_member_struct_statfs_f_flags" "#include <linux/types.h>
+ac_fn_c_check_member "$LINENO" "struct statfs" "f_flags" "ac_cv_member_struct_statfs_f_flags" "#include <linux/types.h>
 #include <asm/statfs.h>
 "
 if test "x$ac_cv_member_struct_statfs_f_flags" = xyes; then :
@@ -9913,8 +10245,7 @@
 
 
 fi
-
-	ac_fn_c_check_member "$LINENO" "struct statfs" "f_fsid.val" "ac_cv_member_struct_statfs_f_fsid_val" "#include <linux/types.h>
+ac_fn_c_check_member "$LINENO" "struct statfs" "f_fsid.val" "ac_cv_member_struct_statfs_f_fsid_val" "#include <linux/types.h>
 #include <asm/statfs.h>
 "
 if test "x$ac_cv_member_struct_statfs_f_fsid_val" = xyes; then :
@@ -9925,8 +10256,7 @@
 
 
 fi
-
-	ac_fn_c_check_member "$LINENO" "struct statfs" "f_fsid.__val" "ac_cv_member_struct_statfs_f_fsid___val" "#include <linux/types.h>
+ac_fn_c_check_member "$LINENO" "struct statfs" "f_fsid.__val" "ac_cv_member_struct_statfs_f_fsid___val" "#include <linux/types.h>
 #include <asm/statfs.h>
 "
 if test "x$ac_cv_member_struct_statfs_f_fsid___val" = xyes; then :
@@ -9963,8 +10293,7 @@
 
 
 fi
-
-	ac_fn_c_check_member "$LINENO" "struct statfs64" "f_flags" "ac_cv_member_struct_statfs64_f_flags" "#include <linux/types.h>
+ac_fn_c_check_member "$LINENO" "struct statfs64" "f_flags" "ac_cv_member_struct_statfs64_f_flags" "#include <linux/types.h>
 #include <asm/statfs.h>
 "
 if test "x$ac_cv_member_struct_statfs64_f_flags" = xyes; then :
@@ -9975,8 +10304,7 @@
 
 
 fi
-
-	ac_fn_c_check_member "$LINENO" "struct statfs64" "f_fsid.val" "ac_cv_member_struct_statfs64_f_fsid_val" "#include <linux/types.h>
+ac_fn_c_check_member "$LINENO" "struct statfs64" "f_fsid.val" "ac_cv_member_struct_statfs64_f_fsid_val" "#include <linux/types.h>
 #include <asm/statfs.h>
 "
 if test "x$ac_cv_member_struct_statfs64_f_fsid_val" = xyes; then :
@@ -9987,8 +10315,7 @@
 
 
 fi
-
-	ac_fn_c_check_member "$LINENO" "struct statfs64" "f_fsid.__val" "ac_cv_member_struct_statfs64_f_fsid___val" "#include <linux/types.h>
+ac_fn_c_check_member "$LINENO" "struct statfs64" "f_fsid.__val" "ac_cv_member_struct_statfs64_f_fsid___val" "#include <linux/types.h>
 #include <asm/statfs.h>
 "
 if test "x$ac_cv_member_struct_statfs64_f_fsid___val" = xyes; then :
@@ -13337,6 +13664,7 @@
 	VALGRIND_ENABLED=$enable_valgrind
 
 
+
 	# Check for Valgrind tools we care about.
 	valgrind_enabled_tools=
 
@@ -13396,6 +13724,7 @@
 		ENABLE_VALGRIND_memcheck=$enable_valgrind_memcheck
 
 
+
 		# Check whether --enable-valgrind-helgrind was given.
 if test "${enable_valgrind_helgrind+set}" = set; then :
   enableval=$enable_valgrind_helgrind; enable_valgrind_helgrind=$enableval
@@ -13452,6 +13781,7 @@
 		ENABLE_VALGRIND_helgrind=$enable_valgrind_helgrind
 
 
+
 		# Check whether --enable-valgrind-drd was given.
 if test "${enable_valgrind_drd+set}" = set; then :
   enableval=$enable_valgrind_drd; enable_valgrind_drd=$enableval
@@ -13508,6 +13838,7 @@
 		ENABLE_VALGRIND_drd=$enable_valgrind_drd
 
 
+
 		# Check whether --enable-valgrind-sgcheck was given.
 if test "${enable_valgrind_sgcheck+set}" = set; then :
   enableval=$enable_valgrind_sgcheck; enable_valgrind_sgcheck=$enableval
@@ -13564,6 +13895,7 @@
 		ENABLE_VALGRIND_sgcheck=$enable_valgrind_sgcheck
 
 
+
 	valgrind_tools="memcheck helgrind drd sgcheck"
 
 	valgrind_enabled_tools=$valgrind_enabled_tools
@@ -13613,9 +13945,8 @@
 # Use recursive makes in order to ignore errors during check
 check-valgrind:
 ifeq ($(VALGRIND_ENABLED),yes)
-	-$(A''M_V_at)$(foreach tool,$(valgrind_enabled_tools), \
-		$(MAKE) $(AM_MAKEFLAGS) -k check-valgrind-$(tool); \
-	)
+	$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k \
+		$(foreach tool, $(valgrind_enabled_tools), check-valgrind-$(tool))
 else
 	@echo "Need to reconfigure with --enable-valgrind"
 endif
@@ -13631,7 +13962,7 @@
 	$(valgrind_lt) \
 	$(VALGRIND) $(VALGRIND_SUPPRESSIONS) --error-exitcode=1 $(VALGRIND_FLAGS)
 
-define valgrind_tool_rule =
+define valgrind_tool_rule
 check-valgrind-$(1): $$(BUILT_SOURCES)
 ifeq ($$(VALGRIND_ENABLED)-$$(ENABLE_VALGRIND_$(1)),yes-yes)
 	$$(valgrind_v_use)$$(MAKE) $$(AM_MAKEFLAGS) check-am \
@@ -13661,7 +13992,7 @@
 
 
 
-ac_config_files="$ac_config_files Makefile tests/Makefile tests-m32/Makefile tests-mx32/Makefile strace.spec debian/changelog"
+ac_config_files="$ac_config_files Makefile tests/Makefile tests-m32/Makefile tests-mx32/Makefile strace.1 strace.spec debian/changelog"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -14230,7 +14561,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by strace $as_me 4.18, which was
+This file was extended by strace $as_me 4.19, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -14297,7 +14628,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-strace config.status 4.18
+strace config.status 4.19
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -14432,6 +14763,7 @@
     "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
     "tests-m32/Makefile") CONFIG_FILES="$CONFIG_FILES tests-m32/Makefile" ;;
     "tests-mx32/Makefile") CONFIG_FILES="$CONFIG_FILES tests-mx32/Makefile" ;;
+    "strace.1") CONFIG_FILES="$CONFIG_FILES strace.1" ;;
     "strace.spec") CONFIG_FILES="$CONFIG_FILES strace.spec" ;;
     "debian/changelog") CONFIG_FILES="$CONFIG_FILES debian/changelog" ;;
 
diff --git a/configure.ac b/configure.ac
index eb7b0e7..d064285 100644
--- a/configure.ac
+++ b/configure.ac
@@ -37,12 +37,12 @@
 	[strace],
 	[https://strace.io])
 m4_define([copyright_year], m4_esyscmd([./copyright-year-gen .year]))
+m4_define([manpage_date], m4_esyscmd([./file-date-gen strace.1.in]))
 AC_COPYRIGHT([Copyright (c) 1999-]copyright_year[ The strace developers.])
 AC_CONFIG_SRCDIR([strace.c])
 AC_CONFIG_AUX_DIR([.])
 AC_CONFIG_HEADERS([config.h])
-AM_INIT_AUTOMAKE([foreign nostdinc dist-xz silent-rules parallel-tests])
-AM_EXTRA_RECURSIVE_TARGETS([check-valgrind])
+AM_INIT_AUTOMAKE([foreign nostdinc dist-xz silent-rules parallel-tests 1.13])
 AM_MAINTAINER_MODE
 AC_CANONICAL_HOST
 
@@ -64,6 +64,9 @@
 AC_DEFINE([COPYRIGHT_YEAR], "[copyright_year]", [Current copyright year.])
 AC_SUBST([COPYRIGHT_YEAR], [copyright_year])
 
+AC_DEFINE([MANPAGE_DATE], "[manpage_date]", [Date])
+AC_SUBST([MANPAGE_DATE], [manpage_date])
+
 AC_MSG_CHECKING([for supported architecture])
 arch_m32=
 arch_mx32=
@@ -265,6 +268,7 @@
 
 AC_CHECK_FUNCS(m4_normalize([
 	accept4
+	be64toh
 	fallocate
 	fanotify_mark
 	fopen64
@@ -321,6 +325,18 @@
 [#include <sys/types.h>
 #include <linux/fcntl.h>])
 
+AC_CHECK_TYPES(m4_normalize([
+	struct crypto_report_aead,
+	struct crypto_report_blkcipher,
+	struct crypto_report_cipher,
+	struct crypto_report_hash,
+	struct crypto_report_rng
+]),,, [#include <linux/cryptouser.h>])
+
+AC_CHECK_TYPES(m4_normalize([
+	struct keyctl_kdf_params
+]),,, [#include <linux/keyctl.h>])
+
 AC_CHECK_MEMBERS([struct timex.tai],,, [#include <sys/timex.h>])
 
 AC_CHECK_MEMBERS([struct utsname.domainname],,, [#include <sys/utsname.h>])
@@ -362,17 +378,21 @@
 	elf.h
 	inttypes.h
 	linux/bsg.h
+	linux/cryptouser.h
 	linux/dm-ioctl.h
 	linux/dqblk_xfs.h
 	linux/falloc.h
+	linux/fib_rules.h
 	linux/fiemap.h
-	linux/filter.h
 	linux/genetlink.h
 	linux/hiddev.h
+	linux/if_addr.h
+	linux/if_link.h
 	linux/ip_vs.h
 	linux/ipc.h
 	linux/mmtimer.h
 	linux/msg.h
+	linux/neighbour.h
 	linux/netfilter/nfnetlink.h
 	linux/nsfs.h
 	linux/perf_event.h
@@ -421,61 +441,59 @@
 ])
 
 AC_CHECK_HEADERS([linux/bpf.h], [
-	AC_CACHE_CHECK([whether union bpf_attr.log_buf initialization works],
-		       [st_cv_have_union_bpf_attr_log_buf],
-		[AC_COMPILE_IFELSE(
-			[AC_LANG_PROGRAM([[#include <linux/bpf.h>]],
-					 [[union bpf_attr a = { .log_buf = 0 };]])],
-			[st_cv_have_union_bpf_attr_log_buf=yes],
-			[st_cv_have_union_bpf_attr_log_buf=no])])
-	if test $st_cv_have_union_bpf_attr_log_buf = yes; then
-		AC_DEFINE(HAVE_UNION_BPF_ATTR_LOG_BUF, [1],
-			  [Define to 1 if union bpf_attr.log_buf initialization works])
-	fi
-	AC_CACHE_CHECK([whether union bpf_attr.bpf_fd initialization works],
-		       [st_cv_have_union_bpf_attr_bpf_fd],
-		[AC_COMPILE_IFELSE(
-			[AC_LANG_PROGRAM([[#include <linux/bpf.h>]],
-					 [[union bpf_attr a = { .bpf_fd = 0 };]])],
-			[st_cv_have_union_bpf_attr_bpf_fd=yes],
-			[st_cv_have_union_bpf_attr_bpf_fd=no])])
-	if test $st_cv_have_union_bpf_attr_bpf_fd = yes; then
-		AC_DEFINE(HAVE_UNION_BPF_ATTR_BPF_FD, [1],
-			  [Define to 1 if union bpf_attr.bpf_fd initialization works])
-	fi
-	AC_CACHE_CHECK([whether union bpf_attr.attach_flags initialization works],
-		       [st_cv_have_union_bpf_attr_attach_flags],
-		[AC_COMPILE_IFELSE(
-			[AC_LANG_PROGRAM([[#include <linux/bpf.h>]],
-					 [[union bpf_attr a = { .attach_flags = 0 };]])],
-			[st_cv_have_union_bpf_attr_attach_flags=yes],
-			[st_cv_have_union_bpf_attr_attach_flags=no])])
-	if test $st_cv_have_union_bpf_attr_attach_flags = yes; then
-		AC_DEFINE(HAVE_UNION_BPF_ATTR_ATTACH_FLAGS, [1],
-			  [Define to 1 if union bpf_attr.attach_flags initialization works])
-	fi
+	st_CHECK_UNION_BPF_ATTR([attach_flags])
+	st_CHECK_UNION_BPF_ATTR([bpf_fd])
+	st_CHECK_UNION_BPF_ATTR([flags])
+	st_CHECK_UNION_BPF_ATTR([inner_map_fd])
+	st_CHECK_UNION_BPF_ATTR([prog_flags])
 ])
 
+AC_CHECK_TYPES([struct br_port_msg],,, [#include <linux/if_bridge.h>])
+AC_CHECK_TYPES([struct dcbmsg],,, [#include <linux/dcbnl.h>])
+AC_CHECK_TYPES([struct ifaddrlblmsg],,, [#include <linux/if_addrlabel.h>])
+AC_CHECK_TYPES([struct netconfmsg],,, [#include <linux/netconf.h>])
+
+AC_CHECK_TYPES(m4_normalize([
+	struct rta_mfc_stats,
+	struct rtvia
+]),,, [#include <linux/rtnetlink.h>])
+
+AC_CHECK_MEMBERS([struct ndt_stats.ndts_table_fulls],,, [#include <linux/neighbour.h>])
+AC_CHECK_TYPES(m4_normalize([
+	struct ndt_config,
+	struct ndt_stats
+]),,, [#include <linux/neighbour.h>])
+
+AC_CHECK_TYPES(m4_normalize([
+	struct ifla_bridge_id,
+	struct ifla_port_vsi,
+	struct rtnl_link_stats64
+]),,, [#include <linux/if_link.h>])
+AC_CHECK_MEMBERS(m4_normalize([
+	struct rtnl_link_stats.rx_nohandler,
+	struct rtnl_link_stats64.rx_nohandler
+]),,, [#include <linux/if_link.h>])
+
+AC_CHECK_TYPES([struct fib_rule_uid_range],,, [#include <linux/fib_rules.h>])
+
 AC_CHECK_TYPES([struct statfs], [
-	AC_CHECK_MEMBERS([struct statfs.f_frsize],,, [#include <linux/types.h>
-#include <asm/statfs.h>])
-	AC_CHECK_MEMBERS([struct statfs.f_flags],,, [#include <linux/types.h>
-#include <asm/statfs.h>])
-	AC_CHECK_MEMBERS([struct statfs.f_fsid.val],,, [#include <linux/types.h>
-#include <asm/statfs.h>])
-	AC_CHECK_MEMBERS([struct statfs.f_fsid.__val],,, [#include <linux/types.h>
+	AC_CHECK_MEMBERS(m4_normalize([
+		struct statfs.f_frsize,
+		struct statfs.f_flags,
+		struct statfs.f_fsid.val,
+		struct statfs.f_fsid.__val
+	]),,, [#include <linux/types.h>
 #include <asm/statfs.h>])
 ],, [#include <linux/types.h>
 #include <asm/statfs.h>])
 
 AC_CHECK_TYPES([struct statfs64], [
-	AC_CHECK_MEMBERS([struct statfs64.f_frsize],,, [#include <linux/types.h>
-#include <asm/statfs.h>])
-	AC_CHECK_MEMBERS([struct statfs64.f_flags],,, [#include <linux/types.h>
-#include <asm/statfs.h>])
-	AC_CHECK_MEMBERS([struct statfs64.f_fsid.val],,, [#include <linux/types.h>
-#include <asm/statfs.h>])
-	AC_CHECK_MEMBERS([struct statfs64.f_fsid.__val],,, [#include <linux/types.h>
+	AC_CHECK_MEMBERS(m4_normalize([
+		struct statfs64.f_frsize,
+		struct statfs64.f_flags,
+		struct statfs64.f_fsid.val,
+		struct statfs64.f_fsid.__val
+	]),,, [#include <linux/types.h>
 #include <asm/statfs.h>])
 ],, [#include <linux/types.h>
 #include <asm/statfs.h>])
@@ -835,6 +853,7 @@
 		 tests/Makefile
 		 tests-m32/Makefile
 		 tests-mx32/Makefile
+		 strace.1
 		 strace.spec
 		 debian/changelog])
 AC_OUTPUT
diff --git a/debian/changelog b/debian/changelog
index 25dcc0f..f7b03e9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,14 @@
-strace (4.18-1) experimental; urgency=low
+strace (4.19-1) experimental; urgency=low
 
-  * strace 4.18 snapshot.
+  * strace 4.19 snapshot.
 
- -- Strace <strace-devel@lists.sourceforge.net>  Wed, 05 Jul 2017 07:35:28 +0000
+ -- Strace <strace-devel@lists.sourceforge.net>  Tue, 05 Sep 2017 12:15:20 +0000
+
+strace (4.18-1) unstable; urgency=medium
+
+  * New upstream version.
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Wed, 05 Jul 2017 07:08:09 +0000
 
 strace (4.17-1) unstable; urgency=medium
 
diff --git a/debian/changelog.in b/debian/changelog.in
index 1b28572..a29097a 100644
--- a/debian/changelog.in
+++ b/debian/changelog.in
@@ -4,6 +4,12 @@
 
  -- Strace <@PACKAGE_BUGREPORT@>  @DEB_CHANGELOGTIME@
 
+strace (4.18-1) unstable; urgency=medium
+
+  * New upstream version.
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Wed, 05 Jul 2017 07:08:09 +0000
+
 strace (4.17-1) unstable; urgency=medium
 
   * New upstream version.
diff --git a/defs.h b/defs.h
index b3a315f..34261f2 100644
--- a/defs.h
+++ b/defs.h
@@ -53,11 +53,15 @@
 #include <time.h>
 #include <sys/time.h>
 
-#include "kernel_types.h"
+#include "error_prints.h"
 #include "gcc_compat.h"
+#include "kernel_types.h"
 #include "macros.h"
 #include "mpers_type.h"
+#include "string_to_uint.h"
+#include "supported_personalities.h"
 #include "sysent.h"
+#include "xmalloc.h"
 
 #ifndef HAVE_STRERROR
 const char *strerror(int);
@@ -71,11 +75,6 @@
 extern char *stpcpy(char *dst, const char *src);
 #endif
 
-#ifndef offsetofend
-# define offsetofend(type, member) \
-	(offsetof(type, member) + sizeof(((type *)NULL)->member))
-#endif
-
 /* macros */
 #ifndef MAX
 # define MAX(a, b)		(((a) > (b)) ? (a) : (b))
@@ -139,27 +138,6 @@
 # define ERESTART_RESTARTBLOCK 516
 #endif
 
-#if defined X86_64
-# define SUPPORTED_PERSONALITIES 3
-# define PERSONALITY2_WORDSIZE  4
-# define PERSONALITY2_KLONGSIZE PERSONALITY0_KLONGSIZE
-#elif defined AARCH64 \
-   || defined POWERPC64 \
-   || defined RISCV \
-   || defined SPARC64 \
-   || defined TILE \
-   || defined X32
-# define SUPPORTED_PERSONALITIES 2
-#else
-# define SUPPORTED_PERSONALITIES 1
-#endif
-
-#if defined TILE && defined __tilepro__
-# define DEFAULT_PERSONALITY 1
-#else
-# define DEFAULT_PERSONALITY 0
-#endif
-
 #define PERSONALITY0_WORDSIZE  SIZEOF_LONG
 #define PERSONALITY0_KLONGSIZE SIZEOF_KERNEL_LONG_T
 #define PERSONALITY0_INCLUDE_PRINTERS_DECLS "native_printer_decls.h"
@@ -170,6 +148,11 @@
 # define PERSONALITY1_KLONGSIZE PERSONALITY1_WORDSIZE
 #endif
 
+#if SUPPORTED_PERSONALITIES > 2
+# define PERSONALITY2_WORDSIZE  4
+# define PERSONALITY2_KLONGSIZE PERSONALITY0_KLONGSIZE
+#endif
+
 #if SUPPORTED_PERSONALITIES > 1 && defined HAVE_M32_MPERS
 # define PERSONALITY1_INCLUDE_PRINTERS_DECLS "m32_printer_decls.h"
 # define PERSONALITY1_INCLUDE_PRINTERS_DEFS "m32_printer_defs.h"
@@ -197,15 +180,22 @@
 	unsigned int code;
 } struct_ioctlent;
 
-struct inject_opts {
-	uint16_t first;
-	uint16_t step;
+#define INJECT_F_SIGNAL 1
+#define INJECT_F_RETVAL 2
+
+struct inject_data {
+	uint16_t flags;
 	uint16_t signo;
 	int rval;
 };
 
+struct inject_opts {
+	uint16_t first;
+	uint16_t step;
+	struct inject_data data;
+};
+
 #define MAX_ERRNO_VALUE			4095
-#define INJECT_OPTS_RVAL_DEFAULT	(-(MAX_ERRNO_VALUE + 1))
 
 /* Trace Control Block */
 struct tcb {
@@ -270,38 +260,47 @@
 #define QUAL_VERBOSE	0x004	/* decode the structures of this syscall */
 #define QUAL_RAW	0x008	/* print all args in hex for this syscall */
 #define QUAL_INJECT	0x010	/* tamper with this system call on purpose */
-#define QUAL_SIGNAL	0x100	/* report events with this signal */
-#define QUAL_READ	0x200	/* dump data read from this file descriptor */
-#define QUAL_WRITE	0x400	/* dump data written to this file descriptor */
 
 #define DEFAULT_QUAL_FLAGS (QUAL_TRACE | QUAL_ABBREV | QUAL_VERBOSE)
 
 #define entering(tcp)	(!((tcp)->flags & TCB_INSYSCALL))
 #define exiting(tcp)	((tcp)->flags & TCB_INSYSCALL)
 #define syserror(tcp)	((tcp)->u_error != 0)
+#define traced(tcp)	((tcp)->qual_flg & QUAL_TRACE)
 #define verbose(tcp)	((tcp)->qual_flg & QUAL_VERBOSE)
 #define abbrev(tcp)	((tcp)->qual_flg & QUAL_ABBREV)
+#define raw(tcp)	((tcp)->qual_flg & QUAL_RAW)
+#define inject(tcp)	((tcp)->qual_flg & QUAL_INJECT)
 #define filtered(tcp)	((tcp)->flags & TCB_FILTERED)
 #define hide_log(tcp)	((tcp)->flags & TCB_HIDE_LOG)
 
 #include "xlat.h"
 
 extern const struct xlat addrfams[];
+extern const struct xlat arp_hardware_types[];
 extern const struct xlat at_flags[];
 extern const struct xlat clocknames[];
 extern const struct xlat dirent_types[];
 extern const struct xlat ethernet_protocols[];
 extern const struct xlat evdev_abs[];
+extern const struct xlat iffflags[];
 extern const struct xlat inet_protocols[];
+extern const struct xlat ip_type_of_services[];
 extern const struct xlat msg_flags[];
 extern const struct xlat netlink_protocols[];
+extern const struct xlat nl_route_types[];
 extern const struct xlat open_access_modes[];
 extern const struct xlat open_mode_flags[];
 extern const struct xlat resource_flags[];
+extern const struct xlat routing_scopes[];
+extern const struct xlat routing_table_ids[];
+extern const struct xlat routing_types[];
 extern const struct xlat setns_types[];
 extern const struct xlat sg_io_info[];
 extern const struct xlat socketlayers[];
 extern const struct xlat socktypes[];
+extern const struct xlat tcp_state_flags[];
+extern const struct xlat tcp_states[];
 extern const struct xlat whence_codes[];
 
 /* Format of syscall return values */
@@ -316,6 +315,8 @@
 #define RVAL_NONE	040	/* Print nothing */
 
 #define RVAL_DECODED	0100	/* syscall decoding finished */
+#define RVAL_IOCTL_DECODED 0200	/* ioctl sub-parser successfully decoded
+				   the argument */
 
 #define IOCTL_NUMBER_UNKNOWN 0
 #define IOCTL_NUMBER_HANDLED 1
@@ -370,8 +371,11 @@
 extern bool not_failing_only;
 extern unsigned int show_fd_path;
 /* are we filtering traces based on paths? */
-extern const char **paths_selected;
-#define tracing_paths (paths_selected != NULL)
+extern struct path_set {
+	const char **paths_selected;
+	unsigned int num_selected;
+} global_path_set;
+#define tracing_paths (global_path_set.num_selected != 0)
 extern unsigned xflag;
 extern unsigned followfork;
 #ifdef USE_LIBUNWIND
@@ -384,23 +388,6 @@
 #undef KERNEL_VERSION
 #define KERNEL_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
 
-void error_msg(const char *fmt, ...) ATTRIBUTE_FORMAT((printf, 1, 2));
-void perror_msg(const char *fmt, ...) ATTRIBUTE_FORMAT((printf, 1, 2));
-void error_msg_and_die(const char *fmt, ...)
-	ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
-void error_msg_and_help(const char *fmt, ...)
-	ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
-void perror_msg_and_die(const char *fmt, ...)
-	ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
-
-void *xmalloc(size_t size) ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((1));
-void *xcalloc(size_t nmemb, size_t size)
-	ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((1, 2));
-void *xreallocarray(void *ptr, size_t nmemb, size_t size)
-	ATTRIBUTE_ALLOC_SIZE((2, 3));
-char *xstrdup(const char *str) ATTRIBUTE_MALLOC;
-char *xstrndup(const char *str, size_t n) ATTRIBUTE_MALLOC;
-
 extern int read_int_from_file(const char *, int *);
 
 extern void set_sortby(const char *);
@@ -497,8 +484,12 @@
 #endif
 
 extern const char *signame(const int);
-extern void pathtrace_select(const char *);
-extern int pathtrace_match(struct tcb *);
+extern void pathtrace_select_set(const char *, struct path_set *);
+extern bool pathtrace_match_set(struct tcb *, struct path_set *);
+#define pathtrace_select(tcp)	\
+	pathtrace_select_set(tcp, &global_path_set)
+#define pathtrace_match(tcp)	\
+	pathtrace_match_set(tcp, &global_path_set)
 extern int getfdpath(struct tcb *, int, char *, unsigned);
 extern unsigned long getfdinode(struct tcb *, int);
 extern enum sock_proto getfdproto(struct tcb *, int);
@@ -515,15 +506,6 @@
 const struct xlat *genl_families_xlat(void);
 
 extern unsigned long get_pagesize(void);
-extern int
-string_to_uint_ex(const char *str, char **endptr,
-		  unsigned int max_val, const char *accepted_ending);
-extern int string_to_uint(const char *str);
-static inline int
-string_to_uint_upto(const char *const str, unsigned int max_val)
-{
-	return string_to_uint_ex(str, NULL, max_val, NULL);
-}
 extern int next_set_bit(const void *bit_array, unsigned cur_bit, unsigned size_bits);
 
 /*
@@ -547,6 +529,7 @@
 
 extern int string_quote(const char *, char *, unsigned int, unsigned int);
 extern int print_quoted_string(const char *, unsigned int, unsigned int);
+extern int print_quoted_cstring(const char *, unsigned int);
 
 /* a refers to the lower numbered u_arg,
  * b refers to the higher numbered u_arg
@@ -611,9 +594,12 @@
 #define TIMESPEC_TEXT_BUFSIZE \
 		(sizeof(long long) * 3 * 2 + sizeof("{tv_sec=-, tv_nsec=}"))
 extern void printfd(struct tcb *, int);
-extern void print_sockaddr(struct tcb *, const void *sa, int len);
+extern void print_sockaddr(const void *sa, int len);
 extern bool
 print_inet_addr(int af, const void *addr, unsigned int len, const char *var_name);
+extern bool
+decode_inet_addr(struct tcb *, kernel_ulong_t addr,
+		 unsigned int len, int family, const char *var_name);
 extern const char *get_sockaddr_by_inode(struct tcb *, int fd, unsigned long inode);
 extern bool print_sockaddr_by_inode(struct tcb *, int fd, unsigned long inode);
 extern void print_dirfd(struct tcb *, int);
@@ -644,15 +630,22 @@
 extern const char *sprint_open_modes(unsigned int);
 
 extern void
-print_seccomp_filter(struct tcb *, kernel_ulong_t addr);
+decode_seccomp_fprog(struct tcb *, kernel_ulong_t addr);
 
 extern void
 print_seccomp_fprog(struct tcb *, kernel_ulong_t addr, unsigned short len);
 
+extern void
+decode_sock_fprog(struct tcb *, kernel_ulong_t addr);
+
+extern void
+print_sock_fprog(struct tcb *, kernel_ulong_t addr, unsigned short len);
+
 struct strace_stat;
 extern void print_struct_stat(struct tcb *, const struct strace_stat *const st);
 
 struct strace_statfs;
+struct strace_keyctl_kdf_params;
 
 extern void
 print_struct_statfs(struct tcb *, kernel_ulong_t addr);
@@ -662,18 +655,14 @@
 
 extern void print_ifindex(unsigned int);
 
-struct number_set;
-extern struct number_set read_set;
-extern struct number_set write_set;
-extern struct number_set signal_set;
-
-extern bool is_number_in_set(unsigned int number, const struct number_set *);
 extern void qualify(const char *);
 extern unsigned int qual_flags(const unsigned int);
 
 #define DECL_IOCTL(name)						\
 extern int								\
-name ## _ioctl(struct tcb *, unsigned int request, kernel_ulong_t arg)
+name ## _ioctl(struct tcb *, unsigned int request, kernel_ulong_t arg)	\
+/* End of DECL_IOCTL definition. */
+
 DECL_IOCTL(dm);
 DECL_IOCTL(file);
 DECL_IOCTL(fs_x);
@@ -690,12 +679,17 @@
 struct nlmsghdr;
 
 typedef bool (*netlink_decoder_t)(struct tcb *, const struct nlmsghdr *,
-				  kernel_ulong_t addr, kernel_ulong_t len);
+				  kernel_ulong_t addr, unsigned int len);
 
 #define DECL_NETLINK(name)						\
 extern bool								\
 decode_netlink_ ## name(struct tcb *, const struct nlmsghdr *,		\
-			kernel_ulong_t addr, kernel_ulong_t len)
+			kernel_ulong_t addr, unsigned int len)		\
+/* End of DECL_NETLINK definition. */
+
+DECL_NETLINK(crypto);
+DECL_NETLINK(route);
+DECL_NETLINK(selinux);
 DECL_NETLINK(sock_diag);
 
 extern int tv_nz(const struct timeval *);
@@ -832,7 +826,9 @@
 #define DECL_PRINTNUM(name)						\
 extern bool								\
 printnum_ ## name(struct tcb *, kernel_ulong_t addr, const char *fmt)	\
-	ATTRIBUTE_FORMAT((printf, 3, 0))
+	ATTRIBUTE_FORMAT((printf, 3, 0))				\
+/* End of DECL_PRINTNUM definition. */
+
 DECL_PRINTNUM(short);
 DECL_PRINTNUM(int);
 DECL_PRINTNUM(int64);
@@ -840,7 +836,9 @@
 
 #define DECL_PRINTNUM_ADDR(name)					\
 extern bool								\
-printnum_addr_ ## name(struct tcb *, kernel_ulong_t addr)
+printnum_addr_ ## name(struct tcb *, kernel_ulong_t addr)		\
+/* End of DECL_PRINTNUM_ADDR definition. */
+
 DECL_PRINTNUM_ADDR(int);
 DECL_PRINTNUM_ADDR(int64);
 #undef DECL_PRINTNUM_ADDR
@@ -889,7 +887,9 @@
 #define DECL_PRINTPAIR(name)						\
 extern bool								\
 printpair_ ## name(struct tcb *, kernel_ulong_t addr, const char *fmt)	\
-	ATTRIBUTE_FORMAT((printf, 3, 0))
+	ATTRIBUTE_FORMAT((printf, 3, 0))				\
+/* End of DECL_PRINTPAIR definition. */
+
 DECL_PRINTPAIR(int);
 DECL_PRINTPAIR(int64);
 #undef DECL_PRINTPAIR
@@ -1011,34 +1011,4 @@
 
 #define SYS_FUNC(syscall_name) int SYS_FUNC_NAME(sys_ ## syscall_name)(struct tcb *tcp)
 
-#if SIZEOF_KERNEL_LONG_T > SIZEOF_LONG
-# define PRI_kl "ll"
-#else
-# define PRI_kl "l"
-#endif
-
-#define PRI_kld PRI_kl"d"
-#define PRI_klu PRI_kl"u"
-#define PRI_klx PRI_kl"x"
-
-/*
- * The kernel used to define 64-bit types on 64-bit systems on a per-arch
- * basis.  Some architectures would use unsigned long and others would use
- * unsigned long long.  These types were exported as part of the
- * kernel-userspace ABI and now must be maintained forever.  This matches
- * what the kernel exports for each architecture so we don't need to cast
- * every printing of __u64 or __s64 to stdint types.
- */
-#if SIZEOF_LONG == 4
-# define PRI__64 "ll"
-#elif defined ALPHA || defined IA64 || defined MIPS || defined POWERPC
-# define PRI__64 "l"
-#else
-# define PRI__64 "ll"
-#endif
-
-#define PRI__d64 PRI__64"d"
-#define PRI__u64 PRI__64"u"
-#define PRI__x64 PRI__64"x"
-
 #endif /* !STRACE_DEFS_H */
diff --git a/dirent.c b/dirent.c
index 71963ec..2ab626b 100644
--- a/dirent.c
+++ b/dirent.c
@@ -132,10 +132,7 @@
 				zero_extend_signed_to_ull(d->d_off),
 				d->d_reclen);
 
-			if (print_quoted_string(d->d_name, d_name_len,
-						QUOTE_0_TERMINATED) > 0) {
-				tprints("...");
-			}
+			print_quoted_cstring(d->d_name, d_name_len);
 
 			tprints(", d_type=");
 			if (oob)
diff --git a/dirent64.c b/dirent64.c
index d54cb9e..4172d64 100644
--- a/dirent64.c
+++ b/dirent64.c
@@ -105,10 +105,7 @@
 			printxval(dirent_types, d->d_type, "DT_???");
 
 			tprints(", d_name=");
-			if (print_quoted_string(d->d_name, d_name_len,
-						QUOTE_0_TERMINATED) > 0) {
-				tprints("...");
-			}
+			print_quoted_cstring(d->d_name, d_name_len);
 
 			tprints("}");
 		}
diff --git a/dm.c b/dm.c
index 2413626..55efd92 100644
--- a/dm.c
+++ b/dm.c
@@ -35,6 +35,7 @@
 
 #ifdef HAVE_LINUX_DM_IOCTL_H
 
+# include "print_fields.h"
 # include <linux/dm-ioctl.h>
 # include <linux/ioctl.h>
 
@@ -62,20 +63,15 @@
 	case DM_LIST_VERSIONS:
 		break;
 	default:
-		if (ioc->dev) {
-			tprints(", dev=");
-			print_dev_t(ioc->dev);
-		}
-		if (ioc->name[0]) {
-			tprints(", name=");
-			print_quoted_string(ioc->name, DM_NAME_LEN,
-					    QUOTE_0_TERMINATED);
-		}
-		if (ioc->uuid[0]) {
-			tprints(", uuid=");
-			print_quoted_string(ioc->uuid, DM_UUID_LEN,
-					    QUOTE_0_TERMINATED);
-		}
+		if (ioc->dev)
+			PRINT_FIELD_DEV(", ", *ioc, dev);
+
+		if (ioc->name[0])
+			PRINT_FIELD_CSTRING(", ", *ioc, name);
+
+		if (ioc->uuid[0])
+			PRINT_FIELD_CSTRING(", ", *ioc, uuid);
+
 		break;
 	}
 }
@@ -87,8 +83,7 @@
 	if (entering(tcp)) {
 		switch (code) {
 		case DM_TABLE_LOAD:
-			tprintf(", target_count=%" PRIu32,
-				ioc->target_count);
+			PRINT_FIELD_U(", ", *ioc, target_count);
 			break;
 		case DM_DEV_SUSPEND:
 			if (ioc->flags & DM_SUSPEND_FLAG)
@@ -97,8 +92,7 @@
 		case DM_DEV_RENAME:
 		case DM_DEV_REMOVE:
 		case DM_DEV_WAIT:
-			tprintf(", event_nr=%" PRIu32,
-				ioc->event_nr);
+			PRINT_FIELD_U(", ", *ioc, event_nr);
 			break;
 		}
 	} else if (!syserror(tcp)) {
@@ -113,12 +107,9 @@
 		case DM_TABLE_DEPS:
 		case DM_TABLE_STATUS:
 		case DM_TARGET_MSG:
-			tprintf(", target_count=%" PRIu32,
-				ioc->target_count);
-			tprintf(", open_count=%" PRIu32,
-				ioc->open_count);
-			tprintf(", event_nr=%" PRIu32,
-				ioc->event_nr);
+			PRINT_FIELD_U(", ", *ioc, target_count);
+			PRINT_FIELD_U(", ", *ioc, open_count);
+			PRINT_FIELD_U(", ", *ioc, event_nr);
 			break;
 		}
 	}
@@ -129,8 +120,7 @@
 static void
 dm_decode_flags(const struct dm_ioctl *ioc)
 {
-	tprints(", flags=");
-	printflags(dm_flags, ioc->flags, "DM_???");
+	PRINT_FIELD_FLAGS(", ", *ioc, flags, dm_flags, "DM_???");
 }
 
 static void
@@ -171,15 +161,13 @@
 		if (umove_or_printaddr(tcp, addr + offset, &s))
 			break;
 
-		tprintf("{sector_start=%" PRI__u64 ", length=%" PRI__u64,
-			s.sector_start, s.length);
+		PRINT_FIELD_U("{", s, sector_start);
+		PRINT_FIELD_U(", ", s, length);
 
 		if (exiting(tcp))
-			tprintf(", status=%" PRId32, s.status);
+			PRINT_FIELD_D(", ", s, status);
 
-		tprints(", target_type=");
-		print_quoted_string(s.target_type, DM_MAX_TYPE_NAME,
-				    QUOTE_0_TERMINATED);
+		PRINT_FIELD_CSTRING(", ", s, target_type);
 
 		tprints(", string=");
 		printstr_ex(tcp, addr + offset_end, ioc->data_size - offset_end,
@@ -242,8 +230,9 @@
 	if (s.count > space)
 		goto misplaced;
 
-	tprintf("{count=%u, deps=", s.count);
+	PRINT_FIELD_U("{", s, count);
 
+	tprints(", deps=");
 	print_array(tcp, addr + offset_end, s.count, &dev_buf, sizeof(dev_buf),
 		    umoven_or_printaddr, dm_print_dev, NULL);
 
@@ -294,10 +283,8 @@
 		if (umove_or_printaddr(tcp, addr + offset, &s))
 			break;
 
-		tprints("{dev=");
-		print_dev_t(s.dev);
-
-		tprints("name=");
+		PRINT_FIELD_DEV("{", s, dev);
+		tprints(", name=");
 		printstr_ex(tcp, addr + offset_end, ioc->data_size - offset_end,
 			    QUOTE_0_TERMINATED);
 		tprints("}");
@@ -397,7 +384,8 @@
 		if (umove_or_printaddr(tcp, addr + offset, &s))
 			return;
 
-		tprintf("{sector=%" PRI__u64 ", message=", s.sector);
+		PRINT_FIELD_U("{", s, sector);
+		tprints(", message=");
 		printstr_ex(tcp, addr + offset_end, ioc->data_size - offset_end,
 			    QUOTE_0_TERMINATED);
 		tprints("}");
@@ -491,7 +479,7 @@
 	}
 
 	if (exiting(tcp) && syserror(tcp) && !ioc_changed)
-		return 1;
+		return RVAL_IOCTL_DECODED;
 
 	/*
 	 * device mapper code uses %d in some places and %u in another, but
@@ -508,7 +496,7 @@
 		goto skip;
 	}
 
-	tprintf(", data_size=%u", ioc->data_size);
+	PRINT_FIELD_U(", ", *ioc, data_size);
 
 	if (ioc->data_size < offsetof(struct dm_ioctl, data)) {
 		tprints_comment("data_size too small");
@@ -516,7 +504,7 @@
 	}
 
 	if (dm_ioctl_has_params(code))
-		tprintf(", data_start=%u", ioc->data_start);
+		PRINT_FIELD_U(", ", *ioc, data_start);
 
 	dm_decode_device(code, ioc);
 	dm_decode_values(tcp, code, ioc);
@@ -565,7 +553,7 @@
 
  skip:
 	tprints("}");
-	return 1;
+	return entering(tcp) ? 0 : RVAL_IOCTL_DECODED;
 }
 
 int
@@ -590,7 +578,7 @@
 	case DM_DEV_SET_GEOMETRY:
 		return dm_known_ioctl(tcp, code, arg);
 	default:
-		return 0;
+		return RVAL_DECODED;
 	}
 }
 
@@ -599,7 +587,7 @@
 int
 dm_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg)
 {
-	return 0;
+	return RVAL_DECODED;
 }
 
 # endif /* DM_VERSION_MAJOR == 4 */
diff --git a/error_prints.c b/error_prints.c
new file mode 100644
index 0000000..8519b92
--- /dev/null
+++ b/error_prints.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 1999-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <errno.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "error_prints.h"
+
+extern char *program_invocation_name;
+
+static void
+verror_msg(int err_no, const char *fmt, va_list p)
+{
+	char *msg;
+
+	fflush(NULL);
+
+	/* We want to print entire message with single fprintf to ensure
+	 * message integrity if stderr is shared with other programs.
+	 * Thus we use vasprintf + single fprintf.
+	 */
+	msg = NULL;
+	if (vasprintf(&msg, fmt, p) >= 0) {
+		if (err_no)
+			fprintf(stderr, "%s: %s: %s\n",
+				program_invocation_name, msg, strerror(err_no));
+		else
+			fprintf(stderr, "%s: %s\n",
+				program_invocation_name, msg);
+		free(msg);
+	} else {
+		/* malloc in vasprintf failed, try it without malloc */
+		fprintf(stderr, "%s: ", program_invocation_name);
+		vfprintf(stderr, fmt, p);
+		if (err_no)
+			fprintf(stderr, ": %s\n", strerror(err_no));
+		else
+			putc('\n', stderr);
+	}
+	/* We don't switch stderr to buffered, thus fprintf(stderr)
+	 * always flushes its output and this is not necessary: */
+	/* fflush(stderr); */
+}
+
+void
+error_msg(const char *fmt, ...)
+{
+	va_list p;
+	va_start(p, fmt);
+	verror_msg(0, fmt, p);
+	va_end(p);
+}
+
+void
+error_msg_and_die(const char *fmt, ...)
+{
+	va_list p;
+	va_start(p, fmt);
+	verror_msg(0, fmt, p);
+	die();
+}
+
+void
+error_msg_and_help(const char *fmt, ...)
+{
+	if (fmt != NULL) {
+		va_list p;
+		va_start(p, fmt);
+		verror_msg(0, fmt, p);
+	}
+	fprintf(stderr, "Try '%s -h' for more information.\n",
+		program_invocation_name);
+	die();
+}
+
+void
+perror_msg(const char *fmt, ...)
+{
+	va_list p;
+	va_start(p, fmt);
+	verror_msg(errno, fmt, p);
+	va_end(p);
+}
+
+void
+perror_msg_and_die(const char *fmt, ...)
+{
+	va_list p;
+	va_start(p, fmt);
+	verror_msg(errno, fmt, p);
+	die();
+}
diff --git a/error_prints.h b/error_prints.h
new file mode 100644
index 0000000..7ddcb50
--- /dev/null
+++ b/error_prints.h
@@ -0,0 +1,49 @@
+/*
+ * This file contains error printing functions.
+ * These functions can be used by various binaries included in the strace
+ * package.  Variable 'program_invocation_name' and function 'die()'
+ * have to be defined globally.
+ *
+ * Copyright (c) 2001-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_ERROR_PRINTS_H
+#define STRACE_ERROR_PRINTS_H
+
+#include "gcc_compat.h"
+
+void die(void) ATTRIBUTE_NORETURN;
+
+void error_msg(const char *fmt, ...) ATTRIBUTE_FORMAT((printf, 1, 2));
+void perror_msg(const char *fmt, ...) ATTRIBUTE_FORMAT((printf, 1, 2));
+void perror_msg_and_die(const char *fmt, ...)
+	ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
+void error_msg_and_help(const char *fmt, ...)
+	ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
+void error_msg_and_die(const char *fmt, ...)
+	ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
+
+#endif /* !STRACE_ERROR_PRINTS_H */
diff --git a/evdev.c b/evdev.c
index 983bf14..5642e0d 100644
--- a/evdev.c
+++ b/evdev.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2015 Etienne Gemsa <etienne.gemsa@lse.epita.fr>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -83,7 +84,7 @@
 	struct_ff_effect ffe;
 
 	if (umove_or_printaddr(tcp, arg, &ffe))
-		return 1;
+		return RVAL_IOCTL_DECODED;
 
 	tprints("{type=");
 	printxval(evdev_ff_types, ffe.type, "FF_???");
@@ -94,7 +95,7 @@
 
 	if (abbrev(tcp)) {
 		tprints("...}");
-		return 1;
+		return RVAL_IOCTL_DECODED;
 	}
 
 	tprintf("trigger={button=%" PRIu16
@@ -150,7 +151,7 @@
 
 	tprints("}");
 
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 static int
@@ -184,7 +185,7 @@
 		tprints("}");
 	}
 
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 static int
@@ -200,7 +201,7 @@
 		tprints("]");
 	}
 
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 # ifdef EVIOCGKEYCODE_V2
@@ -212,7 +213,7 @@
 	struct input_keymap_entry ike;
 
 	if (umove_or_printaddr(tcp, arg, &ike))
-		return 1;
+		return RVAL_IOCTL_DECODED;
 
 	tprintf("{flags=%" PRIu8
 		", len=%" PRIu8 ", ",
@@ -237,7 +238,7 @@
 
 	tprints("}");
 
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 # endif /* EVIOCGKEYCODE_V2 */
 
@@ -258,7 +259,7 @@
 			id.product,
 			id.version);
 
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 static int
@@ -276,7 +277,7 @@
 	char decoded_arg[size];
 
 	if (umove_or_printaddr(tcp, arg, &decoded_arg))
-		return 1;
+		return RVAL_IOCTL_DECODED;
 
 	tprints("[");
 
@@ -300,7 +301,7 @@
 
 	tprints("]");
 
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 # ifdef EVIOCGMTSLOTS
@@ -313,13 +314,13 @@
 	const size_t size = _IOC_SIZE(code) / sizeof(int);
 	if (!size) {
 		printaddr(arg);
-		return 1;
+		return RVAL_IOCTL_DECODED;
 	}
 
 	int buffer[size];
 
 	if (umove_or_printaddr(tcp, arg, &buffer))
-		return 1;
+		return RVAL_IOCTL_DECODED;
 
 	tprints("{code=");
 	printxval(evdev_mtslots, buffer[0], "ABS_MT_???");
@@ -332,7 +333,7 @@
 
 	tprints("]}");
 
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 # endif /* EVIOCGMTSLOTS */
 
@@ -342,7 +343,7 @@
 {
 	tprints(", ");
 	printpair_int(tcp, arg, "%u");
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 # endif /* EVIOCGREP || EVIOCSREP */
 
@@ -386,14 +387,14 @@
 		case EV_PWR:
 			tprints(", ");
 			printnum_int(tcp, arg, "%d");
-			return 1;
+			return RVAL_IOCTL_DECODED;
 		case EV_FF_STATUS:
 			return decode_bitset(tcp, arg, evdev_ff_status,
 					     FF_STATUS_MAX, "FF_STATUS_???");
 		default:
 			tprints(", ");
 			printaddr(arg);
-			return 1;
+			return RVAL_IOCTL_DECODED;
 	}
 }
 
@@ -406,11 +407,11 @@
 		case EVIOCGVERSION:
 			tprints(", ");
 			printnum_int(tcp, arg, "%#x");
-			return 1;
+			return RVAL_IOCTL_DECODED;
 		case EVIOCGEFFECTS:
 			tprints(", ");
 			printnum_int(tcp, arg, "%u");
-			return 1;
+			return RVAL_IOCTL_DECODED;
 		case EVIOCGID:
 			return getid_ioctl(tcp, arg);
 # ifdef EVIOCGREP
@@ -439,7 +440,7 @@
 				printaddr(arg);
 			else
 				printstrn(tcp, arg, tcp->u_rval);
-			return 1;
+			return RVAL_IOCTL_DECODED;
 # ifdef EVIOCGPROP
 		case _IOC_NR(EVIOCGPROP(0)):
 			return decode_bitset(tcp, arg, evdev_prop,
@@ -492,18 +493,18 @@
 			return ff_effect_ioctl(tcp, arg);
 		case EVIOCRMFF:
 			tprintf(", %d", (int) arg);
-			return 1;
+			return RVAL_IOCTL_DECODED;
 		case EVIOCGRAB:
 # ifdef EVIOCREVOKE
 		case EVIOCREVOKE:
 # endif
 			tprintf(", %" PRI_klu, arg);
-			return 1;
+			return RVAL_IOCTL_DECODED;
 # ifdef EVIOCSCLOCKID
 		case EVIOCSCLOCKID:
 			tprints(", ");
 			printnum_int(tcp, arg, "%u");
-			return 1;
+			return RVAL_IOCTL_DECODED;
 # endif
 	}
 
diff --git a/fetch_bpf_fprog.c b/fetch_bpf_fprog.c
new file mode 100644
index 0000000..e46ddf9
--- /dev/null
+++ b/fetch_bpf_fprog.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#include DEF_MPERS_TYPE(struct_sock_fprog)
+
+#include <linux/filter.h>
+typedef struct sock_fprog struct_sock_fprog;
+
+#include MPERS_DEFS
+#include "bpf_fprog.h"
+
+MPERS_PRINTER_DECL(unsigned int, get_sock_fprog_size, void)
+{
+	return sizeof(struct_sock_fprog);
+}
+
+MPERS_PRINTER_DECL(bool, fetch_bpf_fprog, struct tcb *const tcp,
+		   const kernel_ulong_t addr, void *const p)
+{
+	struct bpf_fprog *pfp = p;
+	struct_sock_fprog mfp;
+
+	if ((sizeof(*pfp) == sizeof(mfp))
+	    && (offsetof(struct bpf_fprog, filter) ==
+		offsetof(struct_sock_fprog, filter)))
+		return !umove_or_printaddr(tcp, addr, pfp);
+
+	if (umove_or_printaddr(tcp, addr, &mfp))
+		return false;
+
+	pfp->len = mfp.len;
+	pfp->filter =
+#ifndef IN_MPERS
+		(uintptr_t)
+#endif
+		mfp.filter;
+	return true;
+}
diff --git a/fetch_seccomp_fprog.c b/fetch_seccomp_fprog.c
deleted file mode 100644
index 0aedb20..0000000
--- a/fetch_seccomp_fprog.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#include DEF_MPERS_TYPE(seccomp_fprog_t)
-
-#include "seccomp_fprog.h"
-typedef struct seccomp_fprog seccomp_fprog_t;
-
-#include MPERS_DEFS
-
-MPERS_PRINTER_DECL(bool, fetch_seccomp_fprog, struct tcb *const tcp,
-		   const kernel_ulong_t addr, void *const p)
-{
-	struct seccomp_fprog *pfp = p;
-	seccomp_fprog_t mfp;
-
-	if (sizeof(*pfp) == sizeof(mfp))
-		return !umove_or_printaddr(tcp, addr, pfp);
-
-	if (umove_or_printaddr(tcp, addr, &mfp))
-		return false;
-
-	pfp->len = mfp.len;
-	pfp->filter = mfp.filter;
-	return true;
-}
diff --git a/fetch_struct_keyctl_kdf_params.c b/fetch_struct_keyctl_kdf_params.c
new file mode 100644
index 0000000..50fc9d1
--- /dev/null
+++ b/fetch_struct_keyctl_kdf_params.c
@@ -0,0 +1,34 @@
+#include "defs.h"
+
+#include DEF_MPERS_TYPE(struct_keyctl_kdf_params)
+
+#include "keyctl_kdf_params.h"
+typedef struct keyctl_kdf_params struct_keyctl_kdf_params;
+
+#include MPERS_DEFS
+
+MPERS_PRINTER_DECL(int, fetch_keyctl_kdf_params, struct tcb *const tcp,
+		   kernel_ulong_t addr, struct strace_keyctl_kdf_params *p)
+{
+	struct_keyctl_kdf_params kdf;
+	int ret;
+
+	if ((ret = umove(tcp, addr, &kdf)))
+		return ret;
+
+	p->hashname = (kernel_ulong_t)
+#ifndef IN_MPERS
+		(uintptr_t)
+#endif
+		kdf.hashname;
+	p->otherinfo = (kernel_ulong_t)
+#ifndef IN_MPERS
+		(uintptr_t)
+#endif
+		kdf.otherinfo;
+	p->otherinfolen = kdf.otherinfolen;
+
+	memcpy(p->__spare, kdf.__spare, sizeof(kdf.__spare));
+
+	return 0;
+}
diff --git a/fetch_struct_statfs.c b/fetch_struct_statfs.c
index 4fba0f7..568c158 100644
--- a/fetch_struct_statfs.c
+++ b/fetch_struct_statfs.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/file_ioctl.c b/file_ioctl.c
index cc2378f..51b88f1 100644
--- a/file_ioctl.c
+++ b/file_ioctl.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -245,5 +246,5 @@
 		return RVAL_DECODED;
 	};
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/filter.h b/filter.h
new file mode 100644
index 0000000..fab1812
--- /dev/null
+++ b/filter.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2017 Nikolay Marchuk <marchuk.nikolay.a@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_FILTER_H
+#define STRACE_FILTER_H
+
+struct number_set;
+typedef int (*string_to_uint_func)(const char *);
+
+void qualify_tokens(const char *str, struct number_set *set,
+		    string_to_uint_func func, const char *name);
+void qualify_syscall_tokens(const char *str, struct number_set *set,
+			    const char *name);
+
+#endif /* !STRACE_FILTER_H */
diff --git a/filter_qualify.c b/filter_qualify.c
new file mode 100644
index 0000000..5b0ef28
--- /dev/null
+++ b/filter_qualify.c
@@ -0,0 +1,373 @@
+/*
+ * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "nsig.h"
+#include "number_set.h"
+#include "filter.h"
+
+struct number_set *read_set;
+struct number_set *write_set;
+struct number_set *signal_set;
+
+static struct number_set *abbrev_set;
+static struct number_set *inject_set;
+static struct number_set *raw_set;
+static struct number_set *trace_set;
+static struct number_set *verbose_set;
+
+static int
+sigstr_to_uint(const char *s)
+{
+	int i;
+
+	if (*s >= '0' && *s <= '9')
+		return string_to_uint_upto(s, 255);
+
+	if (strncasecmp(s, "SIG", 3) == 0)
+		s += 3;
+
+	for (i = 0; i <= 255; ++i) {
+		const char *name = signame(i);
+
+		if (strncasecmp(name, "SIG", 3) != 0)
+			continue;
+
+		name += 3;
+
+		if (strcasecmp(name, s) != 0)
+			continue;
+
+		return i;
+	}
+
+	return -1;
+}
+
+static int
+find_errno_by_name(const char *name)
+{
+	unsigned int i;
+
+	for (i = 1; i < nerrnos; ++i) {
+		if (errnoent[i] && (strcasecmp(name, errnoent[i]) == 0))
+			return i;
+	}
+
+	return -1;
+}
+
+static bool
+parse_inject_token(const char *const token, struct inject_opts *const fopts,
+		   const bool fault_tokens_only)
+{
+	const char *val;
+	int intval;
+
+	if ((val = STR_STRIP_PREFIX(token, "when=")) != token) {
+		/*
+		 *	== 1+1
+		 * F	== F+0
+		 * F+	== F+1
+		 * F+S
+		 */
+		char *end;
+		intval = string_to_uint_ex(val, &end, 0xffff, "+");
+		if (intval < 1)
+			return false;
+
+		fopts->first = intval;
+
+		if (*end) {
+			val = end + 1;
+			if (*val) {
+				/* F+S */
+				intval = string_to_uint_upto(val, 0xffff);
+				if (intval < 1)
+					return false;
+				fopts->step = intval;
+			} else {
+				/* F+ == F+1 */
+				fopts->step = 1;
+			}
+		} else {
+			/* F == F+0 */
+			fopts->step = 0;
+		}
+	} else if ((val = STR_STRIP_PREFIX(token, "error=")) != token) {
+		if (fopts->data.flags & INJECT_F_RETVAL)
+			return false;
+		intval = string_to_uint_upto(val, MAX_ERRNO_VALUE);
+		if (intval < 0)
+			intval = find_errno_by_name(val);
+		if (intval < 1)
+			return false;
+		fopts->data.rval = -intval;
+		fopts->data.flags |= INJECT_F_RETVAL;
+	} else if (!fault_tokens_only
+		   && (val = STR_STRIP_PREFIX(token, "retval=")) != token) {
+		if (fopts->data.flags & INJECT_F_RETVAL)
+			return false;
+		intval = string_to_uint(val);
+		if (intval < 0)
+			return false;
+		fopts->data.rval = intval;
+		fopts->data.flags |= INJECT_F_RETVAL;
+	} else if (!fault_tokens_only
+		   && (val = STR_STRIP_PREFIX(token, "signal=")) != token) {
+		if (fopts->data.flags & INJECT_F_SIGNAL)
+			return false;
+		intval = sigstr_to_uint(val);
+		if (intval < 1 || intval > NSIG_BYTES * 8)
+			return false;
+		fopts->data.signo = intval;
+		fopts->data.flags |= INJECT_F_SIGNAL;
+	} else {
+		return false;
+	}
+
+	return true;
+}
+
+static char *
+parse_inject_expression(const char *const s, char **buf,
+			struct inject_opts *const fopts,
+			const bool fault_tokens_only)
+{
+	char *saveptr = NULL;
+	char *name = NULL;
+	char *token;
+
+	*buf = xstrdup(s);
+	for (token = strtok_r(*buf, ":", &saveptr); token;
+	     token = strtok_r(NULL, ":", &saveptr)) {
+		if (!name)
+			name = token;
+		else if (!parse_inject_token(token, fopts, fault_tokens_only))
+			goto parse_error;
+	}
+
+	if (name)
+		return name;
+
+parse_error:
+	free(*buf);
+	return *buf = NULL;
+}
+
+static void
+qualify_read(const char *const str)
+{
+	if (!read_set)
+		read_set = alloc_number_set_array(1);
+	qualify_tokens(str, read_set, string_to_uint, "descriptor");
+}
+
+static void
+qualify_write(const char *const str)
+{
+	if (!write_set)
+		write_set = alloc_number_set_array(1);
+	qualify_tokens(str, write_set, string_to_uint, "descriptor");
+}
+
+static void
+qualify_signals(const char *const str)
+{
+	if (!signal_set)
+		signal_set = alloc_number_set_array(1);
+	qualify_tokens(str, signal_set, sigstr_to_uint, "signal");
+}
+
+static void
+qualify_trace(const char *const str)
+{
+	if (!trace_set)
+		trace_set = alloc_number_set_array(SUPPORTED_PERSONALITIES);
+	qualify_syscall_tokens(str, trace_set, "system call");
+}
+
+static void
+qualify_abbrev(const char *const str)
+{
+	if (!abbrev_set)
+		abbrev_set = alloc_number_set_array(SUPPORTED_PERSONALITIES);
+	qualify_syscall_tokens(str, abbrev_set, "system call");
+}
+
+static void
+qualify_verbose(const char *const str)
+{
+	if (!verbose_set)
+		verbose_set = alloc_number_set_array(SUPPORTED_PERSONALITIES);
+	qualify_syscall_tokens(str, verbose_set, "system call");
+}
+
+static void
+qualify_raw(const char *const str)
+{
+	if (!raw_set)
+		raw_set = alloc_number_set_array(SUPPORTED_PERSONALITIES);
+	qualify_syscall_tokens(str, raw_set, "system call");
+}
+
+static void
+qualify_inject_common(const char *const str,
+		      const bool fault_tokens_only,
+		      const char *const description)
+{
+	struct inject_opts opts = {
+		.first = 1,
+		.step = 1
+	};
+	char *buf = NULL;
+	char *name = parse_inject_expression(str, &buf, &opts, fault_tokens_only);
+	if (!name) {
+		error_msg_and_die("invalid %s '%s'", description, str);
+	}
+
+	/* If neither of retval, error, or signal is specified, then ... */
+	if (!opts.data.flags) {
+		if (fault_tokens_only) {
+			/* in fault= syntax the default error code is ENOSYS. */
+			opts.data.rval = -ENOSYS;
+			opts.data.flags |= INJECT_F_RETVAL;
+		} else {
+			/* in inject= syntax this is not allowed. */
+			error_msg_and_die("invalid %s '%s'", description, str);
+		}
+	}
+
+	struct number_set *tmp_set =
+		alloc_number_set_array(SUPPORTED_PERSONALITIES);
+	qualify_syscall_tokens(name, tmp_set, description);
+
+	free(buf);
+
+	/*
+	 * Initialize inject_vec accourding to tmp_set.
+	 * Merge tmp_set into inject_set.
+	 */
+	unsigned int p;
+	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
+		if (number_set_array_is_empty(tmp_set, p))
+			continue;
+
+		if (!inject_set) {
+			inject_set =
+				alloc_number_set_array(SUPPORTED_PERSONALITIES);
+		}
+		if (!inject_vec[p]) {
+			inject_vec[p] = xcalloc(nsyscall_vec[p],
+					       sizeof(*inject_vec[p]));
+		}
+
+		unsigned int i;
+		for (i = 0; i < nsyscall_vec[p]; ++i) {
+			if (is_number_in_set_array(i, tmp_set, p)) {
+				add_number_to_set_array(i, inject_set, p);
+				inject_vec[p][i] = opts;
+			}
+		}
+	}
+
+	free_number_set_array(tmp_set, SUPPORTED_PERSONALITIES);
+}
+
+static void
+qualify_fault(const char *const str)
+{
+	qualify_inject_common(str, true, "fault argument");
+}
+
+static void
+qualify_inject(const char *const str)
+{
+	qualify_inject_common(str, false, "inject argument");
+}
+
+static const struct qual_options {
+	const char *name;
+	void (*qualify)(const char *);
+} qual_options[] = {
+	{ "trace",	qualify_trace	},
+	{ "t",		qualify_trace	},
+	{ "abbrev",	qualify_abbrev	},
+	{ "a",		qualify_abbrev	},
+	{ "verbose",	qualify_verbose	},
+	{ "v",		qualify_verbose	},
+	{ "raw",	qualify_raw	},
+	{ "x",		qualify_raw	},
+	{ "signal",	qualify_signals	},
+	{ "signals",	qualify_signals	},
+	{ "s",		qualify_signals	},
+	{ "read",	qualify_read	},
+	{ "reads",	qualify_read	},
+	{ "r",		qualify_read	},
+	{ "write",	qualify_write	},
+	{ "writes",	qualify_write	},
+	{ "w",		qualify_write	},
+	{ "fault",	qualify_fault	},
+	{ "inject",	qualify_inject	},
+};
+
+void
+qualify(const char *str)
+{
+	const struct qual_options *opt = qual_options;
+	unsigned int i;
+
+	for (i = 0; i < ARRAY_SIZE(qual_options); ++i) {
+		const char *name = qual_options[i].name;
+		const size_t len = strlen(name);
+		const char *val = str_strip_prefix_len(str, name, len);
+
+		if (val == str || *val != '=')
+			continue;
+		str = val + 1;
+		opt = &qual_options[i];
+		break;
+	}
+
+	opt->qualify(str);
+}
+
+unsigned int
+qual_flags(const unsigned int scno)
+{
+	return	(is_number_in_set_array(scno, trace_set, current_personality)
+		   ? QUAL_TRACE : 0)
+		| (is_number_in_set_array(scno, abbrev_set, current_personality)
+		   ? QUAL_ABBREV : 0)
+		| (is_number_in_set_array(scno, verbose_set, current_personality)
+		   ? QUAL_VERBOSE : 0)
+		| (is_number_in_set_array(scno, raw_set, current_personality)
+		   ? QUAL_RAW : 0)
+		| (is_number_in_set_array(scno, inject_set, current_personality)
+		   ? QUAL_INJECT : 0);
+}
diff --git a/fs_x_ioctl.c b/fs_x_ioctl.c
index 2fa30f5..18930fe 100644
--- a/fs_x_ioctl.c
+++ b/fs_x_ioctl.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -62,5 +63,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/hdio.c b/hdio.c
index 6e256d9..9db1d26 100644
--- a/hdio.c
+++ b/hdio.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
  * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -60,5 +61,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/ioctl.c b/ioctl.c
index 264c7c0..b61a5be 100644
--- a/ioctl.c
+++ b/ioctl.c
@@ -224,6 +224,33 @@
 	}
 }
 
+/**
+ * Decode arg parameter of the ioctl call.
+ *
+ * @return There are two flags of the return value important for the purposes of
+ *         processing by SYS_FUNC(ioctl):
+ *          - RVAL_IOCTL_DECODED: indicates that ioctl decoder code
+ *                                has printed arg parameter;
+ *          - RVAL_DECODED: indicates that decoding is done.
+ *         As a result, the following behaviour is expected:
+ *          - on entering:
+ *            - 0: decoding should be continued on exiting;
+ *            - RVAL_IOCTL_DECODED: decoding on exiting is not needed
+ *                                  and decoder has printed arg value;
+ *            - RVAL_DECODED: decoding on exiting is not needed
+ *                            and generic handler should print arg value.
+ *          - on exiting:
+ *            - 0: generic handler should print arg value;
+ *            - RVAL_IOCTL_DECODED: decoder has printed arg value.
+ *
+ *         Note that it makes no sense to return just RVAL_DECODED on exiting,
+ *         but, of course, it is not prohibited (for example, it may be useful
+ *         in cases where the return path is common on entering and on exiting
+ *         the syscall).
+ *
+ *         SYS_FUNC(ioctl) converts RVAL_IOCTL_DECODED flag to RVAL_DECODED,
+ *         and passes all other bits of ioctl_decode return value unchanged.
+ */
 static int
 ioctl_decode(struct tcb *tcp)
 {
@@ -319,16 +346,11 @@
 		ret = ioctl_decode(tcp) | RVAL_DECODED;
 	}
 
-	if (ret & RVAL_DECODED) {
-		ret &= ~RVAL_DECODED;
-		if (ret)
-			--ret;
-		else
-			tprintf(", %#" PRI_klx, tcp->u_arg[2]);
+	if (ret & RVAL_IOCTL_DECODED) {
+		ret &= ~RVAL_IOCTL_DECODED;
 		ret |= RVAL_DECODED;
-	} else {
-		if (ret)
-			--ret;
+	} else if (ret & RVAL_DECODED) {
+		tprintf(", %#" PRI_klx, tcp->u_arg[2]);
 	}
 
 	return ret;
diff --git a/ioctl_iocdef.h b/ioctl_iocdef.h
deleted file mode 100644
index adf7255..0000000
--- a/ioctl_iocdef.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#define _IOC_NONE 0U
-#define _IOC_READ 2U
-#define _IOC_WRITE 1U
-#define _IOC_SIZESHIFT ((0 +8)+8)
-#define _IOC_DIRSHIFT (((0 +8)+8)+14)
diff --git a/ioctl_redefs1.h b/ioctl_redefs1.h
deleted file mode 100644
index f5b4015..0000000
--- a/ioctl_redefs1.h
+++ /dev/null
@@ -1,1544 +0,0 @@
-#ifdef AGPIOC_ALLOCATE
-# undef AGPIOC_ALLOCATE
-# define AGPIOC_ALLOCATE 0xc0044106
-#endif
-#ifdef AGPIOC_BIND
-# undef AGPIOC_BIND
-# define AGPIOC_BIND 0x40044108
-#endif
-#ifdef AGPIOC_INFO
-# undef AGPIOC_INFO
-# define AGPIOC_INFO 0x80044100
-#endif
-#ifdef AGPIOC_PROTECT
-# undef AGPIOC_PROTECT
-# define AGPIOC_PROTECT 0x40044105
-#endif
-#ifdef AGPIOC_RESERVE
-# undef AGPIOC_RESERVE
-# define AGPIOC_RESERVE 0x40044104
-#endif
-#ifdef AGPIOC_SETUP
-# undef AGPIOC_SETUP
-# define AGPIOC_SETUP 0x40044103
-#endif
-#ifdef AGPIOC_UNBIND
-# undef AGPIOC_UNBIND
-# define AGPIOC_UNBIND 0x40044109
-#endif
-#ifdef ASHMEM_SET_PROT_MASK
-# undef ASHMEM_SET_PROT_MASK
-# define ASHMEM_SET_PROT_MASK 0x40047705
-#endif
-#ifdef ASHMEM_SET_SIZE
-# undef ASHMEM_SET_SIZE
-# define ASHMEM_SET_SIZE 0x40047703
-#endif
-#ifdef ATM_ADDADDR
-# undef ATM_ADDADDR
-# define ATM_ADDADDR 0x400c6188
-#endif
-#ifdef ATM_ADDLECSADDR
-# undef ATM_ADDLECSADDR
-# define ATM_ADDLECSADDR 0x400c618e
-#endif
-#ifdef ATM_ADDPARTY
-# undef ATM_ADDPARTY
-# define ATM_ADDPARTY 0x400861f4
-#endif
-#ifdef ATM_DELADDR
-# undef ATM_DELADDR
-# define ATM_DELADDR 0x400c6189
-#endif
-#ifdef ATM_DELLECSADDR
-# undef ATM_DELLECSADDR
-# define ATM_DELLECSADDR 0x400c618f
-#endif
-#ifdef ATM_GETADDR
-# undef ATM_GETADDR
-# define ATM_GETADDR 0x400c6186
-#endif
-#ifdef ATM_GETCIRANGE
-# undef ATM_GETCIRANGE
-# define ATM_GETCIRANGE 0x400c618a
-#endif
-#ifdef ATM_GETESI
-# undef ATM_GETESI
-# define ATM_GETESI 0x400c6185
-#endif
-#ifdef ATM_GETLECSADDR
-# undef ATM_GETLECSADDR
-# define ATM_GETLECSADDR 0x400c6190
-#endif
-#ifdef ATM_GETLINKRATE
-# undef ATM_GETLINKRATE
-# define ATM_GETLINKRATE 0x400c6181
-#endif
-#ifdef ATM_GETLOOP
-# undef ATM_GETLOOP
-# define ATM_GETLOOP 0x400c6152
-#endif
-#ifdef ATM_GETNAMES
-# undef ATM_GETNAMES
-# define ATM_GETNAMES 0x40086183
-#endif
-#ifdef ATM_GETSTAT
-# undef ATM_GETSTAT
-# define ATM_GETSTAT 0x400c6150
-#endif
-#ifdef ATM_GETSTATZ
-# undef ATM_GETSTATZ
-# define ATM_GETSTATZ 0x400c6151
-#endif
-#ifdef ATM_GETTYPE
-# undef ATM_GETTYPE
-# define ATM_GETTYPE 0x400c6184
-#endif
-#ifdef ATM_QUERYLOOP
-# undef ATM_QUERYLOOP
-# define ATM_QUERYLOOP 0x400c6154
-#endif
-#ifdef ATM_RSTADDR
-# undef ATM_RSTADDR
-# define ATM_RSTADDR 0x400c6187
-#endif
-#ifdef ATM_SETCIRANGE
-# undef ATM_SETCIRANGE
-# define ATM_SETCIRANGE 0x400c618b
-#endif
-#ifdef ATM_SETESI
-# undef ATM_SETESI
-# define ATM_SETESI 0x400c618c
-#endif
-#ifdef ATM_SETESIF
-# undef ATM_SETESIF
-# define ATM_SETESIF 0x400c618d
-#endif
-#ifdef ATM_SETLOOP
-# undef ATM_SETLOOP
-# define ATM_SETLOOP 0x400c6153
-#endif
-#ifdef AUTOFS_IOC_SETTIMEOUT
-# undef AUTOFS_IOC_SETTIMEOUT
-# define AUTOFS_IOC_SETTIMEOUT 0xc0049364
-#endif
-#ifdef BLKBSZGET
-# undef BLKBSZGET
-# define BLKBSZGET 0x80041270
-#endif
-#ifdef BLKBSZSET
-# undef BLKBSZSET
-# define BLKBSZSET 0x40041271
-#endif
-#ifdef BLKGETSIZE64
-# undef BLKGETSIZE64
-# define BLKGETSIZE64 0x80041272
-#endif
-#ifdef BLKTRACESETUP
-# undef BLKTRACESETUP
-# define BLKTRACESETUP 0xc0401273
-#endif
-#ifdef BR_ATTEMPT_ACQUIRE
-# undef BR_ATTEMPT_ACQUIRE
-# define BR_ATTEMPT_ACQUIRE 0x8014720b
-#endif
-#ifdef BTRFS_IOC_DEV_REPLACE
-# undef BTRFS_IOC_DEV_REPLACE
-# define BTRFS_IOC_DEV_REPLACE 0xca249435
-#endif
-#ifdef BTRFS_IOC_SEND
-# undef BTRFS_IOC_SEND
-# define BTRFS_IOC_SEND 0x40449426
-#endif
-#ifdef BTRFS_IOC_SET_RECEIVED_SUBVOL
-# undef BTRFS_IOC_SET_RECEIVED_SUBVOL
-# define BTRFS_IOC_SET_RECEIVED_SUBVOL 0xc0c09425
-#endif
-#ifdef CAPI_MANUFACTURER_CMD
-# undef CAPI_MANUFACTURER_CMD
-# define CAPI_MANUFACTURER_CMD 0xc0084320
-#endif
-#ifdef CCISS_BIG_PASSTHRU
-# undef CCISS_BIG_PASSTHRU
-# define CCISS_BIG_PASSTHRU 0xc0584212
-#endif
-#ifdef CCISS_PASSTHRU
-# undef CCISS_PASSTHRU
-# define CCISS_PASSTHRU 0xc054420b
-#endif
-#ifdef CHIOGSTATUS
-# undef CHIOGSTATUS
-# define CHIOGSTATUS 0x40086308
-#endif
-#ifdef CIOC_KERNEL_VERSION
-# undef CIOC_KERNEL_VERSION
-# define CIOC_KERNEL_VERSION 0xc004630a
-#endif
-#ifdef CM_IOCGATR
-# undef CM_IOCGATR
-# define CM_IOCGATR 0xc0046301
-#endif
-#ifdef CM_IOCGSTATUS
-# undef CM_IOCGSTATUS
-# define CM_IOCGSTATUS 0x80046300
-#endif
-#ifdef CM_IOCSPTS
-# undef CM_IOCSPTS
-# define CM_IOCSPTS 0x40046302
-#endif
-#ifdef CM_IOSDBGLVL
-# undef CM_IOSDBGLVL
-# define CM_IOSDBGLVL 0x400463fa
-#endif
-#ifdef DRM_IOCTL_ADD_BUFS
-# undef DRM_IOCTL_ADD_BUFS
-# define DRM_IOCTL_ADD_BUFS 0xc0186416
-#endif
-#ifdef DRM_IOCTL_ADD_MAP
-# undef DRM_IOCTL_ADD_MAP
-# define DRM_IOCTL_ADD_MAP 0xc0186415
-#endif
-#ifdef DRM_IOCTL_AGP_ALLOC
-# undef DRM_IOCTL_AGP_ALLOC
-# define DRM_IOCTL_AGP_ALLOC 0xc0106434
-#endif
-#ifdef DRM_IOCTL_AGP_BIND
-# undef DRM_IOCTL_AGP_BIND
-# define DRM_IOCTL_AGP_BIND 0x40086436
-#endif
-#ifdef DRM_IOCTL_AGP_ENABLE
-# undef DRM_IOCTL_AGP_ENABLE
-# define DRM_IOCTL_AGP_ENABLE 0x40046432
-#endif
-#ifdef DRM_IOCTL_AGP_FREE
-# undef DRM_IOCTL_AGP_FREE
-# define DRM_IOCTL_AGP_FREE 0x40106435
-#endif
-#ifdef DRM_IOCTL_AGP_INFO
-# undef DRM_IOCTL_AGP_INFO
-# define DRM_IOCTL_AGP_INFO 0x80206433
-#endif
-#ifdef DRM_IOCTL_AGP_UNBIND
-# undef DRM_IOCTL_AGP_UNBIND
-# define DRM_IOCTL_AGP_UNBIND 0x40086437
-#endif
-#ifdef DRM_IOCTL_AMDGPU_GEM_METADATA
-# undef DRM_IOCTL_AMDGPU_GEM_METADATA
-# define DRM_IOCTL_AMDGPU_GEM_METADATA 0xc11c6446
-#endif
-#ifdef DRM_IOCTL_DMA
-# undef DRM_IOCTL_DMA
-# define DRM_IOCTL_DMA 0xc0286429
-#endif
-#ifdef DRM_IOCTL_FREE_BUFS
-# undef DRM_IOCTL_FREE_BUFS
-# define DRM_IOCTL_FREE_BUFS 0x4008641a
-#endif
-#ifdef DRM_IOCTL_GET_CLIENT
-# undef DRM_IOCTL_GET_CLIENT
-# define DRM_IOCTL_GET_CLIENT 0xc0186405
-#endif
-#ifdef DRM_IOCTL_GET_MAP
-# undef DRM_IOCTL_GET_MAP
-# define DRM_IOCTL_GET_MAP 0xc0186404
-#endif
-#ifdef DRM_IOCTL_GET_SAREA_CTX
-# undef DRM_IOCTL_GET_SAREA_CTX
-# define DRM_IOCTL_GET_SAREA_CTX 0xc008641d
-#endif
-#ifdef DRM_IOCTL_GET_STATS
-# undef DRM_IOCTL_GET_STATS
-# define DRM_IOCTL_GET_STATS 0x807c6406
-#endif
-#ifdef DRM_IOCTL_GET_UNIQUE
-# undef DRM_IOCTL_GET_UNIQUE
-# define DRM_IOCTL_GET_UNIQUE 0xc0086401
-#endif
-#ifdef DRM_IOCTL_I810_COPY
-# undef DRM_IOCTL_I810_COPY
-# define DRM_IOCTL_I810_COPY 0x400c6447
-#endif
-#ifdef DRM_IOCTL_I810_GETBUF
-# undef DRM_IOCTL_I810_GETBUF
-# define DRM_IOCTL_I810_GETBUF 0xc0106445
-#endif
-#ifdef DRM_IOCTL_I810_MC
-# undef DRM_IOCTL_I810_MC
-# define DRM_IOCTL_I810_MC 0x4014644c
-#endif
-#ifdef DRM_IOCTL_I915_ALLOC
-# undef DRM_IOCTL_I915_ALLOC
-# define DRM_IOCTL_I915_ALLOC 0xc0106448
-#endif
-#ifdef DRM_IOCTL_I915_BATCHBUFFER
-# undef DRM_IOCTL_I915_BATCHBUFFER
-# define DRM_IOCTL_I915_BATCHBUFFER 0x40186443
-#endif
-#ifdef DRM_IOCTL_I915_CMDBUFFER
-# undef DRM_IOCTL_I915_CMDBUFFER
-# define DRM_IOCTL_I915_CMDBUFFER 0x4018644b
-#endif
-#ifdef DRM_IOCTL_I915_GETPARAM
-# undef DRM_IOCTL_I915_GETPARAM
-# define DRM_IOCTL_I915_GETPARAM 0xc0086446
-#endif
-#ifdef DRM_IOCTL_I915_IRQ_EMIT
-# undef DRM_IOCTL_I915_IRQ_EMIT
-# define DRM_IOCTL_I915_IRQ_EMIT 0xc0046444
-#endif
-#ifdef DRM_IOCTL_INFO_BUFS
-# undef DRM_IOCTL_INFO_BUFS
-# define DRM_IOCTL_INFO_BUFS 0xc0086418
-#endif
-#ifdef DRM_IOCTL_MAP_BUFS
-# undef DRM_IOCTL_MAP_BUFS
-# define DRM_IOCTL_MAP_BUFS 0xc00c6419
-#endif
-#ifdef DRM_IOCTL_MARK_BUFS
-# undef DRM_IOCTL_MARK_BUFS
-# define DRM_IOCTL_MARK_BUFS 0x40186417
-#endif
-#ifdef DRM_IOCTL_MGA_DMA_BOOTSTRAP
-# undef DRM_IOCTL_MGA_DMA_BOOTSTRAP
-# define DRM_IOCTL_MGA_DMA_BOOTSTRAP 0xc01c644c
-#endif
-#ifdef DRM_IOCTL_MGA_GETPARAM
-# undef DRM_IOCTL_MGA_GETPARAM
-# define DRM_IOCTL_MGA_GETPARAM 0xc0086449
-#endif
-#ifdef DRM_IOCTL_MGA_INIT
-# undef DRM_IOCTL_MGA_INIT
-# define DRM_IOCTL_MGA_INIT 0x405c6440
-#endif
-#ifdef DRM_IOCTL_MODE_ADDFB2
-# undef DRM_IOCTL_MODE_ADDFB2
-# define DRM_IOCTL_MODE_ADDFB2 0xc06464b8
-#endif
-#ifdef DRM_IOCTL_MODE_GETPLANERESOURCES
-# undef DRM_IOCTL_MODE_GETPLANERESOURCES
-# define DRM_IOCTL_MODE_GETPLANERESOURCES 0xc00c64b5
-#endif
-#ifdef DRM_IOCTL_MODE_OBJ_GETPROPERTIES
-# undef DRM_IOCTL_MODE_OBJ_GETPROPERTIES
-# define DRM_IOCTL_MODE_OBJ_GETPROPERTIES 0xc01c64b9
-#endif
-#ifdef DRM_IOCTL_MODE_OBJ_SETPROPERTY
-# undef DRM_IOCTL_MODE_OBJ_SETPROPERTY
-# define DRM_IOCTL_MODE_OBJ_SETPROPERTY 0xc01464ba
-#endif
-#ifdef DRM_IOCTL_MSM_GEM_SUBMIT
-# undef DRM_IOCTL_MSM_GEM_SUBMIT
-# define DRM_IOCTL_MSM_GEM_SUBMIT 0xc0246446
-#endif
-#ifdef DRM_IOCTL_R128_DEPTH
-# undef DRM_IOCTL_R128_DEPTH
-# define DRM_IOCTL_R128_DEPTH 0x4018644c
-#endif
-#ifdef DRM_IOCTL_R128_GETPARAM
-# undef DRM_IOCTL_R128_GETPARAM
-# define DRM_IOCTL_R128_GETPARAM 0xc0086452
-#endif
-#ifdef DRM_IOCTL_R128_INIT
-# undef DRM_IOCTL_R128_INIT
-# define DRM_IOCTL_R128_INIT 0x40586440
-#endif
-#ifdef DRM_IOCTL_R128_STIPPLE
-# undef DRM_IOCTL_R128_STIPPLE
-# define DRM_IOCTL_R128_STIPPLE 0x4004644d
-#endif
-#ifdef DRM_IOCTL_RADEON_ALLOC
-# undef DRM_IOCTL_RADEON_ALLOC
-# define DRM_IOCTL_RADEON_ALLOC 0xc0106453
-#endif
-#ifdef DRM_IOCTL_RADEON_CLEAR
-# undef DRM_IOCTL_RADEON_CLEAR
-# define DRM_IOCTL_RADEON_CLEAR 0x40186448
-#endif
-#ifdef DRM_IOCTL_RADEON_CMDBUF
-# undef DRM_IOCTL_RADEON_CMDBUF
-# define DRM_IOCTL_RADEON_CMDBUF 0x40106450
-#endif
-#ifdef DRM_IOCTL_RADEON_CP_INIT
-# undef DRM_IOCTL_RADEON_CP_INIT
-# define DRM_IOCTL_RADEON_CP_INIT 0x40546440
-#endif
-#ifdef DRM_IOCTL_RADEON_GEM_CREATE
-# undef DRM_IOCTL_RADEON_GEM_CREATE
-# define DRM_IOCTL_RADEON_GEM_CREATE 0xc01c645d
-#endif
-#ifdef DRM_IOCTL_RADEON_GETPARAM
-# undef DRM_IOCTL_RADEON_GETPARAM
-# define DRM_IOCTL_RADEON_GETPARAM 0xc0086451
-#endif
-#ifdef DRM_IOCTL_RADEON_IRQ_EMIT
-# undef DRM_IOCTL_RADEON_IRQ_EMIT
-# define DRM_IOCTL_RADEON_IRQ_EMIT 0xc0046456
-#endif
-#ifdef DRM_IOCTL_RADEON_SETPARAM
-# undef DRM_IOCTL_RADEON_SETPARAM
-# define DRM_IOCTL_RADEON_SETPARAM 0x400c6459
-#endif
-#ifdef DRM_IOCTL_RADEON_STIPPLE
-# undef DRM_IOCTL_RADEON_STIPPLE
-# define DRM_IOCTL_RADEON_STIPPLE 0x4004644c
-#endif
-#ifdef DRM_IOCTL_RADEON_TEXTURE
-# undef DRM_IOCTL_RADEON_TEXTURE
-# define DRM_IOCTL_RADEON_TEXTURE 0xc018644e
-#endif
-#ifdef DRM_IOCTL_RADEON_VERTEX2
-# undef DRM_IOCTL_RADEON_VERTEX2
-# define DRM_IOCTL_RADEON_VERTEX2 0x4018644f
-#endif
-#ifdef DRM_IOCTL_RES_CTX
-# undef DRM_IOCTL_RES_CTX
-# define DRM_IOCTL_RES_CTX 0xc0086426
-#endif
-#ifdef DRM_IOCTL_RM_MAP
-# undef DRM_IOCTL_RM_MAP
-# define DRM_IOCTL_RM_MAP 0x4018641b
-#endif
-#ifdef DRM_IOCTL_SAVAGE_BCI_CMDBUF
-# undef DRM_IOCTL_SAVAGE_BCI_CMDBUF
-# define DRM_IOCTL_SAVAGE_BCI_CMDBUF 0x40246441
-#endif
-#ifdef DRM_IOCTL_SAVAGE_BCI_INIT
-# undef DRM_IOCTL_SAVAGE_BCI_INIT
-# define DRM_IOCTL_SAVAGE_BCI_INIT 0x40506440
-#endif
-#ifdef DRM_IOCTL_SET_SAREA_CTX
-# undef DRM_IOCTL_SET_SAREA_CTX
-# define DRM_IOCTL_SET_SAREA_CTX 0x4008641c
-#endif
-#ifdef DRM_IOCTL_SET_UNIQUE
-# undef DRM_IOCTL_SET_UNIQUE
-# define DRM_IOCTL_SET_UNIQUE 0x40086410
-#endif
-#ifdef DRM_IOCTL_SG_ALLOC
-# undef DRM_IOCTL_SG_ALLOC
-# define DRM_IOCTL_SG_ALLOC 0xc0086438
-#endif
-#ifdef DRM_IOCTL_SG_FREE
-# undef DRM_IOCTL_SG_FREE
-# define DRM_IOCTL_SG_FREE 0x40086439
-#endif
-#ifdef DRM_IOCTL_SIS_AGP_ALLOC
-# undef DRM_IOCTL_SIS_AGP_ALLOC
-# define DRM_IOCTL_SIS_AGP_ALLOC 0xc0106454
-#endif
-#ifdef DRM_IOCTL_SIS_AGP_FREE
-# undef DRM_IOCTL_SIS_AGP_FREE
-# define DRM_IOCTL_SIS_AGP_FREE 0x40106455
-#endif
-#ifdef DRM_IOCTL_SIS_AGP_INIT
-# undef DRM_IOCTL_SIS_AGP_INIT
-# define DRM_IOCTL_SIS_AGP_INIT 0xc0086453
-#endif
-#ifdef DRM_IOCTL_SIS_FB_ALLOC
-# undef DRM_IOCTL_SIS_FB_ALLOC
-# define DRM_IOCTL_SIS_FB_ALLOC 0xc0106444
-#endif
-#ifdef DRM_IOCTL_SIS_FB_FREE
-# undef DRM_IOCTL_SIS_FB_FREE
-# define DRM_IOCTL_SIS_FB_FREE 0x40106445
-#endif
-#ifdef DRM_IOCTL_SIS_FB_INIT
-# undef DRM_IOCTL_SIS_FB_INIT
-# define DRM_IOCTL_SIS_FB_INIT 0x40086456
-#endif
-#ifdef DRM_IOCTL_UPDATE_DRAW
-# undef DRM_IOCTL_UPDATE_DRAW
-# define DRM_IOCTL_UPDATE_DRAW 0x4014643f
-#endif
-#ifdef DRM_IOCTL_VERSION
-# undef DRM_IOCTL_VERSION
-# define DRM_IOCTL_VERSION 0xc0246400
-#endif
-#ifdef DRM_IOCTL_VIA_ALLOCMEM
-# undef DRM_IOCTL_VIA_ALLOCMEM
-# define DRM_IOCTL_VIA_ALLOCMEM 0xc0146440
-#endif
-#ifdef DRM_IOCTL_VIA_CMDBUFFER
-# undef DRM_IOCTL_VIA_CMDBUFFER
-# define DRM_IOCTL_VIA_CMDBUFFER 0x40086448
-#endif
-#ifdef DRM_IOCTL_VIA_DMA_BLIT
-# undef DRM_IOCTL_VIA_DMA_BLIT
-# define DRM_IOCTL_VIA_DMA_BLIT 0x4028644e
-#endif
-#ifdef DRM_IOCTL_VIA_DMA_INIT
-# undef DRM_IOCTL_VIA_DMA_INIT
-# define DRM_IOCTL_VIA_DMA_INIT 0xc0106447
-#endif
-#ifdef DRM_IOCTL_VIA_FREEMEM
-# undef DRM_IOCTL_VIA_FREEMEM
-# define DRM_IOCTL_VIA_FREEMEM 0x40146441
-#endif
-#ifdef DRM_IOCTL_VIA_MAP_INIT
-# undef DRM_IOCTL_VIA_MAP_INIT
-# define DRM_IOCTL_VIA_MAP_INIT 0xc0146444
-#endif
-#ifdef DRM_IOCTL_VIA_PCICMD
-# undef DRM_IOCTL_VIA_PCICMD
-# define DRM_IOCTL_VIA_PCICMD 0x4008644a
-#endif
-#ifdef DRM_IOCTL_VIA_WAIT_IRQ
-# undef DRM_IOCTL_VIA_WAIT_IRQ
-# define DRM_IOCTL_VIA_WAIT_IRQ 0xc010644d
-#endif
-#ifdef DRM_IOCTL_WAIT_VBLANK
-# undef DRM_IOCTL_WAIT_VBLANK
-# define DRM_IOCTL_WAIT_VBLANK 0xc010643a
-#endif
-#ifdef ENI_MEMDUMP
-# undef ENI_MEMDUMP
-# define ENI_MEMDUMP 0x400c6160
-#endif
-#ifdef ENI_SETMULT
-# undef ENI_SETMULT
-# define ENI_SETMULT 0x400c6167
-#endif
-#ifdef EVIOCSFF
-# undef EVIOCSFF
-# define EVIOCSFF 0x402c4580
-#endif
-#ifdef FBIO_CURSOR
-# undef FBIO_CURSOR
-# define FBIO_CURSOR 0xc0484608
-#endif
-#ifdef FBIO_GETCONTROL2
-# undef FBIO_GETCONTROL2
-# define FBIO_GETCONTROL2 0x80044689
-#endif
-#ifdef FBIO_RADEON_GET_MIRROR
-# undef FBIO_RADEON_GET_MIRROR
-# define FBIO_RADEON_GET_MIRROR 0x80044003
-#endif
-#ifdef FBIO_RADEON_SET_MIRROR
-# undef FBIO_RADEON_SET_MIRROR
-# define FBIO_RADEON_SET_MIRROR 0x40044004
-#endif
-#ifdef FDDEFPRM
-# undef FDDEFPRM
-# define FDDEFPRM 0x401c0243
-#endif
-#ifdef FDGETDRVPRM
-# undef FDGETDRVPRM
-# define FDGETDRVPRM 0x80580211
-#endif
-#ifdef FDGETDRVSTAT
-# undef FDGETDRVSTAT
-# define FDGETDRVSTAT 0x80340212
-#endif
-#ifdef FDGETFDCSTAT
-# undef FDGETFDCSTAT
-# define FDGETFDCSTAT 0x80200215
-#endif
-#ifdef FDGETPRM
-# undef FDGETPRM
-# define FDGETPRM 0x801c0204
-#endif
-#ifdef FDPOLLDRVSTAT
-# undef FDPOLLDRVSTAT
-# define FDPOLLDRVSTAT 0x80340213
-#endif
-#ifdef FDSETDRVPRM
-# undef FDSETDRVPRM
-# define FDSETDRVPRM 0x40580290
-#endif
-#ifdef FDSETPRM
-# undef FDSETPRM
-# define FDSETPRM 0x401c0242
-#endif
-#ifdef FDWERRORGET
-# undef FDWERRORGET
-# define FDWERRORGET 0x80180217
-#endif
-#ifdef FE_GET_PROPERTY
-# undef FE_GET_PROPERTY
-# define FE_GET_PROPERTY 0x80086f53
-#endif
-#ifdef FE_SET_PROPERTY
-# undef FE_SET_PROPERTY
-# define FE_SET_PROPERTY 0x40086f52
-#endif
-#ifdef FS_IOC_GETFLAGS
-# undef FS_IOC_GETFLAGS
-# define FS_IOC_GETFLAGS 0x80046601
-#endif
-#ifdef FS_IOC_GETVERSION
-# undef FS_IOC_GETVERSION
-# define FS_IOC_GETVERSION 0x80047601
-#endif
-#ifdef FS_IOC_SETFLAGS
-# undef FS_IOC_SETFLAGS
-# define FS_IOC_SETFLAGS 0x40046602
-#endif
-#ifdef FS_IOC_SETVERSION
-# undef FS_IOC_SETVERSION
-# define FS_IOC_SETVERSION 0x40047602
-#endif
-#ifdef FW_CDEV_IOC_CREATE_ISO_CONTEXT
-# undef FW_CDEV_IOC_CREATE_ISO_CONTEXT
-# define FW_CDEV_IOC_CREATE_ISO_CONTEXT 0xc01c2308
-#endif
-#ifdef FW_CDEV_IOC_GET_CYCLE_TIMER
-# undef FW_CDEV_IOC_GET_CYCLE_TIMER
-# define FW_CDEV_IOC_GET_CYCLE_TIMER 0x800c230c
-#endif
-#ifdef FW_CDEV_IOC_GET_CYCLE_TIMER2
-# undef FW_CDEV_IOC_GET_CYCLE_TIMER2
-# define FW_CDEV_IOC_GET_CYCLE_TIMER2 0xc0142314
-#endif
-#ifdef FW_CDEV_IOC_GET_INFO
-# undef FW_CDEV_IOC_GET_INFO
-# define FW_CDEV_IOC_GET_INFO 0xc0242300
-#endif
-#ifdef FW_CDEV_IOC_SEND_BROADCAST_REQUEST
-# undef FW_CDEV_IOC_SEND_BROADCAST_REQUEST
-# define FW_CDEV_IOC_SEND_BROADCAST_REQUEST 0x40242312
-#endif
-#ifdef FW_CDEV_IOC_SEND_PHY_PACKET
-# undef FW_CDEV_IOC_SEND_PHY_PACKET
-# define FW_CDEV_IOC_SEND_PHY_PACKET 0xc0142315
-#endif
-#ifdef FW_CDEV_IOC_SEND_REQUEST
-# undef FW_CDEV_IOC_SEND_REQUEST
-# define FW_CDEV_IOC_SEND_REQUEST 0x40242301
-#endif
-#ifdef FW_CDEV_IOC_SEND_RESPONSE
-# undef FW_CDEV_IOC_SEND_RESPONSE
-# define FW_CDEV_IOC_SEND_RESPONSE 0x40142304
-#endif
-#ifdef FW_CDEV_IOC_SET_ISO_CHANNELS
-# undef FW_CDEV_IOC_SET_ISO_CHANNELS
-# define FW_CDEV_IOC_SET_ISO_CHANNELS 0x400c2317
-#endif
-#ifdef HE_GET_REG
-# undef HE_GET_REG
-# define HE_GET_REG 0x400c6160
-#endif
-#ifdef HFI1_IOCTL_ACK_EVENT
-# undef HFI1_IOCTL_ACK_EVENT
-# define HFI1_IOCTL_ACK_EVENT 0x40041bea
-#endif
-#ifdef HPET_INFO
-# undef HPET_INFO
-# define HPET_INFO 0x800c6803
-#endif
-#ifdef HPET_IRQFREQ
-# undef HPET_IRQFREQ
-# define HPET_IRQFREQ 0x40046806
-#endif
-#ifdef I2OHRTGET
-# undef I2OHRTGET
-# define I2OHRTGET 0xc00c6901
-#endif
-#ifdef I2OHTML
-# undef I2OHTML
-# define I2OHTML 0xc01c6909
-#endif
-#ifdef I2OLCTGET
-# undef I2OLCTGET
-# define I2OLCTGET 0xc00c6902
-#endif
-#ifdef I2OPARMGET
-# undef I2OPARMGET
-# define I2OPARMGET 0xc0186904
-#endif
-#ifdef I2OPARMSET
-# undef I2OPARMSET
-# define I2OPARMSET 0xc0186903
-#endif
-#ifdef I2OPASSTHRU
-# undef I2OPASSTHRU
-# define I2OPASSTHRU 0x8008690c
-#endif
-#ifdef I2OSWDEL
-# undef I2OSWDEL
-# define I2OSWDEL 0xc01c6907
-#endif
-#ifdef I2OSWDL
-# undef I2OSWDL
-# define I2OSWDL 0xc01c6905
-#endif
-#ifdef I2OSWUL
-# undef I2OSWUL
-# define I2OSWUL 0xc01c6906
-#endif
-#ifdef I8K_FN_STATUS
-# undef I8K_FN_STATUS
-# define I8K_FN_STATUS 0x80046983
-#endif
-#ifdef I8K_GET_FAN
-# undef I8K_GET_FAN
-# define I8K_GET_FAN 0xc0046986
-#endif
-#ifdef I8K_GET_SPEED
-# undef I8K_GET_SPEED
-# define I8K_GET_SPEED 0xc0046985
-#endif
-#ifdef I8K_GET_TEMP
-# undef I8K_GET_TEMP
-# define I8K_GET_TEMP 0x80046984
-#endif
-#ifdef I8K_POWER_STATUS
-# undef I8K_POWER_STATUS
-# define I8K_POWER_STATUS 0x80046982
-#endif
-#ifdef I8K_SET_FAN
-# undef I8K_SET_FAN
-# define I8K_SET_FAN 0xc0046987
-#endif
-#ifdef IDT77105_GETSTAT
-# undef IDT77105_GETSTAT
-# define IDT77105_GETSTAT 0x400c6132
-#endif
-#ifdef IDT77105_GETSTATZ
-# undef IDT77105_GETSTATZ
-# define IDT77105_GETSTATZ 0x400c6133
-#endif
-#ifdef IOCTL_GNTDEV_GRANT_COPY
-# undef IOCTL_GNTDEV_GRANT_COPY
-# define IOCTL_GNTDEV_GRANT_COPY 0x00084708
-#endif
-#ifdef ION_IOC_ALLOC
-# undef ION_IOC_ALLOC
-# define ION_IOC_ALLOC 0xc0144900
-#endif
-#ifdef ION_IOC_CUSTOM
-# undef ION_IOC_CUSTOM
-# define ION_IOC_CUSTOM 0xc0084906
-#endif
-#ifdef IOW_READ
-# undef IOW_READ
-# define IOW_READ 0x4004c002
-#endif
-#ifdef IOW_WRITE
-# undef IOW_WRITE
-# define IOW_WRITE 0x4004c001
-#endif
-#ifdef IPMICTL_RECEIVE_MSG
-# undef IPMICTL_RECEIVE_MSG
-# define IPMICTL_RECEIVE_MSG 0xc018690c
-#endif
-#ifdef IPMICTL_RECEIVE_MSG_TRUNC
-# undef IPMICTL_RECEIVE_MSG_TRUNC
-# define IPMICTL_RECEIVE_MSG_TRUNC 0xc018690b
-#endif
-#ifdef IPMICTL_SEND_COMMAND
-# undef IPMICTL_SEND_COMMAND
-# define IPMICTL_SEND_COMMAND 0x8014690d
-#endif
-#ifdef IPMICTL_SEND_COMMAND_SETTIME
-# undef IPMICTL_SEND_COMMAND_SETTIME
-# define IPMICTL_SEND_COMMAND_SETTIME 0x801c6915
-#endif
-#ifdef IVTVFB_IOC_DMA_FRAME
-# undef IVTVFB_IOC_DMA_FRAME
-# define IVTVFB_IOC_DMA_FRAME 0x400c56c0
-#endif
-#ifdef IVTV_IOC_DMA_FRAME
-# undef IVTV_IOC_DMA_FRAME
-# define IVTV_IOC_DMA_FRAME 0x403856c0
-#endif
-#ifdef IXJCTL_CID
-# undef IXJCTL_CID
-# define IXJCTL_CID 0x800471d4
-#endif
-#ifdef IXJCTL_CIDCW
-# undef IXJCTL_CIDCW
-# define IXJCTL_CIDCW 0x400471d9
-#endif
-#ifdef IXJCTL_DRYBUFFER_READ
-# undef IXJCTL_DRYBUFFER_READ
-# define IXJCTL_DRYBUFFER_READ 0x800471e6
-#endif
-#ifdef IXJCTL_FILTER_CADENCE
-# undef IXJCTL_FILTER_CADENCE
-# define IXJCTL_FILTER_CADENCE 0x400471d6
-#endif
-#ifdef IXJCTL_FRAMES_READ
-# undef IXJCTL_FRAMES_READ
-# define IXJCTL_FRAMES_READ 0x800471e2
-#endif
-#ifdef IXJCTL_FRAMES_WRITTEN
-# undef IXJCTL_FRAMES_WRITTEN
-# define IXJCTL_FRAMES_WRITTEN 0x800471e3
-#endif
-#ifdef IXJCTL_INIT_TONE
-# undef IXJCTL_INIT_TONE
-# define IXJCTL_INIT_TONE 0x400471c9
-#endif
-#ifdef IXJCTL_READ_WAIT
-# undef IXJCTL_READ_WAIT
-# define IXJCTL_READ_WAIT 0x800471e4
-#endif
-#ifdef IXJCTL_SET_FILTER
-# undef IXJCTL_SET_FILTER
-# define IXJCTL_SET_FILTER 0x400471c7
-#endif
-#ifdef IXJCTL_SET_FILTER_RAW
-# undef IXJCTL_SET_FILTER_RAW
-# define IXJCTL_SET_FILTER_RAW 0x400471dd
-#endif
-#ifdef IXJCTL_SIGCTL
-# undef IXJCTL_SIGCTL
-# define IXJCTL_SIGCTL 0x400471e9
-#endif
-#ifdef IXJCTL_TONE_CADENCE
-# undef IXJCTL_TONE_CADENCE
-# define IXJCTL_TONE_CADENCE 0x400471ca
-#endif
-#ifdef IXJCTL_VERSION
-# undef IXJCTL_VERSION
-# define IXJCTL_VERSION 0x800471da
-#endif
-#ifdef IXJCTL_WRITE_WAIT
-# undef IXJCTL_WRITE_WAIT
-# define IXJCTL_WRITE_WAIT 0x800471e5
-#endif
-#ifdef KCOV_INIT_TRACE
-# undef KCOV_INIT_TRACE
-# define KCOV_INIT_TRACE 0x80046301
-#endif
-#ifdef KVM_DIRTY_TLB
-# undef KVM_DIRTY_TLB
-# define KVM_DIRTY_TLB 0x400caeaa
-#endif
-#ifdef KVM_S390_STORE_STATUS
-# undef KVM_S390_STORE_STATUS
-# define KVM_S390_STORE_STATUS 0x4004ae95
-#endif
-#ifdef KVM_S390_VCPU_FAULT
-# undef KVM_S390_VCPU_FAULT
-# define KVM_S390_VCPU_FAULT 0x4004ae52
-#endif
-#ifdef MATROXFB_GET_ALL_OUTPUTS
-# undef MATROXFB_GET_ALL_OUTPUTS
-# define MATROXFB_GET_ALL_OUTPUTS 0x80046efb
-#endif
-#ifdef MATROXFB_GET_AVAILABLE_OUTPUTS
-# undef MATROXFB_GET_AVAILABLE_OUTPUTS
-# define MATROXFB_GET_AVAILABLE_OUTPUTS 0x80046ef9
-#endif
-#ifdef MATROXFB_GET_OUTPUT_CONNECTION
-# undef MATROXFB_GET_OUTPUT_CONNECTION
-# define MATROXFB_GET_OUTPUT_CONNECTION 0x80046ef8
-#endif
-#ifdef MATROXFB_GET_OUTPUT_MODE
-# undef MATROXFB_GET_OUTPUT_MODE
-# define MATROXFB_GET_OUTPUT_MODE 0xc0046efa
-#endif
-#ifdef MATROXFB_SET_OUTPUT_CONNECTION
-# undef MATROXFB_SET_OUTPUT_CONNECTION
-# define MATROXFB_SET_OUTPUT_CONNECTION 0x40046ef8
-#endif
-#ifdef MATROXFB_SET_OUTPUT_MODE
-# undef MATROXFB_SET_OUTPUT_MODE
-# define MATROXFB_SET_OUTPUT_MODE 0x40046efa
-#endif
-#ifdef MEDIA_IOC_ENUM_LINKS
-# undef MEDIA_IOC_ENUM_LINKS
-# define MEDIA_IOC_ENUM_LINKS 0xc01c7c02
-#endif
-#ifdef MEMREADOOB
-# undef MEMREADOOB
-# define MEMREADOOB 0xc00c4d04
-#endif
-#ifdef MEMWRITEOOB
-# undef MEMWRITEOOB
-# define MEMWRITEOOB 0xc00c4d03
-#endif
-#ifdef MGSL_IOCGPARAMS
-# undef MGSL_IOCGPARAMS
-# define MGSL_IOCGPARAMS 0x80206d01
-#endif
-#ifdef MGSL_IOCSPARAMS
-# undef MGSL_IOCSPARAMS
-# define MGSL_IOCSPARAMS 0x40206d00
-#endif
-#ifdef MIC_VIRTIO_ADD_DEVICE
-# undef MIC_VIRTIO_ADD_DEVICE
-# define MIC_VIRTIO_ADD_DEVICE 0xc0047301
-#endif
-#ifdef MIC_VIRTIO_CONFIG_CHANGE
-# undef MIC_VIRTIO_CONFIG_CHANGE
-# define MIC_VIRTIO_CONFIG_CHANGE 0xc0047305
-#endif
-#ifdef MIC_VIRTIO_COPY_DESC
-# undef MIC_VIRTIO_COPY_DESC
-# define MIC_VIRTIO_COPY_DESC 0xc0047302
-#endif
-#ifdef MMTIMER_GETCOUNTER
-# undef MMTIMER_GETCOUNTER
-# define MMTIMER_GETCOUNTER 0x80046d09
-#endif
-#ifdef MMTIMER_GETFREQ
-# undef MMTIMER_GETFREQ
-# define MMTIMER_GETFREQ 0x80046d02
-#endif
-#ifdef MMTIMER_GETRES
-# undef MMTIMER_GETRES
-# define MMTIMER_GETRES 0x80046d01
-#endif
-#ifdef MTIOCGET
-# undef MTIOCGET
-# define MTIOCGET 0x801c6d02
-#endif
-#ifdef MTIOCPOS
-# undef MTIOCPOS
-# define MTIOCPOS 0x80046d03
-#endif
-#ifdef MTRRIOC_ADD_ENTRY
-# undef MTRRIOC_ADD_ENTRY
-# define MTRRIOC_ADD_ENTRY 0x400c4d00
-#endif
-#ifdef MTRRIOC_ADD_PAGE_ENTRY
-# undef MTRRIOC_ADD_PAGE_ENTRY
-# define MTRRIOC_ADD_PAGE_ENTRY 0x400c4d05
-#endif
-#ifdef MTRRIOC_DEL_ENTRY
-# undef MTRRIOC_DEL_ENTRY
-# define MTRRIOC_DEL_ENTRY 0x400c4d02
-#endif
-#ifdef MTRRIOC_DEL_PAGE_ENTRY
-# undef MTRRIOC_DEL_PAGE_ENTRY
-# define MTRRIOC_DEL_PAGE_ENTRY 0x400c4d07
-#endif
-#ifdef MTRRIOC_GET_ENTRY
-# undef MTRRIOC_GET_ENTRY
-# define MTRRIOC_GET_ENTRY 0xc0104d03
-#endif
-#ifdef MTRRIOC_GET_PAGE_ENTRY
-# undef MTRRIOC_GET_PAGE_ENTRY
-# define MTRRIOC_GET_PAGE_ENTRY 0xc0104d08
-#endif
-#ifdef MTRRIOC_KILL_ENTRY
-# undef MTRRIOC_KILL_ENTRY
-# define MTRRIOC_KILL_ENTRY 0x400c4d04
-#endif
-#ifdef MTRRIOC_KILL_PAGE_ENTRY
-# undef MTRRIOC_KILL_PAGE_ENTRY
-# define MTRRIOC_KILL_PAGE_ENTRY 0x400c4d09
-#endif
-#ifdef MTRRIOC_SET_ENTRY
-# undef MTRRIOC_SET_ENTRY
-# define MTRRIOC_SET_ENTRY 0x400c4d01
-#endif
-#ifdef MTRRIOC_SET_PAGE_ENTRY
-# undef MTRRIOC_SET_PAGE_ENTRY
-# define MTRRIOC_SET_PAGE_ENTRY 0x400c4d06
-#endif
-#ifdef NCIUARTSETDRIVER
-# undef NCIUARTSETDRIVER
-# define NCIUARTSETDRIVER 0x40045500
-#endif
-#ifdef NCP_IOC_GET_FS_INFO_V2
-# undef NCP_IOC_GET_FS_INFO_V2
-# define NCP_IOC_GET_FS_INFO_V2 0xc0246e04
-#endif
-#ifdef NCP_IOC_GETMOUNTUID2
-# undef NCP_IOC_GETMOUNTUID2
-# define NCP_IOC_GETMOUNTUID2 0x40046e02
-#endif
-#ifdef NCP_IOC_GETOBJECTNAME
-# undef NCP_IOC_GETOBJECTNAME
-# define NCP_IOC_GETOBJECTNAME 0xc00c6e09
-#endif
-#ifdef NCP_IOC_GETPRIVATEDATA
-# undef NCP_IOC_GETPRIVATEDATA
-# define NCP_IOC_GETPRIVATEDATA 0xc0086e0a
-#endif
-#ifdef NCP_IOC_NCPREQUEST
-# undef NCP_IOC_NCPREQUEST
-# define NCP_IOC_NCPREQUEST 0x800c6e01
-#endif
-#ifdef NCP_IOC_SETOBJECTNAME
-# undef NCP_IOC_SETOBJECTNAME
-# define NCP_IOC_SETOBJECTNAME 0x800c6e09
-#endif
-#ifdef NCP_IOC_SETPRIVATEDATA
-# undef NCP_IOC_SETPRIVATEDATA
-# define NCP_IOC_SETPRIVATEDATA 0x80086e0a
-#endif
-#ifdef NS_GETPSTAT
-# undef NS_GETPSTAT
-# define NS_GETPSTAT 0xc00c6161
-#endif
-#ifdef NS_SETBUFLEV
-# undef NS_SETBUFLEV
-# define NS_SETBUFLEV 0x400c6162
-#endif
-#ifdef NVME_IOCTL_SUBMIT_IO
-# undef NVME_IOCTL_SUBMIT_IO
-# define NVME_IOCTL_SUBMIT_IO 0x402c4e42
-#endif
-#ifdef OMAPFB_MEMORY_READ
-# undef OMAPFB_MEMORY_READ
-# define OMAPFB_MEMORY_READ 0x80104f3a
-#endif
-#ifdef OSD_GET_CAPABILITY
-# undef OSD_GET_CAPABILITY
-# define OSD_GET_CAPABILITY 0x80086fa1
-#endif
-#ifdef OSD_SEND_CMD
-# undef OSD_SEND_CMD
-# define OSD_SEND_CMD 0x401c6fa0
-#endif
-#ifdef PERF_EVENT_IOC_ID
-# undef PERF_EVENT_IOC_ID
-# define PERF_EVENT_IOC_ID 0x80042407
-#endif
-#ifdef PERF_EVENT_IOC_SET_FILTER
-# undef PERF_EVENT_IOC_SET_FILTER
-# define PERF_EVENT_IOC_SET_FILTER 0x40042406
-#endif
-#ifdef PHN_GET_REG
-# undef PHN_GET_REG
-# define PHN_GET_REG 0xc0047000
-#endif
-#ifdef PHN_GET_REGS
-# undef PHN_GET_REGS
-# define PHN_GET_REGS 0xc0047002
-#endif
-#ifdef PHN_SET_REG
-# undef PHN_SET_REG
-# define PHN_SET_REG 0x40047001
-#endif
-#ifdef PHN_SET_REGS
-# undef PHN_SET_REGS
-# define PHN_SET_REGS 0x40047003
-#endif
-#ifdef PHONE_CAPABILITIES_CHECK
-# undef PHONE_CAPABILITIES_CHECK
-# define PHONE_CAPABILITIES_CHECK 0x40047182
-#endif
-#ifdef PHONE_CAPABILITIES_LIST
-# undef PHONE_CAPABILITIES_LIST
-# define PHONE_CAPABILITIES_LIST 0x80047181
-#endif
-#ifdef PHONE_QUERY_CODEC
-# undef PHONE_QUERY_CODEC
-# define PHONE_QUERY_CODEC 0xc00471a7
-#endif
-#ifdef PHONE_RING_START
-# undef PHONE_RING_START
-# define PHONE_RING_START 0x40047187
-#endif
-#ifdef PMU_IOC_CAN_SLEEP
-# undef PMU_IOC_CAN_SLEEP
-# define PMU_IOC_CAN_SLEEP 0x80044205
-#endif
-#ifdef PMU_IOC_GET_BACKLIGHT
-# undef PMU_IOC_GET_BACKLIGHT
-# define PMU_IOC_GET_BACKLIGHT 0x80044201
-#endif
-#ifdef PMU_IOC_GET_MODEL
-# undef PMU_IOC_GET_MODEL
-# define PMU_IOC_GET_MODEL 0x80044203
-#endif
-#ifdef PMU_IOC_GRAB_BACKLIGHT
-# undef PMU_IOC_GRAB_BACKLIGHT
-# define PMU_IOC_GRAB_BACKLIGHT 0x80044206
-#endif
-#ifdef PMU_IOC_HAS_ADB
-# undef PMU_IOC_HAS_ADB
-# define PMU_IOC_HAS_ADB 0x80044204
-#endif
-#ifdef PMU_IOC_SET_BACKLIGHT
-# undef PMU_IOC_SET_BACKLIGHT
-# define PMU_IOC_SET_BACKLIGHT 0x40044202
-#endif
-#ifdef PPGETTIME
-# undef PPGETTIME
-# define PPGETTIME 0x80087095
-#endif
-#ifdef PPPIOCGCOMPRESSORS
-# undef PPPIOCGCOMPRESSORS
-# define PPPIOCGCOMPRESSORS 0x80207486
-#endif
-#ifdef PPPIOCGIDLE
-# undef PPPIOCGIDLE
-# define PPPIOCGIDLE 0x8008743f
-#endif
-#ifdef PPPIOCSACTIVE
-# undef PPPIOCSACTIVE
-# define PPPIOCSACTIVE 0x40087446
-#endif
-#ifdef PPPIOCSCOMPRESS
-# undef PPPIOCSCOMPRESS
-# define PPPIOCSCOMPRESS 0x400c744d
-#endif
-#ifdef PPPIOCSPASS
-# undef PPPIOCSPASS
-# define PPPIOCSPASS 0x40087447
-#endif
-#ifdef PPPOEIOCSFWD
-# undef PPPOEIOCSFWD
-# define PPPOEIOCSFWD 0x4004b100
-#endif
-#ifdef PPSETTIME
-# undef PPSETTIME
-# define PPSETTIME 0x40087096
-#endif
-#ifdef PPS_FETCH
-# undef PPS_FETCH
-# define PPS_FETCH 0xc00470a4
-#endif
-#ifdef PPS_GETCAP
-# undef PPS_GETCAP
-# define PPS_GETCAP 0x800470a3
-#endif
-#ifdef PPS_GETPARAMS
-# undef PPS_GETPARAMS
-# define PPS_GETPARAMS 0x800470a1
-#endif
-#ifdef PPS_KC_BIND
-# undef PPS_KC_BIND
-# define PPS_KC_BIND 0x400470a5
-#endif
-#ifdef PPS_SETPARAMS
-# undef PPS_SETPARAMS
-# define PPS_SETPARAMS 0x400470a2
-#endif
-#ifdef REISERFS_IOC_UNPACK
-# undef REISERFS_IOC_UNPACK
-# define REISERFS_IOC_UNPACK 0x4004cd01
-#endif
-#ifdef RTC_EPOCH_READ
-# undef RTC_EPOCH_READ
-# define RTC_EPOCH_READ 0x8004700d
-#endif
-#ifdef RTC_EPOCH_SET
-# undef RTC_EPOCH_SET
-# define RTC_EPOCH_SET 0x4004700e
-#endif
-#ifdef RTC_IRQP_READ
-# undef RTC_IRQP_READ
-# define RTC_IRQP_READ 0x8004700b
-#endif
-#ifdef RTC_IRQP_SET
-# undef RTC_IRQP_SET
-# define RTC_IRQP_SET 0x4004700c
-#endif
-#ifdef RTC_PLL_GET
-# undef RTC_PLL_GET
-# define RTC_PLL_GET 0x801c7011
-#endif
-#ifdef RTC_PLL_SET
-# undef RTC_PLL_SET
-# define RTC_PLL_SET 0x401c7012
-#endif
-#ifdef SCIF_FENCE_MARK
-# undef SCIF_FENCE_MARK
-# define SCIF_FENCE_MARK 0xc00c730f
-#endif
-#ifdef SCIF_FENCE_SIGNAL
-# undef SCIF_FENCE_SIGNAL
-# define SCIF_FENCE_SIGNAL 0xc0247311
-#endif
-#ifdef SCIF_GET_NODEIDS
-# undef SCIF_GET_NODEIDS
-# define SCIF_GET_NODEIDS 0xc014730e
-#endif
-#ifdef SCIF_READFROM
-# undef SCIF_READFROM
-# define SCIF_READFROM 0xc024730a
-#endif
-#ifdef SCIF_RECV
-# undef SCIF_RECV
-# define SCIF_RECV 0xc0147307
-#endif
-#ifdef SCIF_SEND
-# undef SCIF_SEND
-# define SCIF_SEND 0xc0147306
-#endif
-#ifdef SCIF_VREADFROM
-# undef SCIF_VREADFROM
-# define SCIF_VREADFROM 0xc024730c
-#endif
-#ifdef SCIF_VWRITETO
-# undef SCIF_VWRITETO
-# define SCIF_VWRITETO 0xc024730d
-#endif
-#ifdef SCIF_WRITETO
-# undef SCIF_WRITETO
-# define SCIF_WRITETO 0xc024730b
-#endif
-#ifdef SNDCTL_DSP_MAPINBUF
-# undef SNDCTL_DSP_MAPINBUF
-# define SNDCTL_DSP_MAPINBUF 0x80085013
-#endif
-#ifdef SNDCTL_DSP_MAPOUTBUF
-# undef SNDCTL_DSP_MAPOUTBUF
-# define SNDCTL_DSP_MAPOUTBUF 0x80085014
-#endif
-#ifdef SNDRV_CTL_IOCTL_ELEM_LIST
-# undef SNDRV_CTL_IOCTL_ELEM_LIST
-# define SNDRV_CTL_IOCTL_ELEM_LIST 0xc0485510
-#endif
-#ifdef SNDRV_CTL_IOCTL_ELEM_READ
-# undef SNDRV_CTL_IOCTL_ELEM_READ
-# define SNDRV_CTL_IOCTL_ELEM_READ 0xc2c45512
-#endif
-#ifdef SNDRV_CTL_IOCTL_ELEM_WRITE
-# undef SNDRV_CTL_IOCTL_ELEM_WRITE
-# define SNDRV_CTL_IOCTL_ELEM_WRITE 0xc2c45513
-#endif
-#ifdef SNDRV_EMU10K1_IOCTL_CODE_PEEK
-# undef SNDRV_EMU10K1_IOCTL_CODE_PEEK
-# define SNDRV_EMU10K1_IOCTL_CODE_PEEK 0xc18c4812
-#endif
-#ifdef SNDRV_EMU10K1_IOCTL_CODE_POKE
-# undef SNDRV_EMU10K1_IOCTL_CODE_POKE
-# define SNDRV_EMU10K1_IOCTL_CODE_POKE 0x418c4811
-#endif
-#ifdef SNDRV_EMU10K1_IOCTL_TRAM_PEEK
-# undef SNDRV_EMU10K1_IOCTL_TRAM_PEEK
-# define SNDRV_EMU10K1_IOCTL_TRAM_PEEK 0xc00c4822
-#endif
-#ifdef SNDRV_EMU10K1_IOCTL_TRAM_POKE
-# undef SNDRV_EMU10K1_IOCTL_TRAM_POKE
-# define SNDRV_EMU10K1_IOCTL_TRAM_POKE 0x400c4821
-#endif
-#ifdef SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE
-# undef SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE
-# define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE 0x40044842
-#endif
-#ifdef SNDRV_HDSPM_IOCTL_GET_MIXER
-# undef SNDRV_HDSPM_IOCTL_GET_MIXER
-# define SNDRV_HDSPM_IOCTL_GET_MIXER 0x80044844
-#endif
-#ifdef SNDRV_HDSPM_IOCTL_GET_STATUS
-# undef SNDRV_HDSPM_IOCTL_GET_STATUS
-# define SNDRV_HDSPM_IOCTL_GET_STATUS 0x801c4847
-#endif
-#ifdef SNDRV_HWDEP_IOCTL_DSP_LOAD
-# undef SNDRV_HWDEP_IOCTL_DSP_LOAD
-# define SNDRV_HWDEP_IOCTL_DSP_LOAD 0x40504803
-#endif
-#ifdef SNDRV_PCM_IOCTL_CHANNEL_INFO
-# undef SNDRV_PCM_IOCTL_CHANNEL_INFO
-# define SNDRV_PCM_IOCTL_CHANNEL_INFO 0x80104132
-#endif
-#ifdef SNDRV_PCM_IOCTL_DELAY
-# undef SNDRV_PCM_IOCTL_DELAY
-# define SNDRV_PCM_IOCTL_DELAY 0x80044121
-#endif
-#ifdef SNDRV_PCM_IOCTL_FORWARD
-# undef SNDRV_PCM_IOCTL_FORWARD
-# define SNDRV_PCM_IOCTL_FORWARD 0x40044149
-#endif
-#ifdef SNDRV_PCM_IOCTL_HW_PARAMS
-# undef SNDRV_PCM_IOCTL_HW_PARAMS
-# define SNDRV_PCM_IOCTL_HW_PARAMS 0xc25c4111
-#endif
-#ifdef SNDRV_PCM_IOCTL_HW_REFINE
-# undef SNDRV_PCM_IOCTL_HW_REFINE
-# define SNDRV_PCM_IOCTL_HW_REFINE 0xc25c4110
-#endif
-#ifdef SNDRV_PCM_IOCTL_READI_FRAMES
-# undef SNDRV_PCM_IOCTL_READI_FRAMES
-# define SNDRV_PCM_IOCTL_READI_FRAMES 0x800c4151
-#endif
-#ifdef SNDRV_PCM_IOCTL_READN_FRAMES
-# undef SNDRV_PCM_IOCTL_READN_FRAMES
-# define SNDRV_PCM_IOCTL_READN_FRAMES 0x800c4153
-#endif
-#ifdef SNDRV_PCM_IOCTL_REWIND
-# undef SNDRV_PCM_IOCTL_REWIND
-# define SNDRV_PCM_IOCTL_REWIND 0x40044146
-#endif
-#ifdef SNDRV_PCM_IOCTL_STATUS
-# undef SNDRV_PCM_IOCTL_STATUS
-# define SNDRV_PCM_IOCTL_STATUS 0x806c4120
-#endif
-#ifdef SNDRV_PCM_IOCTL_STATUS_EXT
-# undef SNDRV_PCM_IOCTL_STATUS_EXT
-# define SNDRV_PCM_IOCTL_STATUS_EXT 0xc06c4124
-#endif
-#ifdef SNDRV_PCM_IOCTL_SW_PARAMS
-# undef SNDRV_PCM_IOCTL_SW_PARAMS
-# define SNDRV_PCM_IOCTL_SW_PARAMS 0xc0684113
-#endif
-#ifdef SNDRV_PCM_IOCTL_SYNC_PTR
-# undef SNDRV_PCM_IOCTL_SYNC_PTR
-# define SNDRV_PCM_IOCTL_SYNC_PTR 0xc0844123
-#endif
-#ifdef SNDRV_PCM_IOCTL_WRITEI_FRAMES
-# undef SNDRV_PCM_IOCTL_WRITEI_FRAMES
-# define SNDRV_PCM_IOCTL_WRITEI_FRAMES 0x400c4150
-#endif
-#ifdef SNDRV_PCM_IOCTL_WRITEN_FRAMES
-# undef SNDRV_PCM_IOCTL_WRITEN_FRAMES
-# define SNDRV_PCM_IOCTL_WRITEN_FRAMES 0x400c4152
-#endif
-#ifdef SNDRV_RAWMIDI_IOCTL_PARAMS
-# undef SNDRV_RAWMIDI_IOCTL_PARAMS
-# define SNDRV_RAWMIDI_IOCTL_PARAMS 0xc0205710
-#endif
-#ifdef SNDRV_RAWMIDI_IOCTL_STATUS
-# undef SNDRV_RAWMIDI_IOCTL_STATUS
-# define SNDRV_RAWMIDI_IOCTL_STATUS 0xc0245720
-#endif
-#ifdef SNDRV_SEQ_IOCTL_CREATE_PORT
-# undef SNDRV_SEQ_IOCTL_CREATE_PORT
-# define SNDRV_SEQ_IOCTL_CREATE_PORT 0xc0a45320
-#endif
-#ifdef SNDRV_SEQ_IOCTL_DELETE_PORT
-# undef SNDRV_SEQ_IOCTL_DELETE_PORT
-# define SNDRV_SEQ_IOCTL_DELETE_PORT 0x40a45321
-#endif
-#ifdef SNDRV_SEQ_IOCTL_GET_PORT_INFO
-# undef SNDRV_SEQ_IOCTL_GET_PORT_INFO
-# define SNDRV_SEQ_IOCTL_GET_PORT_INFO 0xc0a45322
-#endif
-#ifdef SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT
-# undef SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT
-# define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT 0xc0a45352
-#endif
-#ifdef SNDRV_SEQ_IOCTL_SET_PORT_INFO
-# undef SNDRV_SEQ_IOCTL_SET_PORT_INFO
-# define SNDRV_SEQ_IOCTL_SET_PORT_INFO 0x40a45323
-#endif
-#ifdef SNDRV_TIMER_IOCTL_GINFO
-# undef SNDRV_TIMER_IOCTL_GINFO
-# define SNDRV_TIMER_IOCTL_GINFO 0xc0e05403
-#endif
-#ifdef SNDRV_TIMER_IOCTL_GPARAMS
-# undef SNDRV_TIMER_IOCTL_GPARAMS
-# define SNDRV_TIMER_IOCTL_GPARAMS 0x403c5404
-#endif
-#ifdef SNDRV_TIMER_IOCTL_GSTATUS
-# undef SNDRV_TIMER_IOCTL_GSTATUS
-# define SNDRV_TIMER_IOCTL_GSTATUS 0xc0405405
-#endif
-#ifdef SNDRV_TIMER_IOCTL_INFO
-# undef SNDRV_TIMER_IOCTL_INFO
-# define SNDRV_TIMER_IOCTL_INFO 0x80e05411
-#endif
-#ifdef SNDRV_TIMER_IOCTL_STATUS
-# undef SNDRV_TIMER_IOCTL_STATUS
-# define SNDRV_TIMER_IOCTL_STATUS 0x80585414
-#endif
-#ifdef SPIOCSTYPE
-# undef SPIOCSTYPE
-# define SPIOCSTYPE 0x40047101
-#endif
-#ifdef TUNATTACHFILTER
-# undef TUNATTACHFILTER
-# define TUNATTACHFILTER 0x400854d5
-#endif
-#ifdef TUNDETACHFILTER
-# undef TUNDETACHFILTER
-# define TUNDETACHFILTER 0x400854d6
-#endif
-#ifdef TUNER_SET_CONFIG
-# undef TUNER_SET_CONFIG
-# define TUNER_SET_CONFIG 0x4008645c
-#endif
-#ifdef TUNGETFILTER
-# undef TUNGETFILTER
-# define TUNGETFILTER 0x800854db
-#endif
-#ifdef UDF_GETEABLOCK
-# undef UDF_GETEABLOCK
-# define UDF_GETEABLOCK 0x80046c41
-#endif
-#ifdef UDF_GETVOLIDENT
-# undef UDF_GETVOLIDENT
-# define UDF_GETVOLIDENT 0x80046c42
-#endif
-#ifdef UDF_RELOCATE_BLOCKS
-# undef UDF_RELOCATE_BLOCKS
-# define UDF_RELOCATE_BLOCKS 0xc0046c43
-#endif
-#ifdef UI_BEGIN_FF_UPLOAD
-# undef UI_BEGIN_FF_UPLOAD
-# define UI_BEGIN_FF_UPLOAD 0xc06055c8
-#endif
-#ifdef UI_END_FF_UPLOAD
-# undef UI_END_FF_UPLOAD
-# define UI_END_FF_UPLOAD 0x406055c9
-#endif
-#ifdef UI_SET_PHYS
-# undef UI_SET_PHYS
-# define UI_SET_PHYS 0x4004556c
-#endif
-#ifdef USBDEVFS_BULK
-# undef USBDEVFS_BULK
-# define USBDEVFS_BULK 0xc0105502
-#endif
-#ifdef USBDEVFS_CONTROL
-# undef USBDEVFS_CONTROL
-# define USBDEVFS_CONTROL 0xc0105500
-#endif
-#ifdef USBDEVFS_DISCSIGNAL
-# undef USBDEVFS_DISCSIGNAL
-# define USBDEVFS_DISCSIGNAL 0x8008550e
-#endif
-#ifdef USBDEVFS_IOCTL
-# undef USBDEVFS_IOCTL
-# define USBDEVFS_IOCTL 0xc00c5512
-#endif
-#ifdef USBDEVFS_REAPURB
-# undef USBDEVFS_REAPURB
-# define USBDEVFS_REAPURB 0x4004550c
-#endif
-#ifdef USBDEVFS_REAPURBNDELAY
-# undef USBDEVFS_REAPURBNDELAY
-# define USBDEVFS_REAPURBNDELAY 0x4004550d
-#endif
-#ifdef USBDEVFS_SUBMITURB
-# undef USBDEVFS_SUBMITURB
-# define USBDEVFS_SUBMITURB 0x802c550a
-#endif
-#ifdef UVCIOC_CTRL_MAP
-# undef UVCIOC_CTRL_MAP
-# define UVCIOC_CTRL_MAP 0xc0587520
-#endif
-#ifdef UVCIOC_CTRL_QUERY
-# undef UVCIOC_CTRL_QUERY
-# define UVCIOC_CTRL_QUERY 0xc00c7521
-#endif
-#ifdef V4L2_DEVICE_NOTIFY_EVENT
-# undef V4L2_DEVICE_NOTIFY_EVENT
-# define V4L2_DEVICE_NOTIFY_EVENT 0x40787602
-#endif
-#ifdef VFAT_IOCTL_READDIR_BOTH
-# undef VFAT_IOCTL_READDIR_BOTH
-# define VFAT_IOCTL_READDIR_BOTH 0x82187201
-#endif
-#ifdef VFAT_IOCTL_READDIR_SHORT
-# undef VFAT_IOCTL_READDIR_SHORT
-# define VFAT_IOCTL_READDIR_SHORT 0x82187202
-#endif
-#ifdef VIDEO_GET_EVENT
-# undef VIDEO_GET_EVENT
-# define VIDEO_GET_EVENT 0x80146f1c
-#endif
-#ifdef VIDEO_SET_SPU_PALETTE
-# undef VIDEO_SET_SPU_PALETTE
-# define VIDEO_SET_SPU_PALETTE 0x40086f33
-#endif
-#ifdef VIDEO_STILLPICTURE
-# undef VIDEO_STILLPICTURE
-# define VIDEO_STILLPICTURE 0x40086f1e
-#endif
-#ifdef VIDIOC_AM437X_CCDC_CFG
-# undef VIDIOC_AM437X_CCDC_CFG
-# define VIDIOC_AM437X_CCDC_CFG 0x400456c1
-#endif
-#ifdef VIDIOC_CREATE_BUFS
-# undef VIDIOC_CREATE_BUFS
-# define VIDIOC_CREATE_BUFS 0xc0f8565c
-#endif
-#ifdef VIDIOC_DQBUF
-# undef VIDIOC_DQBUF
-# define VIDIOC_DQBUF 0xc0445611
-#endif
-#ifdef VIDIOC_DQEVENT
-# undef VIDIOC_DQEVENT
-# define VIDIOC_DQEVENT 0x80785659
-#endif
-#ifdef VIDIOC_ENUMINPUT
-# undef VIDIOC_ENUMINPUT
-# define VIDIOC_ENUMINPUT 0xc04c561a
-#endif
-#ifdef VIDIOC_ENUMSTD
-# undef VIDIOC_ENUMSTD
-# define VIDIOC_ENUMSTD 0xc0405619
-#endif
-#ifdef VIDIOC_G_EDID
-# undef VIDIOC_G_EDID
-# define VIDIOC_G_EDID 0xc0245628
-#endif
-#ifdef VIDIOC_G_EXT_CTRLS
-# undef VIDIOC_G_EXT_CTRLS
-# define VIDIOC_G_EXT_CTRLS 0xc0185647
-#endif
-#ifdef VIDIOC_G_FBUF
-# undef VIDIOC_G_FBUF
-# define VIDIOC_G_FBUF 0x802c560a
-#endif
-#ifdef VIDIOC_G_FMT
-# undef VIDIOC_G_FMT
-# define VIDIOC_G_FMT 0xc0cc5604
-#endif
-#ifdef VIDIOC_OMAP3ISP_CCDC_CFG
-# undef VIDIOC_OMAP3ISP_CCDC_CFG
-# define VIDIOC_OMAP3ISP_CCDC_CFG 0xc02056c1
-#endif
-#ifdef VIDIOC_OMAP3ISP_PRV_CFG
-# undef VIDIOC_OMAP3ISP_PRV_CFG
-# define VIDIOC_OMAP3ISP_PRV_CFG 0xc03c56c2
-#endif
-#ifdef VIDIOC_OMAP3ISP_STAT_EN
-# undef VIDIOC_OMAP3ISP_STAT_EN
-# define VIDIOC_OMAP3ISP_STAT_EN 0xc00456c7
-#endif
-#ifdef VIDIOC_OMAP3ISP_STAT_REQ
-# undef VIDIOC_OMAP3ISP_STAT_REQ
-# define VIDIOC_OMAP3ISP_STAT_REQ 0xc01856c6
-#endif
-#ifdef VIDIOC_PREPARE_BUF
-# undef VIDIOC_PREPARE_BUF
-# define VIDIOC_PREPARE_BUF 0xc044565d
-#endif
-#ifdef VIDIOC_QBUF
-# undef VIDIOC_QBUF
-# define VIDIOC_QBUF 0xc044560f
-#endif
-#ifdef VIDIOC_QUERYBUF
-# undef VIDIOC_QUERYBUF
-# define VIDIOC_QUERYBUF 0xc0445609
-#endif
-#ifdef VIDIOC_S_EDID
-# undef VIDIOC_S_EDID
-# define VIDIOC_S_EDID 0xc0245629
-#endif
-#ifdef VIDIOC_S_EXT_CTRLS
-# undef VIDIOC_S_EXT_CTRLS
-# define VIDIOC_S_EXT_CTRLS 0xc0185648
-#endif
-#ifdef VIDIOC_S_FBUF
-# undef VIDIOC_S_FBUF
-# define VIDIOC_S_FBUF 0x402c560b
-#endif
-#ifdef VIDIOC_S_FMT
-# undef VIDIOC_S_FMT
-# define VIDIOC_S_FMT 0xc0cc5605
-#endif
-#ifdef VIDIOC_SUBDEV_G_EDID
-# undef VIDIOC_SUBDEV_G_EDID
-# define VIDIOC_SUBDEV_G_EDID 0xc0245628
-#endif
-#ifdef VIDIOC_SUBDEV_S_EDID
-# undef VIDIOC_SUBDEV_S_EDID
-# define VIDIOC_SUBDEV_S_EDID 0xc0245629
-#endif
-#ifdef VIDIOC_TRY_EXT_CTRLS
-# undef VIDIOC_TRY_EXT_CTRLS
-# define VIDIOC_TRY_EXT_CTRLS 0xc0185649
-#endif
-#ifdef VIDIOC_TRY_FMT
-# undef VIDIOC_TRY_FMT
-# define VIDIOC_TRY_FMT 0xc0cc5640
-#endif
-#ifdef VPFE_CMD_S_CCDC_RAW_PARAMS
-# undef VPFE_CMD_S_CCDC_RAW_PARAMS
-# define VPFE_CMD_S_CCDC_RAW_PARAMS 0x400456c1
-#endif
-#ifdef ZATM_GETPOOL
-# undef ZATM_GETPOOL
-# define ZATM_GETPOOL 0x400c6161
-#endif
-#ifdef ZATM_GETPOOLZ
-# undef ZATM_GETPOOLZ
-# define ZATM_GETPOOLZ 0x400c6162
-#endif
-#ifdef ZATM_SETPOOL
-# undef ZATM_SETPOOL
-# define ZATM_SETPOOL 0x400c6163
-#endif
diff --git a/ioctl_redefs2.h b/ioctl_redefs2.h
deleted file mode 100644
index d881400..0000000
--- a/ioctl_redefs2.h
+++ /dev/null
@@ -1,1304 +0,0 @@
-#ifdef AGPIOC_ALLOCATE
-# undef AGPIOC_ALLOCATE
-# define AGPIOC_ALLOCATE 0xc0044106
-#endif
-#ifdef AGPIOC_BIND
-# undef AGPIOC_BIND
-# define AGPIOC_BIND 0x40044108
-#endif
-#ifdef AGPIOC_INFO
-# undef AGPIOC_INFO
-# define AGPIOC_INFO 0x80044100
-#endif
-#ifdef AGPIOC_PROTECT
-# undef AGPIOC_PROTECT
-# define AGPIOC_PROTECT 0x40044105
-#endif
-#ifdef AGPIOC_RESERVE
-# undef AGPIOC_RESERVE
-# define AGPIOC_RESERVE 0x40044104
-#endif
-#ifdef AGPIOC_SETUP
-# undef AGPIOC_SETUP
-# define AGPIOC_SETUP 0x40044103
-#endif
-#ifdef AGPIOC_UNBIND
-# undef AGPIOC_UNBIND
-# define AGPIOC_UNBIND 0x40044109
-#endif
-#ifdef ASHMEM_SET_PROT_MASK
-# undef ASHMEM_SET_PROT_MASK
-# define ASHMEM_SET_PROT_MASK 0x40047705
-#endif
-#ifdef ASHMEM_SET_SIZE
-# undef ASHMEM_SET_SIZE
-# define ASHMEM_SET_SIZE 0x40047703
-#endif
-#ifdef ATM_ADDADDR
-# undef ATM_ADDADDR
-# define ATM_ADDADDR 0x400c6188
-#endif
-#ifdef ATM_ADDLECSADDR
-# undef ATM_ADDLECSADDR
-# define ATM_ADDLECSADDR 0x400c618e
-#endif
-#ifdef ATM_ADDPARTY
-# undef ATM_ADDPARTY
-# define ATM_ADDPARTY 0x400861f4
-#endif
-#ifdef ATM_DELADDR
-# undef ATM_DELADDR
-# define ATM_DELADDR 0x400c6189
-#endif
-#ifdef ATM_DELLECSADDR
-# undef ATM_DELLECSADDR
-# define ATM_DELLECSADDR 0x400c618f
-#endif
-#ifdef ATM_GETADDR
-# undef ATM_GETADDR
-# define ATM_GETADDR 0x400c6186
-#endif
-#ifdef ATM_GETCIRANGE
-# undef ATM_GETCIRANGE
-# define ATM_GETCIRANGE 0x400c618a
-#endif
-#ifdef ATM_GETESI
-# undef ATM_GETESI
-# define ATM_GETESI 0x400c6185
-#endif
-#ifdef ATM_GETLECSADDR
-# undef ATM_GETLECSADDR
-# define ATM_GETLECSADDR 0x400c6190
-#endif
-#ifdef ATM_GETLINKRATE
-# undef ATM_GETLINKRATE
-# define ATM_GETLINKRATE 0x400c6181
-#endif
-#ifdef ATM_GETLOOP
-# undef ATM_GETLOOP
-# define ATM_GETLOOP 0x400c6152
-#endif
-#ifdef ATM_GETNAMES
-# undef ATM_GETNAMES
-# define ATM_GETNAMES 0x40086183
-#endif
-#ifdef ATM_GETSTAT
-# undef ATM_GETSTAT
-# define ATM_GETSTAT 0x400c6150
-#endif
-#ifdef ATM_GETSTATZ
-# undef ATM_GETSTATZ
-# define ATM_GETSTATZ 0x400c6151
-#endif
-#ifdef ATM_GETTYPE
-# undef ATM_GETTYPE
-# define ATM_GETTYPE 0x400c6184
-#endif
-#ifdef ATM_QUERYLOOP
-# undef ATM_QUERYLOOP
-# define ATM_QUERYLOOP 0x400c6154
-#endif
-#ifdef ATM_RSTADDR
-# undef ATM_RSTADDR
-# define ATM_RSTADDR 0x400c6187
-#endif
-#ifdef ATM_SETCIRANGE
-# undef ATM_SETCIRANGE
-# define ATM_SETCIRANGE 0x400c618b
-#endif
-#ifdef ATM_SETESI
-# undef ATM_SETESI
-# define ATM_SETESI 0x400c618c
-#endif
-#ifdef ATM_SETESIF
-# undef ATM_SETESIF
-# define ATM_SETESIF 0x400c618d
-#endif
-#ifdef ATM_SETLOOP
-# undef ATM_SETLOOP
-# define ATM_SETLOOP 0x400c6153
-#endif
-#ifdef AUTOFS_IOC_SETTIMEOUT
-# undef AUTOFS_IOC_SETTIMEOUT
-# define AUTOFS_IOC_SETTIMEOUT 0xc0049364
-#endif
-#ifdef BLKBSZGET
-# undef BLKBSZGET
-# define BLKBSZGET 0x80041270
-#endif
-#ifdef BLKBSZSET
-# undef BLKBSZSET
-# define BLKBSZSET 0x40041271
-#endif
-#ifdef BLKGETSIZE64
-# undef BLKGETSIZE64
-# define BLKGETSIZE64 0x80041272
-#endif
-#ifdef CAPI_MANUFACTURER_CMD
-# undef CAPI_MANUFACTURER_CMD
-# define CAPI_MANUFACTURER_CMD 0xc0084320
-#endif
-#ifdef CCISS_BIG_PASSTHRU
-# undef CCISS_BIG_PASSTHRU
-# define CCISS_BIG_PASSTHRU 0xc0584212
-#endif
-#ifdef CCISS_PASSTHRU
-# undef CCISS_PASSTHRU
-# define CCISS_PASSTHRU 0xc054420b
-#endif
-#ifdef CHIOGSTATUS
-# undef CHIOGSTATUS
-# define CHIOGSTATUS 0x40086308
-#endif
-#ifdef CIOC_KERNEL_VERSION
-# undef CIOC_KERNEL_VERSION
-# define CIOC_KERNEL_VERSION 0xc004630a
-#endif
-#ifdef CM_IOCGATR
-# undef CM_IOCGATR
-# define CM_IOCGATR 0xc0046301
-#endif
-#ifdef CM_IOCGSTATUS
-# undef CM_IOCGSTATUS
-# define CM_IOCGSTATUS 0x80046300
-#endif
-#ifdef CM_IOCSPTS
-# undef CM_IOCSPTS
-# define CM_IOCSPTS 0x40046302
-#endif
-#ifdef CM_IOSDBGLVL
-# undef CM_IOSDBGLVL
-# define CM_IOSDBGLVL 0x400463fa
-#endif
-#ifdef DRM_IOCTL_ADD_BUFS
-# undef DRM_IOCTL_ADD_BUFS
-# define DRM_IOCTL_ADD_BUFS 0xc0186416
-#endif
-#ifdef DRM_IOCTL_ADD_MAP
-# undef DRM_IOCTL_ADD_MAP
-# define DRM_IOCTL_ADD_MAP 0xc0186415
-#endif
-#ifdef DRM_IOCTL_AGP_ALLOC
-# undef DRM_IOCTL_AGP_ALLOC
-# define DRM_IOCTL_AGP_ALLOC 0xc0106434
-#endif
-#ifdef DRM_IOCTL_AGP_BIND
-# undef DRM_IOCTL_AGP_BIND
-# define DRM_IOCTL_AGP_BIND 0x40086436
-#endif
-#ifdef DRM_IOCTL_AGP_ENABLE
-# undef DRM_IOCTL_AGP_ENABLE
-# define DRM_IOCTL_AGP_ENABLE 0x40046432
-#endif
-#ifdef DRM_IOCTL_AGP_FREE
-# undef DRM_IOCTL_AGP_FREE
-# define DRM_IOCTL_AGP_FREE 0x40106435
-#endif
-#ifdef DRM_IOCTL_AGP_INFO
-# undef DRM_IOCTL_AGP_INFO
-# define DRM_IOCTL_AGP_INFO 0x80206433
-#endif
-#ifdef DRM_IOCTL_AGP_UNBIND
-# undef DRM_IOCTL_AGP_UNBIND
-# define DRM_IOCTL_AGP_UNBIND 0x40086437
-#endif
-#ifdef DRM_IOCTL_DMA
-# undef DRM_IOCTL_DMA
-# define DRM_IOCTL_DMA 0xc0286429
-#endif
-#ifdef DRM_IOCTL_FREE_BUFS
-# undef DRM_IOCTL_FREE_BUFS
-# define DRM_IOCTL_FREE_BUFS 0x4008641a
-#endif
-#ifdef DRM_IOCTL_GET_CLIENT
-# undef DRM_IOCTL_GET_CLIENT
-# define DRM_IOCTL_GET_CLIENT 0xc0186405
-#endif
-#ifdef DRM_IOCTL_GET_MAP
-# undef DRM_IOCTL_GET_MAP
-# define DRM_IOCTL_GET_MAP 0xc0186404
-#endif
-#ifdef DRM_IOCTL_GET_SAREA_CTX
-# undef DRM_IOCTL_GET_SAREA_CTX
-# define DRM_IOCTL_GET_SAREA_CTX 0xc008641d
-#endif
-#ifdef DRM_IOCTL_GET_STATS
-# undef DRM_IOCTL_GET_STATS
-# define DRM_IOCTL_GET_STATS 0x807c6406
-#endif
-#ifdef DRM_IOCTL_GET_UNIQUE
-# undef DRM_IOCTL_GET_UNIQUE
-# define DRM_IOCTL_GET_UNIQUE 0xc0086401
-#endif
-#ifdef DRM_IOCTL_I810_COPY
-# undef DRM_IOCTL_I810_COPY
-# define DRM_IOCTL_I810_COPY 0x400c6447
-#endif
-#ifdef DRM_IOCTL_I810_GETBUF
-# undef DRM_IOCTL_I810_GETBUF
-# define DRM_IOCTL_I810_GETBUF 0xc0106445
-#endif
-#ifdef DRM_IOCTL_I810_MC
-# undef DRM_IOCTL_I810_MC
-# define DRM_IOCTL_I810_MC 0x4014644c
-#endif
-#ifdef DRM_IOCTL_I915_ALLOC
-# undef DRM_IOCTL_I915_ALLOC
-# define DRM_IOCTL_I915_ALLOC 0xc0106448
-#endif
-#ifdef DRM_IOCTL_I915_BATCHBUFFER
-# undef DRM_IOCTL_I915_BATCHBUFFER
-# define DRM_IOCTL_I915_BATCHBUFFER 0x40186443
-#endif
-#ifdef DRM_IOCTL_I915_CMDBUFFER
-# undef DRM_IOCTL_I915_CMDBUFFER
-# define DRM_IOCTL_I915_CMDBUFFER 0x4018644b
-#endif
-#ifdef DRM_IOCTL_I915_GETPARAM
-# undef DRM_IOCTL_I915_GETPARAM
-# define DRM_IOCTL_I915_GETPARAM 0xc0086446
-#endif
-#ifdef DRM_IOCTL_I915_IRQ_EMIT
-# undef DRM_IOCTL_I915_IRQ_EMIT
-# define DRM_IOCTL_I915_IRQ_EMIT 0xc0046444
-#endif
-#ifdef DRM_IOCTL_INFO_BUFS
-# undef DRM_IOCTL_INFO_BUFS
-# define DRM_IOCTL_INFO_BUFS 0xc0086418
-#endif
-#ifdef DRM_IOCTL_MAP_BUFS
-# undef DRM_IOCTL_MAP_BUFS
-# define DRM_IOCTL_MAP_BUFS 0xc00c6419
-#endif
-#ifdef DRM_IOCTL_MARK_BUFS
-# undef DRM_IOCTL_MARK_BUFS
-# define DRM_IOCTL_MARK_BUFS 0x40186417
-#endif
-#ifdef DRM_IOCTL_MGA_DMA_BOOTSTRAP
-# undef DRM_IOCTL_MGA_DMA_BOOTSTRAP
-# define DRM_IOCTL_MGA_DMA_BOOTSTRAP 0xc01c644c
-#endif
-#ifdef DRM_IOCTL_MGA_GETPARAM
-# undef DRM_IOCTL_MGA_GETPARAM
-# define DRM_IOCTL_MGA_GETPARAM 0xc0086449
-#endif
-#ifdef DRM_IOCTL_MGA_INIT
-# undef DRM_IOCTL_MGA_INIT
-# define DRM_IOCTL_MGA_INIT 0x405c6440
-#endif
-#ifdef DRM_IOCTL_R128_DEPTH
-# undef DRM_IOCTL_R128_DEPTH
-# define DRM_IOCTL_R128_DEPTH 0x4018644c
-#endif
-#ifdef DRM_IOCTL_R128_GETPARAM
-# undef DRM_IOCTL_R128_GETPARAM
-# define DRM_IOCTL_R128_GETPARAM 0xc0086452
-#endif
-#ifdef DRM_IOCTL_R128_INIT
-# undef DRM_IOCTL_R128_INIT
-# define DRM_IOCTL_R128_INIT 0x40586440
-#endif
-#ifdef DRM_IOCTL_R128_STIPPLE
-# undef DRM_IOCTL_R128_STIPPLE
-# define DRM_IOCTL_R128_STIPPLE 0x4004644d
-#endif
-#ifdef DRM_IOCTL_RADEON_ALLOC
-# undef DRM_IOCTL_RADEON_ALLOC
-# define DRM_IOCTL_RADEON_ALLOC 0xc0106453
-#endif
-#ifdef DRM_IOCTL_RADEON_CLEAR
-# undef DRM_IOCTL_RADEON_CLEAR
-# define DRM_IOCTL_RADEON_CLEAR 0x40186448
-#endif
-#ifdef DRM_IOCTL_RADEON_CMDBUF
-# undef DRM_IOCTL_RADEON_CMDBUF
-# define DRM_IOCTL_RADEON_CMDBUF 0x40106450
-#endif
-#ifdef DRM_IOCTL_RADEON_CP_INIT
-# undef DRM_IOCTL_RADEON_CP_INIT
-# define DRM_IOCTL_RADEON_CP_INIT 0x40546440
-#endif
-#ifdef DRM_IOCTL_RADEON_GETPARAM
-# undef DRM_IOCTL_RADEON_GETPARAM
-# define DRM_IOCTL_RADEON_GETPARAM 0xc0086451
-#endif
-#ifdef DRM_IOCTL_RADEON_IRQ_EMIT
-# undef DRM_IOCTL_RADEON_IRQ_EMIT
-# define DRM_IOCTL_RADEON_IRQ_EMIT 0xc0046456
-#endif
-#ifdef DRM_IOCTL_RADEON_STIPPLE
-# undef DRM_IOCTL_RADEON_STIPPLE
-# define DRM_IOCTL_RADEON_STIPPLE 0x4004644c
-#endif
-#ifdef DRM_IOCTL_RADEON_TEXTURE
-# undef DRM_IOCTL_RADEON_TEXTURE
-# define DRM_IOCTL_RADEON_TEXTURE 0xc018644e
-#endif
-#ifdef DRM_IOCTL_RADEON_VERTEX2
-# undef DRM_IOCTL_RADEON_VERTEX2
-# define DRM_IOCTL_RADEON_VERTEX2 0x4018644f
-#endif
-#ifdef DRM_IOCTL_RES_CTX
-# undef DRM_IOCTL_RES_CTX
-# define DRM_IOCTL_RES_CTX 0xc0086426
-#endif
-#ifdef DRM_IOCTL_RM_MAP
-# undef DRM_IOCTL_RM_MAP
-# define DRM_IOCTL_RM_MAP 0x4018641b
-#endif
-#ifdef DRM_IOCTL_SAVAGE_BCI_CMDBUF
-# undef DRM_IOCTL_SAVAGE_BCI_CMDBUF
-# define DRM_IOCTL_SAVAGE_BCI_CMDBUF 0x40246441
-#endif
-#ifdef DRM_IOCTL_SAVAGE_BCI_INIT
-# undef DRM_IOCTL_SAVAGE_BCI_INIT
-# define DRM_IOCTL_SAVAGE_BCI_INIT 0x40506440
-#endif
-#ifdef DRM_IOCTL_SET_SAREA_CTX
-# undef DRM_IOCTL_SET_SAREA_CTX
-# define DRM_IOCTL_SET_SAREA_CTX 0x4008641c
-#endif
-#ifdef DRM_IOCTL_SET_UNIQUE
-# undef DRM_IOCTL_SET_UNIQUE
-# define DRM_IOCTL_SET_UNIQUE 0x40086410
-#endif
-#ifdef DRM_IOCTL_SG_ALLOC
-# undef DRM_IOCTL_SG_ALLOC
-# define DRM_IOCTL_SG_ALLOC 0xc0086438
-#endif
-#ifdef DRM_IOCTL_SG_FREE
-# undef DRM_IOCTL_SG_FREE
-# define DRM_IOCTL_SG_FREE 0x40086439
-#endif
-#ifdef DRM_IOCTL_SIS_AGP_ALLOC
-# undef DRM_IOCTL_SIS_AGP_ALLOC
-# define DRM_IOCTL_SIS_AGP_ALLOC 0xc0106454
-#endif
-#ifdef DRM_IOCTL_SIS_AGP_FREE
-# undef DRM_IOCTL_SIS_AGP_FREE
-# define DRM_IOCTL_SIS_AGP_FREE 0x40106455
-#endif
-#ifdef DRM_IOCTL_SIS_AGP_INIT
-# undef DRM_IOCTL_SIS_AGP_INIT
-# define DRM_IOCTL_SIS_AGP_INIT 0xc0086453
-#endif
-#ifdef DRM_IOCTL_SIS_FB_ALLOC
-# undef DRM_IOCTL_SIS_FB_ALLOC
-# define DRM_IOCTL_SIS_FB_ALLOC 0xc0106444
-#endif
-#ifdef DRM_IOCTL_SIS_FB_FREE
-# undef DRM_IOCTL_SIS_FB_FREE
-# define DRM_IOCTL_SIS_FB_FREE 0x40106445
-#endif
-#ifdef DRM_IOCTL_SIS_FB_INIT
-# undef DRM_IOCTL_SIS_FB_INIT
-# define DRM_IOCTL_SIS_FB_INIT 0x40086456
-#endif
-#ifdef DRM_IOCTL_VERSION
-# undef DRM_IOCTL_VERSION
-# define DRM_IOCTL_VERSION 0xc0246400
-#endif
-#ifdef DRM_IOCTL_VIA_ALLOCMEM
-# undef DRM_IOCTL_VIA_ALLOCMEM
-# define DRM_IOCTL_VIA_ALLOCMEM 0xc0146440
-#endif
-#ifdef DRM_IOCTL_VIA_CMDBUFFER
-# undef DRM_IOCTL_VIA_CMDBUFFER
-# define DRM_IOCTL_VIA_CMDBUFFER 0x40086448
-#endif
-#ifdef DRM_IOCTL_VIA_DMA_BLIT
-# undef DRM_IOCTL_VIA_DMA_BLIT
-# define DRM_IOCTL_VIA_DMA_BLIT 0x4028644e
-#endif
-#ifdef DRM_IOCTL_VIA_DMA_INIT
-# undef DRM_IOCTL_VIA_DMA_INIT
-# define DRM_IOCTL_VIA_DMA_INIT 0xc0106447
-#endif
-#ifdef DRM_IOCTL_VIA_FREEMEM
-# undef DRM_IOCTL_VIA_FREEMEM
-# define DRM_IOCTL_VIA_FREEMEM 0x40146441
-#endif
-#ifdef DRM_IOCTL_VIA_MAP_INIT
-# undef DRM_IOCTL_VIA_MAP_INIT
-# define DRM_IOCTL_VIA_MAP_INIT 0xc0146444
-#endif
-#ifdef DRM_IOCTL_VIA_PCICMD
-# undef DRM_IOCTL_VIA_PCICMD
-# define DRM_IOCTL_VIA_PCICMD 0x4008644a
-#endif
-#ifdef DRM_IOCTL_VIA_WAIT_IRQ
-# undef DRM_IOCTL_VIA_WAIT_IRQ
-# define DRM_IOCTL_VIA_WAIT_IRQ 0xc010644d
-#endif
-#ifdef DRM_IOCTL_WAIT_VBLANK
-# undef DRM_IOCTL_WAIT_VBLANK
-# define DRM_IOCTL_WAIT_VBLANK 0xc010643a
-#endif
-#ifdef ENI_MEMDUMP
-# undef ENI_MEMDUMP
-# define ENI_MEMDUMP 0x400c6160
-#endif
-#ifdef ENI_SETMULT
-# undef ENI_SETMULT
-# define ENI_SETMULT 0x400c6167
-#endif
-#ifdef EVIOCSFF
-# undef EVIOCSFF
-# define EVIOCSFF 0x402c4580
-#endif
-#ifdef FBIO_CURSOR
-# undef FBIO_CURSOR
-# define FBIO_CURSOR 0xc0484608
-#endif
-#ifdef FBIO_GETCONTROL2
-# undef FBIO_GETCONTROL2
-# define FBIO_GETCONTROL2 0x80044689
-#endif
-#ifdef FBIO_RADEON_GET_MIRROR
-# undef FBIO_RADEON_GET_MIRROR
-# define FBIO_RADEON_GET_MIRROR 0x80044003
-#endif
-#ifdef FBIO_RADEON_SET_MIRROR
-# undef FBIO_RADEON_SET_MIRROR
-# define FBIO_RADEON_SET_MIRROR 0x40044004
-#endif
-#ifdef FDDEFPRM
-# undef FDDEFPRM
-# define FDDEFPRM 0x401c0243
-#endif
-#ifdef FDGETDRVPRM
-# undef FDGETDRVPRM
-# define FDGETDRVPRM 0x80580211
-#endif
-#ifdef FDGETDRVSTAT
-# undef FDGETDRVSTAT
-# define FDGETDRVSTAT 0x80340212
-#endif
-#ifdef FDGETFDCSTAT
-# undef FDGETFDCSTAT
-# define FDGETFDCSTAT 0x80200215
-#endif
-#ifdef FDGETPRM
-# undef FDGETPRM
-# define FDGETPRM 0x801c0204
-#endif
-#ifdef FDPOLLDRVSTAT
-# undef FDPOLLDRVSTAT
-# define FDPOLLDRVSTAT 0x80340213
-#endif
-#ifdef FDSETDRVPRM
-# undef FDSETDRVPRM
-# define FDSETDRVPRM 0x40580290
-#endif
-#ifdef FDSETPRM
-# undef FDSETPRM
-# define FDSETPRM 0x401c0242
-#endif
-#ifdef FDWERRORGET
-# undef FDWERRORGET
-# define FDWERRORGET 0x80180217
-#endif
-#ifdef FE_GET_PROPERTY
-# undef FE_GET_PROPERTY
-# define FE_GET_PROPERTY 0x80086f53
-#endif
-#ifdef FE_SET_PROPERTY
-# undef FE_SET_PROPERTY
-# define FE_SET_PROPERTY 0x40086f52
-#endif
-#ifdef FS_IOC_GETFLAGS
-# undef FS_IOC_GETFLAGS
-# define FS_IOC_GETFLAGS 0x80046601
-#endif
-#ifdef FS_IOC_GETVERSION
-# undef FS_IOC_GETVERSION
-# define FS_IOC_GETVERSION 0x80047601
-#endif
-#ifdef FS_IOC_SETFLAGS
-# undef FS_IOC_SETFLAGS
-# define FS_IOC_SETFLAGS 0x40046602
-#endif
-#ifdef FS_IOC_SETVERSION
-# undef FS_IOC_SETVERSION
-# define FS_IOC_SETVERSION 0x40047602
-#endif
-#ifdef HE_GET_REG
-# undef HE_GET_REG
-# define HE_GET_REG 0x400c6160
-#endif
-#ifdef HFI1_IOCTL_ACK_EVENT
-# undef HFI1_IOCTL_ACK_EVENT
-# define HFI1_IOCTL_ACK_EVENT 0x40041bea
-#endif
-#ifdef HPET_INFO
-# undef HPET_INFO
-# define HPET_INFO 0x800c6803
-#endif
-#ifdef HPET_IRQFREQ
-# undef HPET_IRQFREQ
-# define HPET_IRQFREQ 0x40046806
-#endif
-#ifdef I2OHRTGET
-# undef I2OHRTGET
-# define I2OHRTGET 0xc00c6901
-#endif
-#ifdef I2OHTML
-# undef I2OHTML
-# define I2OHTML 0xc01c6909
-#endif
-#ifdef I2OLCTGET
-# undef I2OLCTGET
-# define I2OLCTGET 0xc00c6902
-#endif
-#ifdef I2OPARMGET
-# undef I2OPARMGET
-# define I2OPARMGET 0xc0186904
-#endif
-#ifdef I2OPARMSET
-# undef I2OPARMSET
-# define I2OPARMSET 0xc0186903
-#endif
-#ifdef I2OPASSTHRU
-# undef I2OPASSTHRU
-# define I2OPASSTHRU 0x8008690c
-#endif
-#ifdef I2OSWDEL
-# undef I2OSWDEL
-# define I2OSWDEL 0xc01c6907
-#endif
-#ifdef I2OSWDL
-# undef I2OSWDL
-# define I2OSWDL 0xc01c6905
-#endif
-#ifdef I2OSWUL
-# undef I2OSWUL
-# define I2OSWUL 0xc01c6906
-#endif
-#ifdef I8K_FN_STATUS
-# undef I8K_FN_STATUS
-# define I8K_FN_STATUS 0x80046983
-#endif
-#ifdef I8K_GET_FAN
-# undef I8K_GET_FAN
-# define I8K_GET_FAN 0xc0046986
-#endif
-#ifdef I8K_GET_SPEED
-# undef I8K_GET_SPEED
-# define I8K_GET_SPEED 0xc0046985
-#endif
-#ifdef I8K_GET_TEMP
-# undef I8K_GET_TEMP
-# define I8K_GET_TEMP 0x80046984
-#endif
-#ifdef I8K_POWER_STATUS
-# undef I8K_POWER_STATUS
-# define I8K_POWER_STATUS 0x80046982
-#endif
-#ifdef I8K_SET_FAN
-# undef I8K_SET_FAN
-# define I8K_SET_FAN 0xc0046987
-#endif
-#ifdef IDT77105_GETSTAT
-# undef IDT77105_GETSTAT
-# define IDT77105_GETSTAT 0x400c6132
-#endif
-#ifdef IDT77105_GETSTATZ
-# undef IDT77105_GETSTATZ
-# define IDT77105_GETSTATZ 0x400c6133
-#endif
-#ifdef IOCTL_GNTDEV_GRANT_COPY
-# undef IOCTL_GNTDEV_GRANT_COPY
-# define IOCTL_GNTDEV_GRANT_COPY 0x00084708
-#endif
-#ifdef ION_IOC_ALLOC
-# undef ION_IOC_ALLOC
-# define ION_IOC_ALLOC 0xc0144900
-#endif
-#ifdef ION_IOC_CUSTOM
-# undef ION_IOC_CUSTOM
-# define ION_IOC_CUSTOM 0xc0084906
-#endif
-#ifdef IOW_READ
-# undef IOW_READ
-# define IOW_READ 0x4004c002
-#endif
-#ifdef IOW_WRITE
-# undef IOW_WRITE
-# define IOW_WRITE 0x4004c001
-#endif
-#ifdef IPMICTL_RECEIVE_MSG
-# undef IPMICTL_RECEIVE_MSG
-# define IPMICTL_RECEIVE_MSG 0xc018690c
-#endif
-#ifdef IPMICTL_RECEIVE_MSG_TRUNC
-# undef IPMICTL_RECEIVE_MSG_TRUNC
-# define IPMICTL_RECEIVE_MSG_TRUNC 0xc018690b
-#endif
-#ifdef IPMICTL_SEND_COMMAND
-# undef IPMICTL_SEND_COMMAND
-# define IPMICTL_SEND_COMMAND 0x8014690d
-#endif
-#ifdef IPMICTL_SEND_COMMAND_SETTIME
-# undef IPMICTL_SEND_COMMAND_SETTIME
-# define IPMICTL_SEND_COMMAND_SETTIME 0x801c6915
-#endif
-#ifdef IVTVFB_IOC_DMA_FRAME
-# undef IVTVFB_IOC_DMA_FRAME
-# define IVTVFB_IOC_DMA_FRAME 0x400c56c0
-#endif
-#ifdef IVTV_IOC_DMA_FRAME
-# undef IVTV_IOC_DMA_FRAME
-# define IVTV_IOC_DMA_FRAME 0x403856c0
-#endif
-#ifdef IXJCTL_CID
-# undef IXJCTL_CID
-# define IXJCTL_CID 0x800471d4
-#endif
-#ifdef IXJCTL_CIDCW
-# undef IXJCTL_CIDCW
-# define IXJCTL_CIDCW 0x400471d9
-#endif
-#ifdef IXJCTL_DRYBUFFER_READ
-# undef IXJCTL_DRYBUFFER_READ
-# define IXJCTL_DRYBUFFER_READ 0x800471e6
-#endif
-#ifdef IXJCTL_FILTER_CADENCE
-# undef IXJCTL_FILTER_CADENCE
-# define IXJCTL_FILTER_CADENCE 0x400471d6
-#endif
-#ifdef IXJCTL_FRAMES_READ
-# undef IXJCTL_FRAMES_READ
-# define IXJCTL_FRAMES_READ 0x800471e2
-#endif
-#ifdef IXJCTL_FRAMES_WRITTEN
-# undef IXJCTL_FRAMES_WRITTEN
-# define IXJCTL_FRAMES_WRITTEN 0x800471e3
-#endif
-#ifdef IXJCTL_INIT_TONE
-# undef IXJCTL_INIT_TONE
-# define IXJCTL_INIT_TONE 0x400471c9
-#endif
-#ifdef IXJCTL_READ_WAIT
-# undef IXJCTL_READ_WAIT
-# define IXJCTL_READ_WAIT 0x800471e4
-#endif
-#ifdef IXJCTL_SET_FILTER
-# undef IXJCTL_SET_FILTER
-# define IXJCTL_SET_FILTER 0x400471c7
-#endif
-#ifdef IXJCTL_SET_FILTER_RAW
-# undef IXJCTL_SET_FILTER_RAW
-# define IXJCTL_SET_FILTER_RAW 0x400471dd
-#endif
-#ifdef IXJCTL_SIGCTL
-# undef IXJCTL_SIGCTL
-# define IXJCTL_SIGCTL 0x400471e9
-#endif
-#ifdef IXJCTL_TONE_CADENCE
-# undef IXJCTL_TONE_CADENCE
-# define IXJCTL_TONE_CADENCE 0x400471ca
-#endif
-#ifdef IXJCTL_VERSION
-# undef IXJCTL_VERSION
-# define IXJCTL_VERSION 0x800471da
-#endif
-#ifdef IXJCTL_WRITE_WAIT
-# undef IXJCTL_WRITE_WAIT
-# define IXJCTL_WRITE_WAIT 0x800471e5
-#endif
-#ifdef KCOV_INIT_TRACE
-# undef KCOV_INIT_TRACE
-# define KCOV_INIT_TRACE 0x80046301
-#endif
-#ifdef MATROXFB_GET_ALL_OUTPUTS
-# undef MATROXFB_GET_ALL_OUTPUTS
-# define MATROXFB_GET_ALL_OUTPUTS 0x80046efb
-#endif
-#ifdef MATROXFB_GET_AVAILABLE_OUTPUTS
-# undef MATROXFB_GET_AVAILABLE_OUTPUTS
-# define MATROXFB_GET_AVAILABLE_OUTPUTS 0x80046ef9
-#endif
-#ifdef MATROXFB_GET_OUTPUT_CONNECTION
-# undef MATROXFB_GET_OUTPUT_CONNECTION
-# define MATROXFB_GET_OUTPUT_CONNECTION 0x80046ef8
-#endif
-#ifdef MATROXFB_GET_OUTPUT_MODE
-# undef MATROXFB_GET_OUTPUT_MODE
-# define MATROXFB_GET_OUTPUT_MODE 0xc0046efa
-#endif
-#ifdef MATROXFB_SET_OUTPUT_CONNECTION
-# undef MATROXFB_SET_OUTPUT_CONNECTION
-# define MATROXFB_SET_OUTPUT_CONNECTION 0x40046ef8
-#endif
-#ifdef MATROXFB_SET_OUTPUT_MODE
-# undef MATROXFB_SET_OUTPUT_MODE
-# define MATROXFB_SET_OUTPUT_MODE 0x40046efa
-#endif
-#ifdef MEDIA_IOC_ENUM_LINKS
-# undef MEDIA_IOC_ENUM_LINKS
-# define MEDIA_IOC_ENUM_LINKS 0xc01c7c02
-#endif
-#ifdef MEMREADOOB
-# undef MEMREADOOB
-# define MEMREADOOB 0xc00c4d04
-#endif
-#ifdef MEMWRITEOOB
-# undef MEMWRITEOOB
-# define MEMWRITEOOB 0xc00c4d03
-#endif
-#ifdef MGSL_IOCGPARAMS
-# undef MGSL_IOCGPARAMS
-# define MGSL_IOCGPARAMS 0x80206d01
-#endif
-#ifdef MGSL_IOCSPARAMS
-# undef MGSL_IOCSPARAMS
-# define MGSL_IOCSPARAMS 0x40206d00
-#endif
-#ifdef MIC_VIRTIO_ADD_DEVICE
-# undef MIC_VIRTIO_ADD_DEVICE
-# define MIC_VIRTIO_ADD_DEVICE 0xc0047301
-#endif
-#ifdef MIC_VIRTIO_CONFIG_CHANGE
-# undef MIC_VIRTIO_CONFIG_CHANGE
-# define MIC_VIRTIO_CONFIG_CHANGE 0xc0047305
-#endif
-#ifdef MIC_VIRTIO_COPY_DESC
-# undef MIC_VIRTIO_COPY_DESC
-# define MIC_VIRTIO_COPY_DESC 0xc0047302
-#endif
-#ifdef MMTIMER_GETCOUNTER
-# undef MMTIMER_GETCOUNTER
-# define MMTIMER_GETCOUNTER 0x80046d09
-#endif
-#ifdef MMTIMER_GETFREQ
-# undef MMTIMER_GETFREQ
-# define MMTIMER_GETFREQ 0x80046d02
-#endif
-#ifdef MMTIMER_GETRES
-# undef MMTIMER_GETRES
-# define MMTIMER_GETRES 0x80046d01
-#endif
-#ifdef MTIOCGET
-# undef MTIOCGET
-# define MTIOCGET 0x801c6d02
-#endif
-#ifdef MTIOCPOS
-# undef MTIOCPOS
-# define MTIOCPOS 0x80046d03
-#endif
-#ifdef NCIUARTSETDRIVER
-# undef NCIUARTSETDRIVER
-# define NCIUARTSETDRIVER 0x40045500
-#endif
-#ifdef NCP_IOC_GET_FS_INFO_V2
-# undef NCP_IOC_GET_FS_INFO_V2
-# define NCP_IOC_GET_FS_INFO_V2 0xc0246e04
-#endif
-#ifdef NCP_IOC_GETMOUNTUID2
-# undef NCP_IOC_GETMOUNTUID2
-# define NCP_IOC_GETMOUNTUID2 0x40046e02
-#endif
-#ifdef NCP_IOC_GETOBJECTNAME
-# undef NCP_IOC_GETOBJECTNAME
-# define NCP_IOC_GETOBJECTNAME 0xc00c6e09
-#endif
-#ifdef NCP_IOC_GETPRIVATEDATA
-# undef NCP_IOC_GETPRIVATEDATA
-# define NCP_IOC_GETPRIVATEDATA 0xc0086e0a
-#endif
-#ifdef NCP_IOC_NCPREQUEST
-# undef NCP_IOC_NCPREQUEST
-# define NCP_IOC_NCPREQUEST 0x800c6e01
-#endif
-#ifdef NCP_IOC_SETOBJECTNAME
-# undef NCP_IOC_SETOBJECTNAME
-# define NCP_IOC_SETOBJECTNAME 0x800c6e09
-#endif
-#ifdef NCP_IOC_SETPRIVATEDATA
-# undef NCP_IOC_SETPRIVATEDATA
-# define NCP_IOC_SETPRIVATEDATA 0x80086e0a
-#endif
-#ifdef NS_GETPSTAT
-# undef NS_GETPSTAT
-# define NS_GETPSTAT 0xc00c6161
-#endif
-#ifdef NS_SETBUFLEV
-# undef NS_SETBUFLEV
-# define NS_SETBUFLEV 0x400c6162
-#endif
-#ifdef OMAPFB_MEMORY_READ
-# undef OMAPFB_MEMORY_READ
-# define OMAPFB_MEMORY_READ 0x80104f3a
-#endif
-#ifdef OSD_GET_CAPABILITY
-# undef OSD_GET_CAPABILITY
-# define OSD_GET_CAPABILITY 0x80086fa1
-#endif
-#ifdef OSD_SEND_CMD
-# undef OSD_SEND_CMD
-# define OSD_SEND_CMD 0x401c6fa0
-#endif
-#ifdef PERF_EVENT_IOC_ID
-# undef PERF_EVENT_IOC_ID
-# define PERF_EVENT_IOC_ID 0x80042407
-#endif
-#ifdef PERF_EVENT_IOC_SET_FILTER
-# undef PERF_EVENT_IOC_SET_FILTER
-# define PERF_EVENT_IOC_SET_FILTER 0x40042406
-#endif
-#ifdef PHN_GET_REG
-# undef PHN_GET_REG
-# define PHN_GET_REG 0xc0047000
-#endif
-#ifdef PHN_GET_REGS
-# undef PHN_GET_REGS
-# define PHN_GET_REGS 0xc0047002
-#endif
-#ifdef PHN_SET_REG
-# undef PHN_SET_REG
-# define PHN_SET_REG 0x40047001
-#endif
-#ifdef PHN_SET_REGS
-# undef PHN_SET_REGS
-# define PHN_SET_REGS 0x40047003
-#endif
-#ifdef PHONE_CAPABILITIES_CHECK
-# undef PHONE_CAPABILITIES_CHECK
-# define PHONE_CAPABILITIES_CHECK 0x40047182
-#endif
-#ifdef PHONE_CAPABILITIES_LIST
-# undef PHONE_CAPABILITIES_LIST
-# define PHONE_CAPABILITIES_LIST 0x80047181
-#endif
-#ifdef PHONE_QUERY_CODEC
-# undef PHONE_QUERY_CODEC
-# define PHONE_QUERY_CODEC 0xc00471a7
-#endif
-#ifdef PHONE_RING_START
-# undef PHONE_RING_START
-# define PHONE_RING_START 0x40047187
-#endif
-#ifdef PMU_IOC_CAN_SLEEP
-# undef PMU_IOC_CAN_SLEEP
-# define PMU_IOC_CAN_SLEEP 0x80044205
-#endif
-#ifdef PMU_IOC_GET_BACKLIGHT
-# undef PMU_IOC_GET_BACKLIGHT
-# define PMU_IOC_GET_BACKLIGHT 0x80044201
-#endif
-#ifdef PMU_IOC_GET_MODEL
-# undef PMU_IOC_GET_MODEL
-# define PMU_IOC_GET_MODEL 0x80044203
-#endif
-#ifdef PMU_IOC_GRAB_BACKLIGHT
-# undef PMU_IOC_GRAB_BACKLIGHT
-# define PMU_IOC_GRAB_BACKLIGHT 0x80044206
-#endif
-#ifdef PMU_IOC_HAS_ADB
-# undef PMU_IOC_HAS_ADB
-# define PMU_IOC_HAS_ADB 0x80044204
-#endif
-#ifdef PMU_IOC_SET_BACKLIGHT
-# undef PMU_IOC_SET_BACKLIGHT
-# define PMU_IOC_SET_BACKLIGHT 0x40044202
-#endif
-#ifdef PPPIOCGCOMPRESSORS
-# undef PPPIOCGCOMPRESSORS
-# define PPPIOCGCOMPRESSORS 0x80207486
-#endif
-#ifdef PPPIOCSACTIVE
-# undef PPPIOCSACTIVE
-# define PPPIOCSACTIVE 0x40087446
-#endif
-#ifdef PPPIOCSCOMPRESS
-# undef PPPIOCSCOMPRESS
-# define PPPIOCSCOMPRESS 0x400c744d
-#endif
-#ifdef PPPIOCSPASS
-# undef PPPIOCSPASS
-# define PPPIOCSPASS 0x40087447
-#endif
-#ifdef PPPOEIOCSFWD
-# undef PPPOEIOCSFWD
-# define PPPOEIOCSFWD 0x4004b100
-#endif
-#ifdef PPS_FETCH
-# undef PPS_FETCH
-# define PPS_FETCH 0xc00470a4
-#endif
-#ifdef PPS_GETCAP
-# undef PPS_GETCAP
-# define PPS_GETCAP 0x800470a3
-#endif
-#ifdef PPS_GETPARAMS
-# undef PPS_GETPARAMS
-# define PPS_GETPARAMS 0x800470a1
-#endif
-#ifdef PPS_KC_BIND
-# undef PPS_KC_BIND
-# define PPS_KC_BIND 0x400470a5
-#endif
-#ifdef PPS_SETPARAMS
-# undef PPS_SETPARAMS
-# define PPS_SETPARAMS 0x400470a2
-#endif
-#ifdef REISERFS_IOC_UNPACK
-# undef REISERFS_IOC_UNPACK
-# define REISERFS_IOC_UNPACK 0x4004cd01
-#endif
-#ifdef RTC_EPOCH_READ
-# undef RTC_EPOCH_READ
-# define RTC_EPOCH_READ 0x8004700d
-#endif
-#ifdef RTC_EPOCH_SET
-# undef RTC_EPOCH_SET
-# define RTC_EPOCH_SET 0x4004700e
-#endif
-#ifdef RTC_IRQP_READ
-# undef RTC_IRQP_READ
-# define RTC_IRQP_READ 0x8004700b
-#endif
-#ifdef RTC_IRQP_SET
-# undef RTC_IRQP_SET
-# define RTC_IRQP_SET 0x4004700c
-#endif
-#ifdef RTC_PLL_GET
-# undef RTC_PLL_GET
-# define RTC_PLL_GET 0x801c7011
-#endif
-#ifdef RTC_PLL_SET
-# undef RTC_PLL_SET
-# define RTC_PLL_SET 0x401c7012
-#endif
-#ifdef SNDCTL_DSP_MAPINBUF
-# undef SNDCTL_DSP_MAPINBUF
-# define SNDCTL_DSP_MAPINBUF 0x80085013
-#endif
-#ifdef SNDCTL_DSP_MAPOUTBUF
-# undef SNDCTL_DSP_MAPOUTBUF
-# define SNDCTL_DSP_MAPOUTBUF 0x80085014
-#endif
-#ifdef SNDRV_CTL_IOCTL_ELEM_LIST
-# undef SNDRV_CTL_IOCTL_ELEM_LIST
-# define SNDRV_CTL_IOCTL_ELEM_LIST 0xc0485510
-#endif
-#ifdef SNDRV_CTL_IOCTL_ELEM_READ
-# undef SNDRV_CTL_IOCTL_ELEM_READ
-# define SNDRV_CTL_IOCTL_ELEM_READ 0xc2c85512
-#endif
-#ifdef SNDRV_CTL_IOCTL_ELEM_WRITE
-# undef SNDRV_CTL_IOCTL_ELEM_WRITE
-# define SNDRV_CTL_IOCTL_ELEM_WRITE 0xc2c85513
-#endif
-#ifdef SNDRV_EMU10K1_IOCTL_CODE_PEEK
-# undef SNDRV_EMU10K1_IOCTL_CODE_PEEK
-# define SNDRV_EMU10K1_IOCTL_CODE_PEEK 0xc18c4812
-#endif
-#ifdef SNDRV_EMU10K1_IOCTL_CODE_POKE
-# undef SNDRV_EMU10K1_IOCTL_CODE_POKE
-# define SNDRV_EMU10K1_IOCTL_CODE_POKE 0x418c4811
-#endif
-#ifdef SNDRV_EMU10K1_IOCTL_TRAM_PEEK
-# undef SNDRV_EMU10K1_IOCTL_TRAM_PEEK
-# define SNDRV_EMU10K1_IOCTL_TRAM_PEEK 0xc00c4822
-#endif
-#ifdef SNDRV_EMU10K1_IOCTL_TRAM_POKE
-# undef SNDRV_EMU10K1_IOCTL_TRAM_POKE
-# define SNDRV_EMU10K1_IOCTL_TRAM_POKE 0x400c4821
-#endif
-#ifdef SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE
-# undef SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE
-# define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE 0x40044842
-#endif
-#ifdef SNDRV_HDSPM_IOCTL_GET_MIXER
-# undef SNDRV_HDSPM_IOCTL_GET_MIXER
-# define SNDRV_HDSPM_IOCTL_GET_MIXER 0x80044844
-#endif
-#ifdef SNDRV_HWDEP_IOCTL_DSP_LOAD
-# undef SNDRV_HWDEP_IOCTL_DSP_LOAD
-# define SNDRV_HWDEP_IOCTL_DSP_LOAD 0x40504803
-#endif
-#ifdef SNDRV_PCM_IOCTL_DELAY
-# undef SNDRV_PCM_IOCTL_DELAY
-# define SNDRV_PCM_IOCTL_DELAY 0x80044121
-#endif
-#ifdef SNDRV_PCM_IOCTL_FORWARD
-# undef SNDRV_PCM_IOCTL_FORWARD
-# define SNDRV_PCM_IOCTL_FORWARD 0x40044149
-#endif
-#ifdef SNDRV_PCM_IOCTL_HW_PARAMS
-# undef SNDRV_PCM_IOCTL_HW_PARAMS
-# define SNDRV_PCM_IOCTL_HW_PARAMS 0xc25c4111
-#endif
-#ifdef SNDRV_PCM_IOCTL_HW_REFINE
-# undef SNDRV_PCM_IOCTL_HW_REFINE
-# define SNDRV_PCM_IOCTL_HW_REFINE 0xc25c4110
-#endif
-#ifdef SNDRV_PCM_IOCTL_READI_FRAMES
-# undef SNDRV_PCM_IOCTL_READI_FRAMES
-# define SNDRV_PCM_IOCTL_READI_FRAMES 0x800c4151
-#endif
-#ifdef SNDRV_PCM_IOCTL_READN_FRAMES
-# undef SNDRV_PCM_IOCTL_READN_FRAMES
-# define SNDRV_PCM_IOCTL_READN_FRAMES 0x800c4153
-#endif
-#ifdef SNDRV_PCM_IOCTL_REWIND
-# undef SNDRV_PCM_IOCTL_REWIND
-# define SNDRV_PCM_IOCTL_REWIND 0x40044146
-#endif
-#ifdef SNDRV_PCM_IOCTL_STATUS
-# undef SNDRV_PCM_IOCTL_STATUS
-# define SNDRV_PCM_IOCTL_STATUS 0x80804120
-#endif
-#ifdef SNDRV_PCM_IOCTL_STATUS_EXT
-# undef SNDRV_PCM_IOCTL_STATUS_EXT
-# define SNDRV_PCM_IOCTL_STATUS_EXT 0xc0804124
-#endif
-#ifdef SNDRV_PCM_IOCTL_SW_PARAMS
-# undef SNDRV_PCM_IOCTL_SW_PARAMS
-# define SNDRV_PCM_IOCTL_SW_PARAMS 0xc0684113
-#endif
-#ifdef SNDRV_PCM_IOCTL_WRITEI_FRAMES
-# undef SNDRV_PCM_IOCTL_WRITEI_FRAMES
-# define SNDRV_PCM_IOCTL_WRITEI_FRAMES 0x400c4150
-#endif
-#ifdef SNDRV_PCM_IOCTL_WRITEN_FRAMES
-# undef SNDRV_PCM_IOCTL_WRITEN_FRAMES
-# define SNDRV_PCM_IOCTL_WRITEN_FRAMES 0x400c4152
-#endif
-#ifdef SNDRV_RAWMIDI_IOCTL_PARAMS
-# undef SNDRV_RAWMIDI_IOCTL_PARAMS
-# define SNDRV_RAWMIDI_IOCTL_PARAMS 0xc0205710
-#endif
-#ifdef SNDRV_RAWMIDI_IOCTL_STATUS
-# undef SNDRV_RAWMIDI_IOCTL_STATUS
-# define SNDRV_RAWMIDI_IOCTL_STATUS 0xc0305720
-#endif
-#ifdef SNDRV_SEQ_IOCTL_CREATE_PORT
-# undef SNDRV_SEQ_IOCTL_CREATE_PORT
-# define SNDRV_SEQ_IOCTL_CREATE_PORT 0xc0a45320
-#endif
-#ifdef SNDRV_SEQ_IOCTL_DELETE_PORT
-# undef SNDRV_SEQ_IOCTL_DELETE_PORT
-# define SNDRV_SEQ_IOCTL_DELETE_PORT 0x40a45321
-#endif
-#ifdef SNDRV_SEQ_IOCTL_GET_PORT_INFO
-# undef SNDRV_SEQ_IOCTL_GET_PORT_INFO
-# define SNDRV_SEQ_IOCTL_GET_PORT_INFO 0xc0a45322
-#endif
-#ifdef SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT
-# undef SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT
-# define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT 0xc0a45352
-#endif
-#ifdef SNDRV_SEQ_IOCTL_SET_PORT_INFO
-# undef SNDRV_SEQ_IOCTL_SET_PORT_INFO
-# define SNDRV_SEQ_IOCTL_SET_PORT_INFO 0x40a45323
-#endif
-#ifdef SNDRV_TIMER_IOCTL_GINFO
-# undef SNDRV_TIMER_IOCTL_GINFO
-# define SNDRV_TIMER_IOCTL_GINFO 0xc0e05403
-#endif
-#ifdef SNDRV_TIMER_IOCTL_GPARAMS
-# undef SNDRV_TIMER_IOCTL_GPARAMS
-# define SNDRV_TIMER_IOCTL_GPARAMS 0x403c5404
-#endif
-#ifdef SNDRV_TIMER_IOCTL_GSTATUS
-# undef SNDRV_TIMER_IOCTL_GSTATUS
-# define SNDRV_TIMER_IOCTL_GSTATUS 0xc0405405
-#endif
-#ifdef SNDRV_TIMER_IOCTL_INFO
-# undef SNDRV_TIMER_IOCTL_INFO
-# define SNDRV_TIMER_IOCTL_INFO 0x80e05411
-#endif
-#ifdef SPIOCSTYPE
-# undef SPIOCSTYPE
-# define SPIOCSTYPE 0x40047101
-#endif
-#ifdef TUNATTACHFILTER
-# undef TUNATTACHFILTER
-# define TUNATTACHFILTER 0x400854d5
-#endif
-#ifdef TUNDETACHFILTER
-# undef TUNDETACHFILTER
-# define TUNDETACHFILTER 0x400854d6
-#endif
-#ifdef TUNER_SET_CONFIG
-# undef TUNER_SET_CONFIG
-# define TUNER_SET_CONFIG 0x4008645c
-#endif
-#ifdef TUNGETFILTER
-# undef TUNGETFILTER
-# define TUNGETFILTER 0x800854db
-#endif
-#ifdef UDF_GETEABLOCK
-# undef UDF_GETEABLOCK
-# define UDF_GETEABLOCK 0x80046c41
-#endif
-#ifdef UDF_GETVOLIDENT
-# undef UDF_GETVOLIDENT
-# define UDF_GETVOLIDENT 0x80046c42
-#endif
-#ifdef UDF_RELOCATE_BLOCKS
-# undef UDF_RELOCATE_BLOCKS
-# define UDF_RELOCATE_BLOCKS 0xc0046c43
-#endif
-#ifdef UI_BEGIN_FF_UPLOAD
-# undef UI_BEGIN_FF_UPLOAD
-# define UI_BEGIN_FF_UPLOAD 0xc06055c8
-#endif
-#ifdef UI_END_FF_UPLOAD
-# undef UI_END_FF_UPLOAD
-# define UI_END_FF_UPLOAD 0x406055c9
-#endif
-#ifdef UI_SET_PHYS
-# undef UI_SET_PHYS
-# define UI_SET_PHYS 0x4004556c
-#endif
-#ifdef USBDEVFS_BULK
-# undef USBDEVFS_BULK
-# define USBDEVFS_BULK 0xc0105502
-#endif
-#ifdef USBDEVFS_CONTROL
-# undef USBDEVFS_CONTROL
-# define USBDEVFS_CONTROL 0xc0105500
-#endif
-#ifdef USBDEVFS_DISCSIGNAL
-# undef USBDEVFS_DISCSIGNAL
-# define USBDEVFS_DISCSIGNAL 0x8008550e
-#endif
-#ifdef USBDEVFS_IOCTL
-# undef USBDEVFS_IOCTL
-# define USBDEVFS_IOCTL 0xc00c5512
-#endif
-#ifdef USBDEVFS_REAPURB
-# undef USBDEVFS_REAPURB
-# define USBDEVFS_REAPURB 0x4004550c
-#endif
-#ifdef USBDEVFS_REAPURBNDELAY
-# undef USBDEVFS_REAPURBNDELAY
-# define USBDEVFS_REAPURBNDELAY 0x4004550d
-#endif
-#ifdef USBDEVFS_SUBMITURB
-# undef USBDEVFS_SUBMITURB
-# define USBDEVFS_SUBMITURB 0x802c550a
-#endif
-#ifdef UVCIOC_CTRL_MAP
-# undef UVCIOC_CTRL_MAP
-# define UVCIOC_CTRL_MAP 0xc0587520
-#endif
-#ifdef UVCIOC_CTRL_QUERY
-# undef UVCIOC_CTRL_QUERY
-# define UVCIOC_CTRL_QUERY 0xc00c7521
-#endif
-#ifdef VIDEO_SET_SPU_PALETTE
-# undef VIDEO_SET_SPU_PALETTE
-# define VIDEO_SET_SPU_PALETTE 0x40086f33
-#endif
-#ifdef VIDEO_STILLPICTURE
-# undef VIDEO_STILLPICTURE
-# define VIDEO_STILLPICTURE 0x40086f1e
-#endif
-#ifdef VIDIOC_AM437X_CCDC_CFG
-# undef VIDIOC_AM437X_CCDC_CFG
-# define VIDIOC_AM437X_CCDC_CFG 0x400456c1
-#endif
-#ifdef VIDIOC_CREATE_BUFS
-# undef VIDIOC_CREATE_BUFS
-# define VIDIOC_CREATE_BUFS 0xc0f8565c
-#endif
-#ifdef VIDIOC_DQBUF
-# undef VIDIOC_DQBUF
-# define VIDIOC_DQBUF 0xc0505611
-#endif
-#ifdef VIDIOC_G_EDID
-# undef VIDIOC_G_EDID
-# define VIDIOC_G_EDID 0xc0245628
-#endif
-#ifdef VIDIOC_G_EXT_CTRLS
-# undef VIDIOC_G_EXT_CTRLS
-# define VIDIOC_G_EXT_CTRLS 0xc0185647
-#endif
-#ifdef VIDIOC_G_FBUF
-# undef VIDIOC_G_FBUF
-# define VIDIOC_G_FBUF 0x802c560a
-#endif
-#ifdef VIDIOC_G_FMT
-# undef VIDIOC_G_FMT
-# define VIDIOC_G_FMT 0xc0cc5604
-#endif
-#ifdef VIDIOC_OMAP3ISP_CCDC_CFG
-# undef VIDIOC_OMAP3ISP_CCDC_CFG
-# define VIDIOC_OMAP3ISP_CCDC_CFG 0xc02056c1
-#endif
-#ifdef VIDIOC_OMAP3ISP_PRV_CFG
-# undef VIDIOC_OMAP3ISP_PRV_CFG
-# define VIDIOC_OMAP3ISP_PRV_CFG 0xc03c56c2
-#endif
-#ifdef VIDIOC_OMAP3ISP_STAT_EN
-# undef VIDIOC_OMAP3ISP_STAT_EN
-# define VIDIOC_OMAP3ISP_STAT_EN 0xc00456c7
-#endif
-#ifdef VIDIOC_OMAP3ISP_STAT_REQ
-# undef VIDIOC_OMAP3ISP_STAT_REQ
-# define VIDIOC_OMAP3ISP_STAT_REQ 0xc02056c6
-#endif
-#ifdef VIDIOC_PREPARE_BUF
-# undef VIDIOC_PREPARE_BUF
-# define VIDIOC_PREPARE_BUF 0xc050565d
-#endif
-#ifdef VIDIOC_QBUF
-# undef VIDIOC_QBUF
-# define VIDIOC_QBUF 0xc050560f
-#endif
-#ifdef VIDIOC_QUERYBUF
-# undef VIDIOC_QUERYBUF
-# define VIDIOC_QUERYBUF 0xc0505609
-#endif
-#ifdef VIDIOC_S_EDID
-# undef VIDIOC_S_EDID
-# define VIDIOC_S_EDID 0xc0245629
-#endif
-#ifdef VIDIOC_S_EXT_CTRLS
-# undef VIDIOC_S_EXT_CTRLS
-# define VIDIOC_S_EXT_CTRLS 0xc0185648
-#endif
-#ifdef VIDIOC_S_FBUF
-# undef VIDIOC_S_FBUF
-# define VIDIOC_S_FBUF 0x402c560b
-#endif
-#ifdef VIDIOC_S_FMT
-# undef VIDIOC_S_FMT
-# define VIDIOC_S_FMT 0xc0cc5605
-#endif
-#ifdef VIDIOC_SUBDEV_G_EDID
-# undef VIDIOC_SUBDEV_G_EDID
-# define VIDIOC_SUBDEV_G_EDID 0xc0245628
-#endif
-#ifdef VIDIOC_SUBDEV_S_EDID
-# undef VIDIOC_SUBDEV_S_EDID
-# define VIDIOC_SUBDEV_S_EDID 0xc0245629
-#endif
-#ifdef VIDIOC_TRY_EXT_CTRLS
-# undef VIDIOC_TRY_EXT_CTRLS
-# define VIDIOC_TRY_EXT_CTRLS 0xc0185649
-#endif
-#ifdef VIDIOC_TRY_FMT
-# undef VIDIOC_TRY_FMT
-# define VIDIOC_TRY_FMT 0xc0cc5640
-#endif
-#ifdef VPFE_CMD_S_CCDC_RAW_PARAMS
-# undef VPFE_CMD_S_CCDC_RAW_PARAMS
-# define VPFE_CMD_S_CCDC_RAW_PARAMS 0x400456c1
-#endif
-#ifdef ZATM_GETPOOL
-# undef ZATM_GETPOOL
-# define ZATM_GETPOOL 0x400c6161
-#endif
-#ifdef ZATM_GETPOOLZ
-# undef ZATM_GETPOOLZ
-# define ZATM_GETPOOLZ 0x400c6162
-#endif
-#ifdef ZATM_SETPOOL
-# undef ZATM_SETPOOL
-# define ZATM_SETPOOL 0x400c6163
-#endif
diff --git a/ioctlent0.h b/ioctlent0.h
index d075f3b..a3c1a4e 100644
--- a/ioctlent0.h
+++ b/ioctlent0.h
@@ -269,7 +269,6 @@
 { "IIOCNETGPN", 0x00004922 },
 { "IIOCDBGVAR", 0x0000497f },
 { "IIOCDRVCTL", 0x00004980 },
-{ "ION_IOC_TEST_SET_FD", 0x000049f0 },
 { "KIOCSOUND", 0x00004b2f },
 { "KDMKTONE", 0x00004b30 },
 { "KDGETLED", 0x00004b31 },
@@ -339,7 +338,9 @@
 { "OMAPFB_WAITFORVSYNC", 0x00004f39 },
 { "OMAPFB_WAITFORGO", 0x00004f3c },
 { "SNDCTL_DSP_RESET", 0x00005000 },
+{ "PCITEST_BAR", 0x00005001 },
 { "SNDCTL_DSP_SYNC", 0x00005001 },
+{ "PCITEST_LEGACY_IRQ", 0x00005002 },
 { "SNDCTL_DSP_POST", 0x00005008 },
 { "SNDCTL_DSP_NONBLOCK", 0x0000500e },
 { "SNDCTL_DSP_SETSYNCRO", 0x00005015 },
@@ -451,6 +452,7 @@
 { "TCSETXF", 0x00005434 },
 { "TCSETXW", 0x00005435 },
 { "TIOCVHANGUP", 0x00005437 },
+{ "TIOCGPTPEER", 0x00005441 },
 { "FIONCLEX", 0x00005450 },
 { "FIOCLEX", 0x00005451 },
 { "FIOASYNC", 0x00005452 },
@@ -476,6 +478,7 @@
 { "USBDEVFS_RESET", 0x00005514 },
 { "USBDEVFS_DISCONNECT", 0x00005516 },
 { "USBDEVFS_CONNECT", 0x00005517 },
+{ "USBDEVFS_GET_SPEED", 0x0000551f },
 { "VT_OPENQRY", 0x00005600 },
 { "VIDIOC_RESERVED", 0x00005601 },
 { "VT_GETMODE", 0x00005601 },
@@ -858,26 +861,6 @@
 { "NBD_SET_FLAGS", 0x0000ab0a },
 { "RAW_SETBIND", 0x0000ac00 },
 { "RAW_GETBIND", 0x0000ac01 },
-{ "KVM_GET_API_VERSION", 0x0000ae00 },
-{ "KVM_CREATE_VM", 0x0000ae01 },
-{ "KVM_CHECK_EXTENSION", 0x0000ae03 },
-{ "KVM_GET_VCPU_MMAP_SIZE", 0x0000ae04 },
-{ "KVM_S390_ENABLE_SIE", 0x0000ae06 },
-{ "KVM_CREATE_VCPU", 0x0000ae41 },
-{ "KVM_SET_NR_MMU_PAGES", 0x0000ae44 },
-{ "KVM_GET_NR_MMU_PAGES", 0x0000ae45 },
-{ "KVM_SET_TSS_ADDR", 0x0000ae47 },
-{ "KVM_CREATE_IRQCHIP", 0x0000ae60 },
-{ "KVM_CREATE_PIT", 0x0000ae64 },
-{ "KVM_REINJECT_CONTROL", 0x0000ae71 },
-{ "KVM_SET_BOOT_CPU_ID", 0x0000ae78 },
-{ "KVM_RUN", 0x0000ae80 },
-{ "KVM_S390_INITIAL_RESET", 0x0000ae97 },
-{ "KVM_NMI", 0x0000ae9a },
-{ "KVM_SET_TSC_KHZ", 0x0000aea2 },
-{ "KVM_GET_TSC_KHZ", 0x0000aea3 },
-{ "KVM_KVMCLOCK_CTRL", 0x0000aead },
-{ "KVM_SMI", 0x0000aeb7 },
 { "VHOST_SET_OWNER", 0x0000af01 },
 { "VHOST_RESET_OWNER", 0x0000af02 },
 { "BT_BMC_IOCTL_SMS_ATN", 0x0000b100 },
@@ -943,6 +926,7 @@
 { "PTP_ENABLE_PPS", 0x40043d04 },
 { "SNDRV_PCM_IOCTL_TSTAMP", 0x40044102 },
 { "SNDRV_PCM_IOCTL_TTSTAMP", 0x40044103 },
+{ "SNDRV_PCM_IOCTL_USER_PVERSION", 0x40044104 },
 { "AGPIOC_DEALLOCATE", 0x40044107 },
 { "SNDRV_PCM_IOCTL_PAUSE", 0x40044145 },
 { "SNDRV_PCM_IOCTL_LINK", 0x40044160 },
@@ -991,6 +975,7 @@
 { "OMAPFB_GET_UPDATE_MODE", 0x40044f2b },
 { "OMAPFB_LCD_TEST", 0x40044f2d },
 { "OMAPFB_CTRL_TEST", 0x40044f2e },
+{ "PCITEST_MSI", 0x40045003 },
 { "SNDCTL_DSP_SETTRIGGER", 0x40045010 },
 { "SNDCTL_DSP_PROFILE", 0x40045017 },
 { "SNDCTL_DSP_SETSPDIF", 0x40045042 },
@@ -1160,9 +1145,6 @@
 { "BTRFS_IOC_CLONE", 0x40049409 },
 { "FICLONE", 0x40049409 },
 { "BTRFS_IOC_BALANCE_CTL", 0x40049421 },
-{ "KVM_INTERRUPT", 0x4004ae86 },
-{ "KVM_SET_SIGNAL_MASK", 0x4004ae8b },
-{ "KVM_SET_MP_STATE", 0x4004ae99 },
 { "VHOST_SET_LOG_FD", 0x4004af07 },
 { "VHOST_SCSI_GET_ABI_VERSION", 0x4004af42 },
 { "VHOST_SCSI_SET_EVENTS_MISSED", 0x4004af43 },
@@ -1211,6 +1193,9 @@
 { "OMAPFB_SETUP_MEM", 0x40084f37 },
 { "OMAPFB_QUERY_MEM", 0x40084f38 },
 { "OMAPFB_SET_TEARSYNC", 0x40084f3e },
+{ "PCITEST_WRITE", 0x40085004 },
+{ "PCITEST_READ", 0x40085005 },
+{ "PCITEST_COPY", 0x40085006 },
 { "SNDCTL_SEQ_OUTOFBAND", 0x40085112 },
 { "RNDADDENTROPY", 0x40085203 },
 { "TFD_IOC_SET_TICKS", 0x40085400 },
@@ -1221,7 +1206,6 @@
 { "UI_SET_PHYS", 0x4008556c },
 { "VIDIOC_S_STD", 0x40085618 },
 { "VIDIOC_AM437X_CCDC_CFG", 0x400856c1 },
-{ "VPFE_CMD_S_CCDC_RAW_PARAMS", 0x400856c1 },
 { "DMA_BUF_IOCTL_SYNC", 0x40086200 },
 { "BINDER_SET_IDLE_TIMEOUT", 0x40086203 },
 { "CM_IOCSPTS", 0x40086302 },
@@ -1302,17 +1286,6 @@
 { "BTRFS_IOC_DEFAULT_SUBVOL", 0x40089413 },
 { "BTRFS_IOC_WAIT_SYNC", 0x40089416 },
 { "BTRFS_IOC_SUBVOL_SETFLAGS", 0x4008941a },
-{ "KVM_SET_IDENTITY_MAP_ADDR", 0x4008ae48 },
-{ "KVM_S390_VCPU_FAULT", 0x4008ae52 },
-{ "KVM_IRQ_LINE", 0x4008ae61 },
-{ "KVM_SET_GSI_ROUTING", 0x4008ae6a },
-{ "KVM_ASSIGN_SET_MSIX_NR", 0x4008ae73 },
-{ "KVM_SET_MSRS", 0x4008ae89 },
-{ "KVM_SET_CPUID", 0x4008ae8a },
-{ "KVM_SET_CPUID2", 0x4008ae90 },
-{ "KVM_SET_VAPIC_ADDR", 0x4008ae93 },
-{ "KVM_S390_STORE_STATUS", 0x4008ae95 },
-{ "KVM_X86_SETUP_MCE", 0x4008ae9c },
 { "VHOST_SET_FEATURES", 0x4008af00 },
 { "VHOST_SET_MEM_TABLE", 0x4008af03 },
 { "VHOST_SET_LOG_BASE", 0x4008af04 },
@@ -1371,14 +1344,6 @@
 { "SNDRV_USB_STREAM_IOCTL_SET_PARAMS", 0x40104890 },
 { "AMDKFD_IOC_DBG_ADDRESS_WATCH", 0x40104b0f },
 { "AMDKFD_IOC_DBG_WAVE_CONTROL", 0x40104b10 },
-{ "MTRRIOC_ADD_ENTRY", 0x40104d00 },
-{ "MTRRIOC_SET_ENTRY", 0x40104d01 },
-{ "MTRRIOC_DEL_ENTRY", 0x40104d02 },
-{ "MTRRIOC_KILL_ENTRY", 0x40104d04 },
-{ "MTRRIOC_ADD_PAGE_ENTRY", 0x40104d05 },
-{ "MTRRIOC_SET_PAGE_ENTRY", 0x40104d06 },
-{ "MTRRIOC_DEL_PAGE_ENTRY", 0x40104d07 },
-{ "MTRRIOC_KILL_PAGE_ENTRY", 0x40104d09 },
 { "MEMERASE64", 0x40104d14 },
 { "UBI_IOCSETVOLPROP", 0x40104f06 },
 { "OMAPFB_SET_COLOR_KEY", 0x40104f32 },
@@ -1466,16 +1431,7 @@
 { "GENWQE_WRITE_REG64", 0x4010a51f },
 { "GENWQE_WRITE_REG32", 0x4010a521 },
 { "GENWQE_WRITE_REG16", 0x4010a523 },
-{ "KVM_GET_DIRTY_LOG", 0x4010ae42 },
-{ "KVM_REGISTER_COALESCED_MMIO", 0x4010ae67 },
-{ "KVM_UNREGISTER_COALESCED_MMIO", 0x4010ae68 },
-{ "KVM_ASSIGN_SET_MSIX_ENTRY", 0x4010ae74 },
-{ "KVM_S390_INTERRUPT", 0x4010ae94 },
-{ "KVM_S390_SET_INITIAL_PSW", 0x4010ae96 },
-{ "KVM_DIRTY_TLB", 0x4010aeaa },
-{ "KVM_ARM_SET_DEVICE_ADDR", 0x4010aeab },
-{ "KVM_GET_ONE_REG", 0x4010aeab },
-{ "KVM_SET_ONE_REG", 0x4010aeac },
+{ "ASPEED_LPC_CTRL_IOCTL_MAP", 0x4010b201 },
 { "SNDRV_DM_FM_IOCTL_SET_VOICE", 0x40124823 },
 { "FDSETMAXERRS", 0x4014024c },
 { "ADD_NEW_DISK", 0x40140921 },
@@ -1512,12 +1468,6 @@
 { "IOC_PR_PREEMPT", 0x401870cb },
 { "IOC_PR_PREEMPT_ABORT", 0x401870cc },
 { "BTRFS_IOC_QGROUP_ASSIGN", 0x40189429 },
-{ "KVM_SET_MEMORY_REGION", 0x4018ae40 },
-{ "KVM_S390_UCAS_MAP", 0x4018ae50 },
-{ "KVM_S390_UCAS_UNMAP", 0x4018ae51 },
-{ "KVM_SET_DEVICE_ATTR", 0x4018aee1 },
-{ "KVM_GET_DEVICE_ATTR", 0x4018aee2 },
-{ "KVM_HAS_DEVICE_ATTR", 0x4018aee3 },
 { "MBXFB_IOCS_ALPHA", 0x4018f402 },
 { "UI_ABS_SETUP", 0x401c5504 },
 { "FS_IOC_FSSETXATTR", 0x401c5820 },
@@ -1526,8 +1476,6 @@
 { "FDSETPRM", 0x40200242 },
 { "FDDEFPRM", 0x40200243 },
 { "CS_CONFIG_BUFS", 0x4020431f },
-{ "ION_IOC_TEST_DMA_MAPPING", 0x402049f1 },
-{ "ION_IOC_TEST_KERNEL_MAPPING", 0x402049f2 },
 { "AMDKFD_IOC_SET_MEMORY_POLICY", 0x40204b04 },
 { "VIDIOC_SUBSCRIBE_EVENT", 0x4020565a },
 { "VIDIOC_UNSUBSCRIBE_EVENT", 0x4020565b },
@@ -1554,12 +1502,6 @@
 { "PPPIOCSXASYNCMAP", 0x4020744f },
 { "BTRFS_IOC_CLONE_RANGE", 0x4020940d },
 { "FICLONERANGE", 0x4020940d },
-{ "KVM_SET_MEMORY_ALIAS", 0x4020ae43 },
-{ "KVM_SET_USER_MEMORY_REGION", 0x4020ae46 },
-{ "KVM_IRQFD", 0x4020ae76 },
-{ "KVM_SIGNAL_MSI", 0x4020aea5 },
-{ "KVM_S390_SET_IRQ_STATE", 0x4020aeb5 },
-{ "KVM_S390_GET_IRQ_STATE", 0x4020aeb6 },
 { "SNDRV_COMPRESS_SET_METADATA", 0x40244314 },
 { "NVM_DEV_REMOVE", 0x40244c23 },
 { "NVM_DEV_FACTORY", 0x40244c25 },
@@ -1599,7 +1541,6 @@
 { "MGSL_IOCSPARAMS", 0x40306d00 },
 { "BTRFS_IOC_DEFRAG_RANGE", 0x40309410 },
 { "BTRFS_IOC_SET_FEATURES", 0x40309439 },
-{ "KVM_SET_CLOCK", 0x4030ae7b },
 { "GSMIOC_ENABLE_NET", 0x40344702 },
 { "SNDRV_TIMER_IOCTL_SELECT", 0x40345410 },
 { "VIDIOC_S_AUDIO", 0x40345622 },
@@ -1608,7 +1549,6 @@
 { "PTP_PEROUT_REQUEST", 0x40383d03 },
 { "VIDIOC_DBG_S_REGISTER", 0x4038564f },
 { "DRM_IOCTL_SAVAGE_BCI_CMDBUF", 0x40386441 },
-{ "KVM_XEN_HVM_CONFIG", 0x4038ae7a },
 { "DMX_SET_FILTER", 0x403c6f2b },
 { "SNDRV_SEQ_IOCTL_REMOVE_EVENTS", 0x4040534e },
 { "SNDRV_CTL_IOCTL_ELEM_LOCK", 0x40405514 },
@@ -1620,17 +1560,6 @@
 { "DRM_IOCTL_I915_GEM_EXECBUFFER2", 0x40406469 },
 { "JSIOCSAXMAP", 0x40406a31 },
 { "BTRFS_IOC_QUOTA_RESCAN", 0x4040942c },
-{ "KVM_ASSIGN_DEV_IRQ", 0x4040ae70 },
-{ "KVM_DEASSIGN_PCI_DEVICE", 0x4040ae72 },
-{ "KVM_DEASSIGN_DEV_IRQ", 0x4040ae75 },
-{ "KVM_CREATE_PIT2", 0x4040ae77 },
-{ "KVM_IOEVENTFD", 0x4040ae79 },
-{ "KVM_X86_SET_MCE", 0x4040ae9e },
-{ "KVM_SET_VCPU_EVENTS", 0x4040aea0 },
-{ "KVM_ASSIGN_SET_INTX_MASK", 0x4040aea4 },
-{ "KVM_S390_MEM_OP", 0x4040aeb1 },
-{ "KVM_S390_GET_SKEYS", 0x4040aeb2 },
-{ "KVM_S390_SET_SKEYS", 0x4040aeb3 },
 { "CXL_IOCTL_START_WORK", 0x4040ca00 },
 { "CXL_IOCTL_DOWNLOAD_IMAGE", 0x4040ca0a },
 { "CXL_IOCTL_VALIDATE_IMAGE", 0x4040ca0b },
@@ -1645,8 +1574,6 @@
 { "BC_TRANSACTION_SG", 0x40486311 },
 { "BC_REPLY_SG", 0x40486312 },
 { "BTRFS_IOC_SEND", 0x40489426 },
-{ "KVM_SET_GUEST_DEBUG", 0x4048ae9b },
-{ "KVM_S390_IRQ", 0x4048aeb4 },
 { "GSMIOC_SETCONF", 0x404c4701 },
 { "SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT", 0x404c534a },
 { "SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT", 0x40505330 },
@@ -1660,9 +1587,7 @@
 { "SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER", 0x40605346 },
 { "DRM_IOCTL_SAVAGE_BCI_INIT", 0x40606440 },
 { "UI_END_FF_UPLOAD", 0x406855c9 },
-{ "KVM_ENABLE_CAP", 0x4068aea3 },
 { "CHIOGELEM", 0x406c6310 },
-{ "KVM_SET_PIT2", 0x4070aea0 },
 { "HFI1_IOCTL_USER_INFO", 0x40781be3 },
 { "DRM_IOCTL_R128_INIT", 0x40786440 },
 { "DRM_IOCTL_RADEON_CP_INIT", 0x40786440 },
@@ -1671,13 +1596,10 @@
 { "NVM_DEV_CREATE", 0x40804c22 },
 { "UBI_IOCVOLCRBLK", 0x40804f07 },
 { "DRM_IOCTL_MGA_INIT", 0x40806440 },
-{ "KVM_PPC_GET_PVINFO", 0x4080aea1 },
-{ "KVM_SET_DEBUGREGS", 0x4080aea2 },
 { "SNDRV_COMPRESS_SET_PARAMS", 0x40844312 },
 { "V4L2_DEVICE_NOTIFY_EVENT", 0x40887602 },
 { "SNDRV_SEQ_IOCTL_DELETE_QUEUE", 0x408c5333 },
 { "VIDIOC_S_JPEGCOMP", 0x408c563e },
-{ "KVM_SET_REGS", 0x4090ae82 },
 { "UBI_IOCMKVOL", 0x40986f00 },
 { "SNDRV_SEQ_IOCTL_DELETE_PORT", 0x40a85321 },
 { "SNDRV_SEQ_IOCTL_SET_PORT_INFO", 0x40a85323 },
@@ -1699,14 +1621,10 @@
 { "IOC_OPAL_ACTIVATE_LSP", 0x411870df },
 { "IOC_OPAL_ADD_USR_TO_LR", 0x411870e4 },
 { "IOC_OPAL_LR_SETUP", 0x412870e3 },
-{ "KVM_SET_SREGS", 0x4138ae84 },
-{ "KVM_SET_XCRS", 0x4188aea7 },
-{ "KVM_SET_FPU", 0x41a0ae8d },
 { "SNDRV_EMU10K1_IOCTL_CODE_POKE", 0x41b04811 },
 { "IOC_OPAL_SET_PW", 0x422070e0 },
 { "PTP_SYS_OFFSET", 0x43403d05 },
 { "JSIOCSBTNMAP", 0x44006a33 },
-{ "KVM_SET_LAPIC", 0x4400ae8f },
 { "BTRFS_IOC_SNAP_CREATE", 0x50009401 },
 { "BTRFS_IOC_DEFRAG", 0x50009402 },
 { "BTRFS_IOC_RESIZE", 0x50009403 },
@@ -1719,7 +1637,6 @@
 { "BTRFS_IOC_SNAP_CREATE_V2", 0x50009417 },
 { "BTRFS_IOC_SUBVOL_CREATE_V2", 0x50009418 },
 { "BTRFS_IOC_RM_DEV_V2", 0x5000943a },
-{ "KVM_SET_XSAVE", 0x5000aea5 },
 { "HIDIOCSUSAGES", 0x501c4814 },
 { "UBI_IOCRNVOL", 0x51106f03 },
 { "SNDRV_SB_CSP_IOCTL_LOAD_CODE", 0x70124811 },
@@ -1800,9 +1717,6 @@
 { "IMCTRLREQ", 0x80044945 },
 { "IMCLEAR_L2", 0x80044946 },
 { "IMHOLD_L1", 0x80044948 },
-{ "MCE_GET_RECORD_LEN", 0x80044d01 },
-{ "MCE_GET_LOG_LEN", 0x80044d02 },
-{ "MCE_GETCLEAR_FLAGS", 0x80044d03 },
 { "MEMGETREGIONCOUNT", 0x80044d07 },
 { "MFB_GET_PIXFMT", 0x80044d08 },
 { "OTPSELECT", 0x80044d0d },
@@ -1944,8 +1858,8 @@
 { "AUTOFS_IOC_PROTOVER", 0x80049363 },
 { "AUTOFS_IOC_PROTOSUBVER", 0x80049367 },
 { "AUTOFS_IOC_ASKUMOUNT", 0x80049370 },
+{ "TEE_IOC_CLOSE_SESSION", 0x8004a405 },
 { "GENWQE_GET_CARD_STATE", 0x8004a524 },
-{ "KVM_GET_MP_STATE", 0x8004ae98 },
 { "CXL_IOCTL_GET_PROCESS_ELEMENT", 0x8004ca01 },
 { "FUSE_DEV_IOC_CLONE", 0x8004e500 },
 { "SISFB_GET_INFO_SIZE", 0x8004f300 },
@@ -2030,7 +1944,7 @@
 { "FS_IOC_GETVERSION", 0x80087601 },
 { "BTRFS_IOC_START_SYNC", 0x80089418 },
 { "BTRFS_IOC_SUBVOL_GETFLAGS", 0x80089419 },
-{ "KVM_X86_GET_MCE_CAP_SUPPORTED", 0x8008ae9d },
+{ "TEE_IOC_CANCEL", 0x8008a404 },
 { "VHOST_GET_FEATURES", 0x8008af00 },
 { "FUNCTIONFS_ENDPOINT_DESC", 0x80096782 },
 { "DMX_GET_PES_PIDS", 0x800a6f2f },
@@ -2047,6 +1961,7 @@
 { "VIDEO_GET_SIZE", 0x800c6f37 },
 { "FE_DISEQC_RECV_SLAVE_REPLY", 0x800c6f40 },
 { "CA_GET_SLOT_INFO", 0x800c6f82 },
+{ "TEE_IOC_VERSION", 0x800ca400 },
 { "FDGETDRVTYP", 0x8010020f },
 { "FW_CDEV_IOC_GET_CYCLE_TIMER", 0x8010230c },
 { "STP_POLICY_ID_GET", 0x80102501 },
@@ -2060,6 +1975,7 @@
 { "SNDCTL_DSP_MAPOUTBUF", 0x80105014 },
 { "TUNGETFILTER", 0x801054db },
 { "USBDEVFS_DISCSIGNAL", 0x8010550e },
+{ "SWITCHTEC_IOCTL_FLASH_INFO", 0x80105740 },
 { "DRM_IOCTL_I915_GEM_GET_APERTURE", 0x80106463 },
 { "I2OPASSTHRU", 0x8010690c },
 { "MGSL_IOCGGPIO", 0x80106d11 },
@@ -2075,13 +1991,15 @@
 { "BR_DECREFS", 0x8010720a },
 { "PPPIOCGIDLE", 0x8010743f },
 { "PPPIOCGIFNAME", 0x80107488 },
+{ "TEE_IOC_OPEN_SESSION", 0x8010a402 },
+{ "TEE_IOC_INVOKE", 0x8010a403 },
+{ "TEE_IOC_SUPPL_RECV", 0x8010a406 },
+{ "TEE_IOC_SUPPL_SEND", 0x8010a407 },
 { "GENWQE_READ_REG64", 0x8010a51e },
 { "GENWQE_READ_REG32", 0x8010a520 },
 { "GENWQE_READ_REG16", 0x8010a522 },
 { "UFFDIO_UNREGISTER", 0x8010aa01 },
 { "UFFDIO_WAKE", 0x8010aa02 },
-{ "KVM_PPC_RESIZE_HPT_PREPARE", 0x8010aead },
-{ "KVM_PPC_RESIZE_HPT_COMMIT", 0x8010aeae },
 { "FDGETMAXERRS", 0x8014020e },
 { "GET_DISK_INFO", 0x80140912 },
 { "SNDRV_COMPRESS_TSTAMP", 0x80144320 },
@@ -2148,7 +2066,6 @@
 { "RIO_MPORT_GET_PROPERTIES", 0x80306d04 },
 { "NILFS_IOCTL_GET_SUSTAT", 0x80306e85 },
 { "BTRFS_IOC_QGROUP_LIMIT", 0x8030942b },
-{ "KVM_GET_CLOCK", 0x8030ae7c },
 { "VIDIOC_G_AUDIO", 0x80345621 },
 { "VIDIOC_G_AUDOUT", 0x80345631 },
 { "USBDEVFS_SUBMITURB", 0x8038550a },
@@ -2160,14 +2077,11 @@
 { "BR_REPLY", 0x80407203 },
 { "PPPIOCGCOMPRESSORS", 0x80407486 },
 { "BTRFS_IOC_QUOTA_RESCAN_STATUS", 0x8040942d },
-{ "KVM_ASSIGN_PCI_DEVICE", 0x8040ae69 },
-{ "KVM_GET_VCPU_EVENTS", 0x8040ae9f },
 { "CXL_IOCTL_GET_AFU_ID", 0x8040ca02 },
 { "GPIO_GET_CHIPINFO_IOCTL", 0x8044b401 },
 { "GET_ARRAY_INFO", 0x80480911 },
 { "PPPIOCGL2TPSTATS", 0x80487436 },
 { "BTRFS_IOC_GET_SUPPORTED_FEATURES", 0x80489439 },
-{ "KVM_SET_PIT", 0x8048ae66 },
 { "GSMIOC_GETCONF", 0x804c4700 },
 { "FDGETDRVSTAT", 0x80500212 },
 { "FDPOLLDRVSTAT", 0x80500213 },
@@ -2178,16 +2092,13 @@
 { "VIDIOC_QUERYCAP", 0x80685600 },
 { "I2OEVTGET", 0x8068690b },
 { "CHIOGVPARAMS", 0x80706313 },
-{ "KVM_GET_PIT2", 0x8070ae9f },
 { "SNDRV_COMPRESS_GET_PARAMS", 0x80784313 },
 { "FDGETDRVPRM", 0x80800211 },
 { "USBDEVFS_HUB_PORTINFO", 0x80805513 },
-{ "KVM_GET_DEBUGREGS", 0x8080aea1 },
 { "VIDIOC_QUERY_DV_TIMINGS", 0x80845663 },
 { "VIDIOC_SUBDEV_QUERY_DV_TIMINGS", 0x80845663 },
 { "VIDIOC_DQEVENT", 0x80885659 },
 { "VIDIOC_G_JPEGCOMP", 0x808c563d },
-{ "KVM_GET_REGS", 0x8090ae81 },
 { "SNDRV_PCM_IOCTL_STATUS", 0x80984120 },
 { "FE_GET_INFO", 0x80a86f3d },
 { "MEMGETOOBSEL", 0x80c84d0a },
@@ -2204,21 +2115,16 @@
 { "AUTOFS_IOC_EXPIRE", 0x810c9365 },
 { "SISFB_GET_INFO", 0x811cf301 },
 { "SNDRV_PCM_IOCTL_INFO", 0x81204101 },
-{ "KVM_GET_SREGS", 0x8138ae83 },
 { "ECCGETLAYOUT", 0x81484d11 },
 { "SNDRV_CTL_IOCTL_CARD_INFO", 0x81785501 },
-{ "KVM_GET_XCRS", 0x8188aea6 },
 { "AMDKFD_IOC_GET_PROCESS_APERTURES", 0x81904b06 },
-{ "KVM_GET_FPU", 0x81a0ae8c },
-{ "KVM_SET_IRQCHIP", 0x8208ae63 },
+{ "SWITCHTEC_IOCTL_EVENT_SUMMARY", 0x81985742 },
 { "VFAT_IOCTL_READDIR_BOTH", 0x82307201 },
 { "VFAT_IOCTL_READDIR_SHORT", 0x82307202 },
-{ "KVM_PPC_GET_SMMU_INFO", 0x8250aea6 },
 { "SNDRV_HDSP_IOCTL_GET_PEAK_RMS", 0x83b04840 },
 { "JSIOCGBTNMAP", 0x84006a34 },
 { "BTRFS_IOC_FS_INFO", 0x8400941f },
 { "BTRFS_IOC_BALANCE_PROGRESS", 0x84009422 },
-{ "KVM_GET_LAPIC", 0x8400ae8e },
 { "VIDEO_GET_NAVI", 0x84046f34 },
 { "SNDRV_EMU10K1_IOCTL_INFO", 0x880c4810 },
 { "VIDIOC_G_ENC_INDEX", 0x8818564c },
@@ -2228,7 +2134,6 @@
 { "SNDRV_HDSP_IOCTL_GET_MIXER", 0x90004844 },
 { "NVM_GET_DEVICES", 0x90004c21 },
 { "BTRFS_IOC_DEVICES_READY", 0x90009427 },
-{ "KVM_GET_XSAVE", 0x9000aea4 },
 { "HIDIOCGRDESC", 0x90044802 },
 { "GADGET_SET_PRINTER_STATUS", 0xc0016722 },
 { "RIO_CM_CHAN_CREATE", 0xc0026303 },
@@ -2236,7 +2141,6 @@
 { "CAPI_GET_SERIAL", 0xc0044308 },
 { "GIGASET_REDIR", 0xc0044700 },
 { "GIGASET_CONFIG", 0xc0044701 },
-{ "ION_IOC_FREE", 0xc0044901 },
 { "SOUND_MIXER_AGC", 0xc0044d67 },
 { "SOUND_MIXER_3DSE", 0xc0044d68 },
 { "SOUND_MIXER_PRIVATE1", 0xc0044d6f },
@@ -2290,17 +2194,11 @@
 { "PPPIOCNEWUNIT", 0xc004743e },
 { "MEYEIOC_SYNC", 0xc00476c3 },
 { "AUTOFS_IOC_SETTIMEOUT32", 0xc0049364 },
-{ "KVM_GET_MSR_INDEX_LIST", 0xc004ae02 },
-{ "KVM_PPC_ALLOCATE_HTAB", 0xc004aea7 },
 { "NET_ADD_IF", 0xc0066f34 },
 { "NET_GET_IF", 0xc0066f36 },
 { "AGPIOC_ALLOCATE", 0xc0084106 },
 { "HDA_IOCTL_VERB_WRITE", 0xc0084811 },
 { "HDA_IOCTL_GET_WCAP", 0xc0084812 },
-{ "ION_IOC_MAP", 0xc0084902 },
-{ "ION_IOC_SHARE", 0xc0084904 },
-{ "ION_IOC_IMPORT", 0xc0084905 },
-{ "ION_IOC_SYNC", 0xc0084907 },
 { "AMDKFD_IOC_DESTROY_QUEUE", 0xc0084b03 },
 { "ND_IOCTL_DIMM_FLAGS", 0xc0084e03 },
 { "ND_IOCTL_SET_CONFIG_DATA", 0xc0084e06 },
@@ -2329,6 +2227,7 @@
 { "DRM_IOCTL_VIRTGPU_WAIT", 0xc0086448 },
 { "DRM_IOCTL_TEGRA_GEM_SET_FLAGS", 0xc008644c },
 { "DRM_IOCTL_TEGRA_GEM_GET_FLAGS", 0xc008644d },
+{ "DRM_IOCTL_AMDGPU_VM", 0xc0086453 },
 { "DRM_IOCTL_RADEON_IRQ_EMIT", 0xc0086456 },
 { "DRM_IOCTL_I915_GEM_BUSY", 0xc0086457 },
 { "DRM_IOCTL_EXYNOS_G2D_GET_VER", 0xc0086460 },
@@ -2338,6 +2237,8 @@
 { "DRM_IOCTL_I915_GEM_CONTEXT_CREATE", 0xc008646d },
 { "DRM_IOCTL_I915_GEM_GET_CACHING", 0xc0086470 },
 { "DRM_IOCTL_EXYNOS_IPP_CMD_CTRL", 0xc0086473 },
+{ "DRM_IOCTL_SYNCOBJ_CREATE", 0xc00864bf },
+{ "DRM_IOCTL_SYNCOBJ_DESTROY", 0xc00864c0 },
 { "I8K_GET_SPEED", 0xc0086985 },
 { "I8K_GET_FAN", 0xc0086986 },
 { "I8K_SET_FAN", 0xc0086987 },
@@ -2356,12 +2257,6 @@
 { "SCIF_ACCEPTREG", 0xc0087305 },
 { "PPPIOCGNPMODE", 0xc008744c },
 { "AUTOFS_IOC_SETTIMEOUT", 0xc0089364 },
-{ "KVM_GET_SUPPORTED_CPUID", 0xc008ae05 },
-{ "KVM_GET_EMULATED_CPUID", 0xc008ae09 },
-{ "KVM_IRQ_LINE_STATUS", 0xc008ae67 },
-{ "KVM_GET_MSRS", 0xc008ae88 },
-{ "KVM_GET_CPUID2", 0xc008ae91 },
-{ "KVM_GET_REG_LIST", 0xc008aeb0 },
 { "FSL_HV_IOCTL_PARTITION_RESTART", 0xc008af01 },
 { "FSL_HV_IOCTL_PARTITION_STOP", 0xc008af04 },
 { "FSL_HV_IOCTL_DOORBELL", 0xc008af06 },
@@ -2374,6 +2269,8 @@
 { "SNDCTL_SYNTH_REMOVESAMPLE", 0xc00c5116 },
 { "USBDEVFS_IOCTL32", 0xc00c5512 },
 { "UI_BEGIN_FF_ERASE", 0xc00c55ca },
+{ "SWITCHTEC_IOCTL_PFF_TO_PORT", 0xc00c5744 },
+{ "SWITCHTEC_IOCTL_PORT_TO_PFF", 0xc00c5745 },
 { "DRM_IOCTL_PRIME_HANDLE_TO_FD", 0xc00c642d },
 { "DRM_IOCTL_PRIME_FD_TO_HANDLE", 0xc00c642e },
 { "DRM_IOCTL_MSM_GEM_MADVISE", 0xc00c6448 },
@@ -2383,7 +2280,6 @@
 { "DRM_IOCTL_I915_GEM_MADVISE", 0xc00c6466 },
 { "DRM_IOCTL_RADEON_GEM_SET_TILING", 0xc00c6468 },
 { "DRM_IOCTL_RADEON_GEM_GET_TILING", 0xc00c6469 },
-{ "KVM_CREATE_DEVICE", 0xc00caee0 },
 { "FSL_HV_IOCTL_PARTITION_GET_STATUS", 0xc00caf02 },
 { "MBXFB_IOCX_REG", 0xc00cf405 },
 { "BLKREPORTZONE", 0xc0101282 },
@@ -2396,7 +2292,6 @@
 { "SNDRV_EMU10K1_IOCTL_TRAM_PEEK", 0xc0104822 },
 { "SNDRV_EMUX_IOCTL_LOAD_PATCH", 0xc0104881 },
 { "SNDRV_EMUX_IOCTL_MISC_MODE", 0xc0104884 },
-{ "ION_IOC_CUSTOM", 0xc0104906 },
 { "MEMWRITEOOB", 0xc0104d03 },
 { "MEMREADOOB", 0xc0104d04 },
 { "MEMGETREGIONINFO", 0xc0104d08 },
@@ -2404,6 +2299,7 @@
 { "USBDEVFS_CONTROL32", 0xc0105500 },
 { "USBDEVFS_BULK32", 0xc0105502 },
 { "USBDEVFS_IOCTL", 0xc0105512 },
+{ "SWITCHTEC_IOCTL_FLASH_PART_INFO", 0xc0105741 },
 { "NS_GETPSTAT", 0xc0106161 },
 { "RIO_CM_CHAN_RECEIVE", 0xc010630a },
 { "DRM_IOCTL_GET_UNIQUE", 0xc0106401 },
@@ -2447,8 +2343,10 @@
 { "DRM_IOCTL_EXYNOS_VIDI_CONNECTION", 0xc0106447 },
 { "DRM_IOCTL_TEGRA_GET_SYNCPT", 0xc0106447 },
 { "DRM_IOCTL_VC4_GET_PARAM", 0xc0106447 },
+{ "DRM_IOCTL_VC4_SET_TILING", 0xc0106448 },
 { "DRM_IOCTL_MGA_GETPARAM", 0xc0106449 },
 { "DRM_IOCTL_TEGRA_GET_SYNCPT_BASE", 0xc0106449 },
+{ "DRM_IOCTL_VC4_GET_TILING", 0xc0106449 },
 { "DRM_IOCTL_TEGRA_GEM_SET_TILING", 0xc010644a },
 { "DRM_IOCTL_TEGRA_GEM_GET_TILING", 0xc010644b },
 { "DRM_IOCTL_RADEON_INDIRECT", 0xc010644d },
@@ -2470,6 +2368,8 @@
 { "DRM_IOCTL_MODE_MAP_DUMB", 0xc01064b3 },
 { "DRM_IOCTL_MODE_GETPLANERESOURCES", 0xc01064b5 },
 { "DRM_IOCTL_MODE_CREATEPROPBLOB", 0xc01064bd },
+{ "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", 0xc01064c1 },
+{ "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", 0xc01064c2 },
 { "MGSL_IOCWAITGPIO", 0xc0106d12 },
 { "NCP_IOC_GETPRIVATEDATA", 0xc0106e0a },
 { "DMX_GET_STC", 0xc0106f32 },
@@ -2479,7 +2379,9 @@
 { "UVCIOC_CTRL_QUERY", 0xc0107521 },
 { "BTRFS_IOC_SPACE_INFO", 0xc0109414 },
 { "BTRFS_IOC_QUOTA_CTL", 0xc0109428 },
+{ "TEE_IOC_SHM_ALLOC", 0xc010a401 },
 { "FSL_HV_IOCTL_PARTITION_START", 0xc010af03 },
+{ "ASPEED_LPC_CTRL_IOCTL_GET_SIZE", 0xc010b200 },
 { "SNDCTL_COPR_RDATA", 0xc0144302 },
 { "SNDCTL_COPR_RCODE", 0xc0144303 },
 { "SNDCTL_COPR_RUN", 0xc0144306 },
@@ -2501,10 +2403,9 @@
 { "FW_CDEV_IOC_SEND_PHY_PACKET", 0xc0182315 },
 { "HIDIOCGUSAGE", 0xc018480b },
 { "HIDIOCGUCODE", 0xc018480d },
+{ "ION_IOC_ALLOC", 0xc0184900 },
 { "ION_IOC_HEAP_QUERY", 0xc0184908 },
 { "AMDKFD_IOC_WAIT_EVENTS", 0xc0184b0c },
-{ "MTRRIOC_GET_ENTRY", 0xc0184d03 },
-{ "MTRRIOC_GET_PAGE_ENTRY", 0xc0184d08 },
 { "MEMWRITEOOB64", 0xc0184d15 },
 { "MEMREADOOB64", 0xc0184d16 },
 { "USBDEVFS_CONTROL", 0xc0185500 },
@@ -2566,7 +2467,6 @@
 { "BTRFS_IOC_FILE_EXTENT_SAME", 0xc0189436 },
 { "FIDEDUPERANGE", 0xc0189436 },
 { "UFFDIO_API", 0xc018aa3f },
-{ "KVM_TRANSLATE", 0xc018ae85 },
 { "IB_USER_MAD_REGISTER_AGENT", 0xc01c1b01 },
 { "HFI1_IOCTL_ASSIGN_CTXT", 0xc01c1be1 },
 { "SI4713_IOC_MEASURE_RNL", 0xc01c56c0 },
@@ -2575,7 +2475,6 @@
 { "DRM_IOCTL_MODE_ADDFB", 0xc01c64ae },
 { "FW_CDEV_IOC_ALLOCATE", 0xc0202302 },
 { "FW_CDEV_IOC_CREATE_ISO_CONTEXT", 0xc0202308 },
-{ "ION_IOC_ALLOC", 0xc0204900 },
 { "AMDKFD_IOC_CREATE_EVENT", 0xc0204b08 },
 { "ND_IOCTL_ARS_CAP", 0xc0204e01 },
 { "ND_IOCTL_ARS_START", 0xc0204e02 },
@@ -2584,8 +2483,6 @@
 { "VIDIOC_S_EXT_CTRLS", 0xc0205648 },
 { "VIDIOC_TRY_EXT_CTRLS", 0xc0205649 },
 { "VIDIOC_OMAP3ISP_AEWB_CFG", 0xc02056c3 },
-{ "X86_IOC_RDMSR_REGS", 0xc02063a0 },
-{ "X86_IOC_WRMSR_REGS", 0xc02063a1 },
 { "DRM_IOCTL_ADD_BUFS", 0xc0206416 },
 { "DRM_IOCTL_AGP_ALLOC", 0xc0206434 },
 { "DRM_IOCTL_AMDGPU_GEM_CREATE", 0xc0206440 },
@@ -2626,6 +2523,7 @@
 { "VIDIOC_ENCODER_CMD", 0xc028564d },
 { "VIDIOC_TRY_ENCODER_CMD", 0xc028564e },
 { "VIDIOC_OMAP3ISP_STAT_REQ", 0xc02856c6 },
+{ "SWITCHTEC_IOCTL_EVENT_CTL", 0xc0285743 },
 { "DRM_IOCTL_GET_MAP", 0xc0286404 },
 { "DRM_IOCTL_GET_CLIENT", 0xc0286405 },
 { "DRM_IOCTL_ADD_MAP", 0xc0286415 },
@@ -2649,7 +2547,6 @@
 { "SCIF_FENCE_SIGNAL", 0xc0287311 },
 { "MEDIA_IOC_ENUM_LINKS", 0xc0287c02 },
 { "UFFDIO_COPY", 0xc028aa03 },
-{ "KVM_TPR_ACCESS_REPORTING", 0xc028ae92 },
 { "FSL_HV_IOCTL_MEMCPY", 0xc028af05 },
 { "FSL_HV_IOCTL_GETPROP", 0xc028af07 },
 { "FSL_HV_IOCTL_SETPROP", 0xc028af08 },
@@ -2670,7 +2567,6 @@
 { "VIDIOC_OMAP3ISP_HIST_CFG", 0xc03056c4 },
 { "SNDRV_RAWMIDI_IOCTL_PARAMS", 0xc0305710 },
 { "BINDER_WRITE_READ", 0xc0306201 },
-{ "DRM_IOCTL_ETNAVIV_GEM_SUBMIT", 0xc0306446 },
 { "DRM_IOCTL_NOUVEAU_GEM_NEW", 0xc0306480 },
 { "DRM_IOCTL_MODE_SETPLANE", 0xc03064b7 },
 { "I2OSWDL", 0xc0306905 },
@@ -2696,6 +2592,7 @@
 { "CEC_TRANSMIT", 0xc0386105 },
 { "CEC_RECEIVE", 0xc0386106 },
 { "DRM_IOCTL_VIRTGPU_RESOURCE_CREATE", 0xc0386444 },
+{ "DRM_IOCTL_ETNAVIV_GEM_SUBMIT", 0xc0386446 },
 { "DRM_IOCTL_MODE_ATOMIC", 0xc03864bc },
 { "BTRFS_IOC_INO_PATHS", 0xc0389423 },
 { "BTRFS_IOC_LOGICAL_INO", 0xc0389424 },
@@ -2717,6 +2614,7 @@
 { "VIDIOC_ENUM_FREQ_BANDS", 0xc0405665 },
 { "DRM_IOCTL_VERSION", 0xc0406400 },
 { "DRM_IOCTL_DMA", 0xc0406429 },
+{ "DRM_IOCTL_I915_GEM_EXECBUFFER2_WR", 0xc0406469 },
 { "DRM_IOCTL_NOUVEAU_GEM_PUSHBUF", 0xc0406481 },
 { "DRM_IOCTL_MODE_GETRESOURCES", 0xc04064a0 },
 { "DRM_IOCTL_MODE_GETPROPERTY", 0xc04064aa },
@@ -2737,7 +2635,6 @@
 { "VIDEO_COMMAND", 0xc0486f3b },
 { "VIDEO_TRY_COMMAND", 0xc0486f3c },
 { "MEDIA_IOC_G_TOPOLOGY", 0xc0487c04 },
-{ "KVM_GET_PIT", 0xc048ae65 },
 { "MMC_IOC_CMD", 0xc048b300 },
 { "GPIO_GET_LINEINFO_IOCTL", 0xc048b402 },
 { "SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT", 0xc04c5349 },
@@ -2789,6 +2686,7 @@
 { "DK_CXLFLASH_RECOVER_AFU", 0xc078ca85 },
 { "DK_CXLFLASH_USER_VIRTUAL", 0xc078ca87 },
 { "DK_CXLFLASH_VLUN_RESIZE", 0xc078ca88 },
+{ "HT_CXLFLASH_AFU_DEBUG", 0xc078cabe },
 { "SOUND_MIXER_ACCESS", 0xc0804d66 },
 { "ND_IOCTL_SMART", 0xc0844e01 },
 { "VIDIOC_SUBDEV_S_DV_TIMINGS", 0xc0845657 },
@@ -2813,6 +2711,7 @@
 { "SNDRV_PCM_IOCTL_STATUS_EXT", 0xc0984124 },
 { "DRM_IOCTL_VC4_SUBMIT_CL", 0xc0a06440 },
 { "DRM_IOCTL_VC4_GET_HANG_STATE", 0xc0a06446 },
+{ "HT_CXLFLASH_LUN_PROVISION", 0xc0a0cabf },
 { "SOUND_MIXER_GETLEVELS", 0xc0a44d74 },
 { "SOUND_MIXER_SETLEVELS", 0xc0a44d75 },
 { "SNDRV_SEQ_IOCTL_CREATE_PORT", 0xc0a85320 },
@@ -2820,6 +2719,7 @@
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT", 0xc0a85352 },
 { "SNDRV_SEQ_IOCTL_GET_CLIENT_INFO", 0xc0bc5310 },
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT", 0xc0bc5351 },
+{ "FS_IOC_GETFSMAP", 0xc0c0583b },
 { "SNDRV_COMPRESS_GET_CAPS", 0xc0c44310 },
 { "VIDIOC_DBG_G_CHIP_INFO", 0xc0c85666 },
 { "BTRFS_IOC_SET_RECEIVED_SUBVOL", 0xc0c89425 },
@@ -2857,9 +2757,9 @@
 { "DM_LIST_VERSIONS", 0xc138fd0d },
 { "DM_TARGET_MSG", 0xc138fd0e },
 { "DM_DEV_SET_GEOMETRY", 0xc138fd0f },
+{ "DM_DEV_ARM_POLL", 0xc138fd10 },
 { "GPIO_GET_LINEHANDLE_IOCTL", 0xc16cb403 },
 { "SNDRV_EMU10K1_IOCTL_CODE_PEEK", 0xc1b04812 },
-{ "KVM_GET_IRQCHIP", 0xc208ae62 },
 { "SNDRV_PCM_IOCTL_HW_REFINE", 0xc2604110 },
 { "SNDRV_PCM_IOCTL_HW_PARAMS", 0xc2604111 },
 { "BTRFS_IOC_SCRUB", 0xc400941b },
diff --git a/ioctlent1.h b/ioctlent1.h
index 3bdb14f..436aa37 100644
--- a/ioctlent1.h
+++ b/ioctlent1.h
@@ -269,7 +269,6 @@
 { "IIOCNETGPN", 0x00004922 },
 { "IIOCDBGVAR", 0x0000497f },
 { "IIOCDRVCTL", 0x00004980 },
-{ "ION_IOC_TEST_SET_FD", 0x000049f0 },
 { "KIOCSOUND", 0x00004b2f },
 { "KDMKTONE", 0x00004b30 },
 { "KDGETLED", 0x00004b31 },
@@ -339,7 +338,9 @@
 { "OMAPFB_WAITFORVSYNC", 0x00004f39 },
 { "OMAPFB_WAITFORGO", 0x00004f3c },
 { "SNDCTL_DSP_RESET", 0x00005000 },
+{ "PCITEST_BAR", 0x00005001 },
 { "SNDCTL_DSP_SYNC", 0x00005001 },
+{ "PCITEST_LEGACY_IRQ", 0x00005002 },
 { "SNDCTL_DSP_POST", 0x00005008 },
 { "SNDCTL_DSP_NONBLOCK", 0x0000500e },
 { "SNDCTL_DSP_SETSYNCRO", 0x00005015 },
@@ -451,6 +452,7 @@
 { "TCSETXF", 0x00005434 },
 { "TCSETXW", 0x00005435 },
 { "TIOCVHANGUP", 0x00005437 },
+{ "TIOCGPTPEER", 0x00005441 },
 { "FIONCLEX", 0x00005450 },
 { "FIOCLEX", 0x00005451 },
 { "FIOASYNC", 0x00005452 },
@@ -465,7 +467,7 @@
 { "TIOCSERSETMULTI", 0x0000545b },
 { "TIOCMIWAIT", 0x0000545c },
 { "TIOCGICOUNT", 0x0000545d },
-{ "FIOQSIZE", 0x00005460 },
+{ "FIOQSIZE", 0x0000545e },
 { "SNDRV_TIMER_IOCTL_START", 0x000054a0 },
 { "SNDRV_TIMER_IOCTL_STOP", 0x000054a1 },
 { "SNDRV_TIMER_IOCTL_CONTINUE", 0x000054a2 },
@@ -476,6 +478,7 @@
 { "USBDEVFS_RESET", 0x00005514 },
 { "USBDEVFS_DISCONNECT", 0x00005516 },
 { "USBDEVFS_CONNECT", 0x00005517 },
+{ "USBDEVFS_GET_SPEED", 0x0000551f },
 { "VT_OPENQRY", 0x00005600 },
 { "VIDIOC_RESERVED", 0x00005601 },
 { "VT_GETMODE", 0x00005601 },
@@ -899,6 +902,8 @@
 { "IOCTL_GNTDEV_SET_UNMAP_NOTIFY", 0x00104707 },
 { "IOCTL_GNTDEV_MAP_GRANT_REF", 0x00184700 },
 { "IOCTL_GNTDEV_GET_OFFSET_FOR_VADDR", 0x00184702 },
+{ "KVM_SET_SREGS", 0x4000ae84 },
+{ "KVM_SET_FPU", 0x4000ae8d },
 { "MFB_SET_ALPHA", 0x40014d00 },
 { "MFB_SET_GAMMA", 0x40014d01 },
 { "MFB_SET_BRIGHTNESS", 0x40014d03 },
@@ -949,6 +954,7 @@
 { "AGPIOC_SETUP", 0x40044103 },
 { "SNDRV_PCM_IOCTL_TTSTAMP", 0x40044103 },
 { "AGPIOC_RESERVE", 0x40044104 },
+{ "SNDRV_PCM_IOCTL_USER_PVERSION", 0x40044104 },
 { "AGPIOC_PROTECT", 0x40044105 },
 { "AGPIOC_DEALLOCATE", 0x40044107 },
 { "AGPIOC_BIND", 0x40044108 },
@@ -1004,6 +1010,10 @@
 { "OMAPFB_GET_UPDATE_MODE", 0x40044f2b },
 { "OMAPFB_LCD_TEST", 0x40044f2d },
 { "OMAPFB_CTRL_TEST", 0x40044f2e },
+{ "PCITEST_MSI", 0x40045003 },
+{ "PCITEST_WRITE", 0x40045004 },
+{ "PCITEST_READ", 0x40045005 },
+{ "PCITEST_COPY", 0x40045006 },
 { "SNDCTL_DSP_SETTRIGGER", 0x40045010 },
 { "SNDCTL_DSP_PROFILE", 0x40045017 },
 { "SNDCTL_DSP_SETSPDIF", 0x40045042 },
@@ -1331,10 +1341,8 @@
 { "KVM_IRQ_LINE", 0x4008ae61 },
 { "KVM_SET_GSI_ROUTING", 0x4008ae6a },
 { "KVM_ASSIGN_SET_MSIX_NR", 0x4008ae73 },
-{ "KVM_SET_MSRS", 0x4008ae89 },
-{ "KVM_SET_CPUID", 0x4008ae8a },
-{ "KVM_SET_CPUID2", 0x4008ae90 },
 { "KVM_SET_VAPIC_ADDR", 0x4008ae93 },
+{ "KVM_SET_GUEST_DEBUG", 0x4008ae9b },
 { "KVM_X86_SETUP_MCE", 0x4008ae9c },
 { "VHOST_SET_FEATURES", 0x4008af00 },
 { "VHOST_SET_MEM_TABLE", 0x4008af03 },
@@ -1353,7 +1361,6 @@
 { "SNDRV_DM_FM_IOCTL_SET_PARAMS", 0x40094824 },
 { "FDFMTTRK", 0x400c0248 },
 { "RUN_ARRAY", 0x400c0930 },
-{ "FW_CDEV_IOC_SET_ISO_CHANNELS", 0x400c2317 },
 { "SNAPSHOT_SET_SWAP_AREA", 0x400c330d },
 { "SNDRV_PCM_IOCTL_WRITEI_FRAMES", 0x400c4150 },
 { "SNDRV_PCM_IOCTL_WRITEN_FRAMES", 0x400c4152 },
@@ -1362,15 +1369,7 @@
 { "HIDIOCSREPORT", 0x400c4808 },
 { "SNDRV_EMU10K1_IOCTL_TRAM_POKE", 0x400c4821 },
 { "SNDRV_DM_FM_IOCTL_PLAY_NOTE", 0x400c4822 },
-{ "MTRRIOC_ADD_ENTRY", 0x400c4d00 },
 { "MFB_SET_CHROMA_KEY", 0x400c4d01 },
-{ "MTRRIOC_SET_ENTRY", 0x400c4d01 },
-{ "MTRRIOC_DEL_ENTRY", 0x400c4d02 },
-{ "MTRRIOC_KILL_ENTRY", 0x400c4d04 },
-{ "MTRRIOC_ADD_PAGE_ENTRY", 0x400c4d05 },
-{ "MTRRIOC_SET_PAGE_ENTRY", 0x400c4d06 },
-{ "MTRRIOC_DEL_PAGE_ENTRY", 0x400c4d07 },
-{ "MTRRIOC_KILL_PAGE_ENTRY", 0x400c4d09 },
 { "OTPGETREGIONINFO", 0x400c4d0f },
 { "UI_END_FF_ERASE", 0x400c55cb },
 { "IVTVFB_IOC_DMA_FRAME", 0x400c56c0 },
@@ -1412,7 +1411,6 @@
 { "DRM_IOCTL_MGA_ILOAD", 0x400c6447 },
 { "DRM_IOCTL_I915_INIT_HEAP", 0x400c644a },
 { "DRM_IOCTL_RADEON_INIT_HEAP", 0x400c6455 },
-{ "DRM_IOCTL_RADEON_SETPARAM", 0x400c6459 },
 { "DRM_IOCTL_RADEON_SURF_ALLOC", 0x400c645a },
 { "DRM_IOCTL_I915_GEM_SET_DOMAIN", 0x400c645f },
 { "FS_IOC_GET_ENCRYPTION_POLICY", 0x400c6615 },
@@ -1423,10 +1421,10 @@
 { "UBI_IOCRSVOL", 0x400c6f02 },
 { "AUDIO_SET_KARAOKE", 0x400c6f12 },
 { "PPPIOCSCOMPRESS", 0x400c744d },
-{ "KVM_DIRTY_TLB", 0x400caeaa },
 { "MBXFB_IOCS_REG", 0x400cf404 },
 { "BLKRESETZONE", 0x40101283 },
 { "FW_CDEV_IOC_START_ISO", 0x4010230a },
+{ "FW_CDEV_IOC_SET_ISO_CHANNELS", 0x40102317 },
 { "PTP_EXTTS_REQUEST", 0x40103d02 },
 { "CCISS_SETNODENAME", 0x40104205 },
 { "EVIOCSMASK", 0x40104593 },
@@ -1454,6 +1452,7 @@
 { "DRM_IOCTL_I915_HWS_ADDR", 0x40106451 },
 { "DRM_IOCTL_I915_GEM_INIT", 0x40106453 },
 { "DRM_IOCTL_SIS_AGP_FREE", 0x40106455 },
+{ "DRM_IOCTL_RADEON_SETPARAM", 0x40106459 },
 { "DRM_IOCTL_I915_PERF_OPEN", 0x40106476 },
 { "FS_IOC_GET_ENCRYPTION_PWSALT", 0x40106614 },
 { "HSC_SET_TX", 0x40106b15 },
@@ -1478,19 +1477,19 @@
 { "KVM_ASSIGN_SET_MSIX_ENTRY", 0x4010ae74 },
 { "KVM_S390_INTERRUPT", 0x4010ae94 },
 { "KVM_S390_SET_INITIAL_PSW", 0x4010ae96 },
+{ "KVM_DIRTY_TLB", 0x4010aeaa },
 { "KVM_ARM_SET_DEVICE_ADDR", 0x4010aeab },
 { "KVM_GET_ONE_REG", 0x4010aeab },
 { "KVM_SET_ONE_REG", 0x4010aeac },
+{ "ASPEED_LPC_CTRL_IOCTL_MAP", 0x4010b201 },
 { "SNDRV_DM_FM_IOCTL_SET_VOICE", 0x40124823 },
 { "FDSETMAXERRS", 0x4014024c },
 { "ADD_NEW_DISK", 0x40140921 },
-{ "FW_CDEV_IOC_SEND_RESPONSE", 0x40142304 },
 { "SNDCTL_COPR_WDATA", 0x40144304 },
 { "SNDCTL_COPR_WCODE", 0x40144305 },
 { "OMAPFB_UPDATE_WINDOW_OLD", 0x40144f2f },
 { "VIDIOC_S_CROP", 0x4014563c },
 { "CHIOMOVE", 0x40146301 },
-{ "DRM_IOCTL_UPDATE_DRAW", 0x4014643f },
 { "DRM_IOCTL_VIA_FREEMEM", 0x40146441 },
 { "DRM_IOCTL_MGA_CLEAR", 0x40146444 },
 { "DRM_IOCTL_R128_CLEAR", 0x40146448 },
@@ -1498,6 +1497,7 @@
 { "DRM_IOCTL_RADEON_INDICES", 0x4014644a },
 { "DRM_IOCTL_I810_MC", 0x4014644c },
 { "DMX_SET_PES_FILTER", 0x40146f2c },
+{ "FW_CDEV_IOC_SEND_RESPONSE", 0x40182304 },
 { "FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE", 0x4018230f },
 { "FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE", 0x40182310 },
 { "HIDIOCSUSAGE", 0x4018480c },
@@ -1505,6 +1505,7 @@
 { "AMDKFD_IOC_UPDATE_QUEUE", 0x40184b07 },
 { "DRM_IOCTL_MARK_BUFS", 0x40186417 },
 { "DRM_IOCTL_RM_MAP", 0x4018641b },
+{ "DRM_IOCTL_UPDATE_DRAW", 0x4018643f },
 { "DRM_IOCTL_I915_BATCHBUFFER", 0x40186443 },
 { "DRM_IOCTL_QXL_UPDATE_AREA", 0x40186443 },
 { "DRM_IOCTL_ETNAVIV_GEM_CPU_PREP", 0x40186444 },
@@ -1539,8 +1540,6 @@
 { "OSD_SEND_CMD", 0x401c6fa0 },
 { "RTC_PLL_SET", 0x401c7012 },
 { "CS_CONFIG_BUFS", 0x4020431f },
-{ "ION_IOC_TEST_DMA_MAPPING", 0x402049f1 },
-{ "ION_IOC_TEST_KERNEL_MAPPING", 0x402049f2 },
 { "AMDKFD_IOC_SET_MEMORY_POLICY", 0x40204b04 },
 { "VIDIOC_SUBSCRIBE_EVENT", 0x4020565a },
 { "VIDIOC_UNSUBSCRIBE_EVENT", 0x4020565b },
@@ -1556,14 +1555,13 @@
 { "PPPIOCSXASYNCMAP", 0x4020744f },
 { "BTRFS_IOC_CLONE_RANGE", 0x4020940d },
 { "FICLONERANGE", 0x4020940d },
-{ "KVM_SET_MEMORY_ALIAS", 0x4020ae43 },
 { "KVM_SET_USER_MEMORY_REGION", 0x4020ae46 },
 { "KVM_IRQFD", 0x4020ae76 },
 { "KVM_SIGNAL_MSI", 0x4020aea5 },
+{ "KVM_ARM_VCPU_INIT", 0x4020aeae },
 { "KVM_S390_SET_IRQ_STATE", 0x4020aeb5 },
 { "KVM_S390_GET_IRQ_STATE", 0x4020aeb6 },
-{ "FW_CDEV_IOC_SEND_REQUEST", 0x40242301 },
-{ "FW_CDEV_IOC_SEND_BROADCAST_REQUEST", 0x40242312 },
+{ "KVM_S390_SET_CMMA_BITS", 0x4020aeb9 },
 { "SNDRV_COMPRESS_SET_METADATA", 0x40244314 },
 { "NVM_DEV_REMOVE", 0x40244c23 },
 { "NVM_DEV_FACTORY", 0x40244c25 },
@@ -1573,6 +1571,8 @@
 { "RTC_ALM_SET", 0x40247007 },
 { "RTC_SET_TIME", 0x4024700a },
 { "HFI1_IOCTL_CTXT_INFO", 0x40281be2 },
+{ "FW_CDEV_IOC_SEND_REQUEST", 0x40282301 },
+{ "FW_CDEV_IOC_SEND_BROADCAST_REQUEST", 0x40282312 },
 { "FW_CDEV_IOC_SEND_STREAM_PACKET", 0x40282313 },
 { "EVIOCSKEYCODE_V2", 0x40284504 },
 { "SNDCTL_FM_LOAD_INSTR", 0x40285107 },
@@ -1586,7 +1586,6 @@
 { "RPMSG_CREATE_EPT_IOCTL", 0x4028b501 },
 { "EVIOCSFF", 0x402c4580 },
 { "NVM_DEV_INIT", 0x402c4c24 },
-{ "NVME_IOCTL_SUBMIT_IO", 0x402c4e42 },
 { "SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO", 0x402c5342 },
 { "TCSETS2", 0x402c542b },
 { "TCSETSW2", 0x402c542c },
@@ -1594,6 +1593,7 @@
 { "VIDIOC_S_FBUF", 0x402c560b },
 { "VIDIOC_S_FREQUENCY", 0x402c5639 },
 { "DRM_IOCTL_I915_OVERLAY_PUT_IMAGE", 0x402c6467 },
+{ "NVME_IOCTL_SUBMIT_IO", 0x40304e42 },
 { "VIDIOC_S_HW_FREQ_SEEK", 0x40305652 },
 { "CHIOSVOLTAG", 0x40306312 },
 { "BTRFS_IOC_DEFRAG_RANGE", 0x40309410 },
@@ -1607,7 +1607,6 @@
 { "PTP_PEROUT_REQUEST", 0x40383d03 },
 { "VIDIOC_DBG_S_REGISTER", 0x4038564f },
 { "IVTV_IOC_DMA_FRAME", 0x403856c0 },
-{ "KVM_XEN_HVM_CONFIG", 0x4038ae7a },
 { "SNDRV_TIMER_IOCTL_GPARAMS", 0x403c5404 },
 { "DMX_SET_FILTER", 0x403c6f2b },
 { "SNDRV_SEQ_IOCTL_REMOVE_EVENTS", 0x4040534e },
@@ -1624,8 +1623,6 @@
 { "KVM_DEASSIGN_DEV_IRQ", 0x4040ae75 },
 { "KVM_CREATE_PIT2", 0x4040ae77 },
 { "KVM_IOEVENTFD", 0x4040ae79 },
-{ "KVM_X86_SET_MCE", 0x4040ae9e },
-{ "KVM_SET_VCPU_EVENTS", 0x4040aea0 },
 { "KVM_ASSIGN_SET_INTX_MASK", 0x4040aea4 },
 { "KVM_S390_MEM_OP", 0x4040aeb1 },
 { "KVM_S390_GET_SKEYS", 0x4040aeb2 },
@@ -1638,12 +1635,11 @@
 { "OMAPFB_UPDATE_WINDOW", 0x40444f36 },
 { "VIDIOC_S_MODULATOR", 0x40445637 },
 { "DRM_IOCTL_I915_INIT", 0x40446440 },
-{ "BTRFS_IOC_SEND", 0x40449426 },
 { "SET_ARRAY_INFO", 0x40480923 },
 { "SNDRV_EMU10K1_IOCTL_PCM_POKE", 0x40484830 },
 { "BC_TRANSACTION_SG", 0x40486311 },
 { "BC_REPLY_SG", 0x40486312 },
-{ "KVM_SET_GUEST_DEBUG", 0x4048ae9b },
+{ "BTRFS_IOC_SEND", 0x40489426 },
 { "KVM_S390_IRQ", 0x4048aeb4 },
 { "GSMIOC_SETCONF", 0x404c4701 },
 { "SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT", 0x404c534a },
@@ -1664,19 +1660,17 @@
 { "UI_END_FF_UPLOAD", 0x406055c9 },
 { "KVM_ENABLE_CAP", 0x4068aea3 },
 { "CHIOGELEM", 0x406c6310 },
-{ "KVM_SET_PIT2", 0x4070aea0 },
 { "HFI1_IOCTL_USER_INFO", 0x40781be3 },
 { "NILFS_IOCTL_CLEAN_SEGMENTS", 0x40786e88 },
-{ "V4L2_DEVICE_NOTIFY_EVENT", 0x40787602 },
 { "NVM_DEV_CREATE", 0x40804c22 },
 { "UBI_IOCVOLCRBLK", 0x40804f07 },
+{ "V4L2_DEVICE_NOTIFY_EVENT", 0x40807602 },
 { "KVM_PPC_GET_PVINFO", 0x4080aea1 },
-{ "KVM_SET_DEBUGREGS", 0x4080aea2 },
 { "SNDRV_COMPRESS_SET_PARAMS", 0x40844312 },
 { "SNDRV_SEQ_IOCTL_DELETE_QUEUE", 0x408c5333 },
 { "VIDIOC_S_JPEGCOMP", 0x408c563e },
-{ "KVM_SET_REGS", 0x4090ae82 },
 { "UBI_IOCMKVOL", 0x40986f00 },
+{ "KVM_SET_REGS", 0x4098ae82 },
 { "SNDRV_SEQ_IOCTL_DELETE_PORT", 0x40a45321 },
 { "SNDRV_SEQ_IOCTL_SET_PORT_INFO", 0x40a45323 },
 { "SNDRV_SEQ_IOCTL_SET_CLIENT_INFO", 0x40bc5311 },
@@ -1697,14 +1691,10 @@
 { "IOC_OPAL_ACTIVATE_LSP", 0x411870df },
 { "IOC_OPAL_ADD_USR_TO_LR", 0x411870e4 },
 { "IOC_OPAL_LR_SETUP", 0x412870e3 },
-{ "KVM_SET_SREGS", 0x4138ae84 },
-{ "KVM_SET_XCRS", 0x4188aea7 },
 { "SNDRV_EMU10K1_IOCTL_CODE_POKE", 0x418c4811 },
-{ "KVM_SET_FPU", 0x41a0ae8d },
 { "IOC_OPAL_SET_PW", 0x422070e0 },
 { "PTP_SYS_OFFSET", 0x43403d05 },
 { "JSIOCSBTNMAP", 0x44006a33 },
-{ "KVM_SET_LAPIC", 0x4400ae8f },
 { "BTRFS_IOC_SNAP_CREATE", 0x50009401 },
 { "BTRFS_IOC_DEFRAG", 0x50009402 },
 { "BTRFS_IOC_RESIZE", 0x50009403 },
@@ -1717,10 +1707,11 @@
 { "BTRFS_IOC_SNAP_CREATE_V2", 0x50009417 },
 { "BTRFS_IOC_SUBVOL_CREATE_V2", 0x50009418 },
 { "BTRFS_IOC_RM_DEV_V2", 0x5000943a },
-{ "KVM_SET_XSAVE", 0x5000aea5 },
 { "HIDIOCSUSAGES", 0x501c4814 },
 { "UBI_IOCRNVOL", 0x51106f03 },
 { "SNDRV_SB_CSP_IOCTL_LOAD_CODE", 0x70124811 },
+{ "KVM_GET_SREGS", 0x8000ae83 },
+{ "KVM_GET_FPU", 0x8000ae8c },
 { "MFB_GET_ALPHA", 0x80014d00 },
 { "MFB_GET_GAMMA", 0x80014d01 },
 { "USBTMC488_IOCTL_GET_CAPS", 0x80015b11 },
@@ -1811,9 +1802,6 @@
 { "IMCTRLREQ", 0x80044945 },
 { "IMCLEAR_L2", 0x80044946 },
 { "IMHOLD_L1", 0x80044948 },
-{ "MCE_GET_RECORD_LEN", 0x80044d01 },
-{ "MCE_GET_LOG_LEN", 0x80044d02 },
-{ "MCE_GETCLEAR_FLAGS", 0x80044d03 },
 { "MEMGETREGIONCOUNT", 0x80044d07 },
 { "MFB_GET_PIXFMT", 0x80044d08 },
 { "OTPSELECT", 0x80044d0d },
@@ -1983,6 +1971,7 @@
 { "AUTOFS_IOC_PROTOVER", 0x80049363 },
 { "AUTOFS_IOC_PROTOSUBVER", 0x80049367 },
 { "AUTOFS_IOC_ASKUMOUNT", 0x80049370 },
+{ "TEE_IOC_CLOSE_SESSION", 0x8004a405 },
 { "GENWQE_GET_CARD_STATE", 0x8004a524 },
 { "KVM_GET_MP_STATE", 0x8004ae98 },
 { "CXL_IOCTL_GET_PROCESS_ELEMENT", 0x8004ca01 },
@@ -2036,12 +2025,12 @@
 { "PPPIOCGIDLE", 0x8008743f },
 { "BTRFS_IOC_START_SYNC", 0x80089418 },
 { "BTRFS_IOC_SUBVOL_GETFLAGS", 0x80089419 },
+{ "TEE_IOC_CANCEL", 0x8008a404 },
 { "KVM_X86_GET_MCE_CAP_SUPPORTED", 0x8008ae9d },
 { "VHOST_GET_FEATURES", 0x8008af00 },
 { "FUNCTIONFS_ENDPOINT_DESC", 0x80096782 },
 { "DMX_GET_PES_PIDS", 0x800a6f2f },
 { "RAID_VERSION", 0x800c0910 },
-{ "FW_CDEV_IOC_GET_CYCLE_TIMER", 0x800c230c },
 { "SNDRV_PCM_IOCTL_READI_FRAMES", 0x800c4151 },
 { "SNDRV_PCM_IOCTL_READN_FRAMES", 0x800c4153 },
 { "CCISS_GETLUNINFO", 0x800c4211 },
@@ -2059,7 +2048,9 @@
 { "VIDEO_GET_SIZE", 0x800c6f37 },
 { "FE_DISEQC_RECV_SLAVE_REPLY", 0x800c6f40 },
 { "CA_GET_SLOT_INFO", 0x800c6f82 },
+{ "TEE_IOC_VERSION", 0x800ca400 },
 { "FDGETDRVTYP", 0x8010020f },
+{ "FW_CDEV_IOC_GET_CYCLE_TIMER", 0x8010230c },
 { "STP_POLICY_ID_GET", 0x80102501 },
 { "SNDRV_PCM_IOCTL_CHANNEL_INFO", 0x80104132 },
 { "CCISS_GETNODENAME", 0x80104204 },
@@ -2069,6 +2060,7 @@
 { "OMAPFB_MEMORY_READ", 0x80104f3a },
 { "SNDCTL_DSP_GETOSPACE", 0x8010500c },
 { "SNDCTL_DSP_GETISPACE", 0x8010500d },
+{ "SWITCHTEC_IOCTL_FLASH_INFO", 0x80105740 },
 { "DRM_IOCTL_I915_GEM_GET_APERTURE", 0x80106463 },
 { "MGSL_IOCGGPIO", 0x80106d11 },
 { "CA_GET_CAP", 0x80106f81 },
@@ -2077,6 +2069,10 @@
 { "BR_RELEASE", 0x80107209 },
 { "BR_DECREFS", 0x8010720a },
 { "PPPIOCGIFNAME", 0x80107488 },
+{ "TEE_IOC_OPEN_SESSION", 0x8010a402 },
+{ "TEE_IOC_INVOKE", 0x8010a403 },
+{ "TEE_IOC_SUPPL_RECV", 0x8010a406 },
+{ "TEE_IOC_SUPPL_SEND", 0x8010a407 },
 { "GENWQE_READ_REG64", 0x8010a51e },
 { "GENWQE_READ_REG32", 0x8010a520 },
 { "GENWQE_READ_REG16", 0x8010a522 },
@@ -2092,7 +2088,6 @@
 { "NCP_IOC_LOCKUNLOCK", 0x80146e07 },
 { "VIDEO_GET_STATUS", 0x80146f1b },
 { "VIDEO_GET_EVENT", 0x80146f1c },
-{ "BR_ATTEMPT_ACQUIRE", 0x8014720b },
 { "FDWERRORGET", 0x80180217 },
 { "SNDRV_HDSPM_IOCTL_GET_CONFIG", 0x80184841 },
 { "IMSETDEVNAME", 0x80184947 },
@@ -2102,18 +2097,19 @@
 { "NILFS_IOCTL_GET_CPINFO", 0x80186e82 },
 { "NILFS_IOCTL_GET_CPSTAT", 0x80186e83 },
 { "NILFS_IOCTL_GET_SUINFO", 0x80186e84 },
+{ "BR_ATTEMPT_ACQUIRE", 0x8018720b },
 { "BTRFS_IOC_GET_FEATURES", 0x80189439 },
 { "MBXFB_IOCG_ALPHA", 0x8018f401 },
 { "FDGETPRM", 0x801c0204 },
 { "SNDRV_COMPRESS_AVAIL", 0x801c4321 },
 { "HIDIOCGDEVINFO", 0x801c4803 },
-{ "SNDRV_HDSPM_IOCTL_GET_STATUS", 0x801c4847 },
 { "FS_IOC_FSGETXATTR", 0x801c581f },
 { "IPMICTL_SEND_COMMAND_SETTIME", 0x801c6915 },
 { "MTIOCGET", 0x801c6d02 },
 { "RTC_PLL_GET", 0x801c7011 },
 { "FDGETFDCSTAT", 0x80200215 },
 { "FBIOGET_VBLANK", 0x80204612 },
+{ "SNDRV_HDSPM_IOCTL_GET_STATUS", 0x80204847 },
 { "SNDRV_FIREWIRE_IOCTL_GET_INFO", 0x802048f8 },
 { "MEMGETINFO", 0x80204d01 },
 { "OMAPFB_GET_VRAM_INFO", 0x80204f3d },
@@ -2124,6 +2120,7 @@
 { "AUDIO_GET_STATUS", 0x80206f0a },
 { "PPPIOCGXASYNCMAP", 0x80207450 },
 { "PPPIOCGCOMPRESSORS", 0x80207486 },
+{ "KVM_ARM_PREFERRED_TARGET", 0x8020aeaf },
 { "SNDRV_HDSP_IOCTL_GET_CONFIG_INFO", 0x80244841 },
 { "SNDRV_HDSPM_IOCTL_GET_VERSION", 0x80244848 },
 { "SONET_GETSTAT", 0x80246110 },
@@ -2159,13 +2156,11 @@
 { "BR_REPLY", 0x80407203 },
 { "BTRFS_IOC_QUOTA_RESCAN_STATUS", 0x8040942d },
 { "KVM_ASSIGN_PCI_DEVICE", 0x8040ae69 },
-{ "KVM_GET_VCPU_EVENTS", 0x8040ae9f },
 { "CXL_IOCTL_GET_AFU_ID", 0x8040ca02 },
 { "GPIO_GET_CHIPINFO_IOCTL", 0x8044b401 },
 { "GET_ARRAY_INFO", 0x80480911 },
 { "PPPIOCGL2TPSTATS", 0x80487436 },
 { "BTRFS_IOC_GET_SUPPORTED_FEATURES", 0x80489439 },
-{ "KVM_SET_PIT", 0x8048ae66 },
 { "GSMIOC_GETCONF", 0x804c4700 },
 { "PTP_CLOCK_GETCAPS", 0x80503d01 },
 { "FDGETDRVPRM", 0x80580211 },
@@ -2176,16 +2171,14 @@
 { "I2OEVTGET", 0x8068690b },
 { "SNDRV_PCM_IOCTL_STATUS", 0x806c4120 },
 { "CHIOGVPARAMS", 0x80706313 },
-{ "KVM_GET_PIT2", 0x8070ae9f },
 { "SNDRV_COMPRESS_GET_PARAMS", 0x80784313 },
-{ "VIDIOC_DQEVENT", 0x80785659 },
 { "DRM_IOCTL_GET_STATS", 0x807c6406 },
 { "USBDEVFS_HUB_PORTINFO", 0x80805513 },
-{ "KVM_GET_DEBUGREGS", 0x8080aea1 },
+{ "VIDIOC_DQEVENT", 0x80805659 },
 { "VIDIOC_QUERY_DV_TIMINGS", 0x80845663 },
 { "VIDIOC_SUBDEV_QUERY_DV_TIMINGS", 0x80845663 },
 { "VIDIOC_G_JPEGCOMP", 0x808c563d },
-{ "KVM_GET_REGS", 0x8090ae81 },
+{ "KVM_GET_REGS", 0x8098ae81 },
 { "FE_GET_INFO", 0x80a86f3d },
 { "MEMGETOOBSEL", 0x80c84d0a },
 { "SNDRV_HWDEP_IOCTL_INFO", 0x80dc4801 },
@@ -2200,12 +2193,10 @@
 { "AUTOFS_IOC_EXPIRE", 0x810c9365 },
 { "SISFB_GET_INFO", 0x811cf301 },
 { "SNDRV_PCM_IOCTL_INFO", 0x81204101 },
-{ "KVM_GET_SREGS", 0x8138ae83 },
 { "ECCGETLAYOUT", 0x81484d11 },
 { "SNDRV_CTL_IOCTL_CARD_INFO", 0x81785501 },
-{ "KVM_GET_XCRS", 0x8188aea6 },
 { "AMDKFD_IOC_GET_PROCESS_APERTURES", 0x81904b06 },
-{ "KVM_GET_FPU", 0x81a0ae8c },
+{ "SWITCHTEC_IOCTL_EVENT_SUMMARY", 0x81985742 },
 { "KVM_SET_IRQCHIP", 0x8208ae63 },
 { "VFAT_IOCTL_READDIR_BOTH", 0x82187201 },
 { "VFAT_IOCTL_READDIR_SHORT", 0x82187202 },
@@ -2214,7 +2205,6 @@
 { "JSIOCGBTNMAP", 0x84006a34 },
 { "BTRFS_IOC_FS_INFO", 0x8400941f },
 { "BTRFS_IOC_BALANCE_PROGRESS", 0x84009422 },
-{ "KVM_GET_LAPIC", 0x8400ae8e },
 { "VIDEO_GET_NAVI", 0x84046f34 },
 { "SNDRV_EMU10K1_IOCTL_INFO", 0x880c4810 },
 { "VIDIOC_G_ENC_INDEX", 0x8818564c },
@@ -2224,7 +2214,6 @@
 { "SNDRV_HDSP_IOCTL_GET_MIXER", 0x90004844 },
 { "NVM_GET_DEVICES", 0x90004c21 },
 { "BTRFS_IOC_DEVICES_READY", 0x90009427 },
-{ "KVM_GET_XSAVE", 0x9000aea4 },
 { "HIDIOCGRDESC", 0x90044802 },
 { "GADGET_SET_PRINTER_STATUS", 0xc0016722 },
 { "RIO_CM_CHAN_CREATE", 0xc0026303 },
@@ -2233,7 +2222,6 @@
 { "CAPI_GET_SERIAL", 0xc0044308 },
 { "GIGASET_REDIR", 0xc0044700 },
 { "GIGASET_CONFIG", 0xc0044701 },
-{ "ION_IOC_FREE", 0xc0044901 },
 { "SOUND_MIXER_AGC", 0xc0044d67 },
 { "SOUND_MIXER_3DSE", 0xc0044d68 },
 { "SOUND_MIXER_PRIVATE1", 0xc0044d6f },
@@ -2304,18 +2292,12 @@
 { "PPPIOCNEWUNIT", 0xc004743e },
 { "MEYEIOC_SYNC", 0xc00476c3 },
 { "AUTOFS_IOC_SETTIMEOUT", 0xc0049364 },
-{ "KVM_GET_MSR_INDEX_LIST", 0xc004ae02 },
 { "KVM_PPC_ALLOCATE_HTAB", 0xc004aea7 },
 { "NET_ADD_IF", 0xc0066f34 },
 { "NET_GET_IF", 0xc0066f36 },
 { "CAPI_MANUFACTURER_CMD", 0xc0084320 },
 { "HDA_IOCTL_VERB_WRITE", 0xc0084811 },
 { "HDA_IOCTL_GET_WCAP", 0xc0084812 },
-{ "ION_IOC_MAP", 0xc0084902 },
-{ "ION_IOC_SHARE", 0xc0084904 },
-{ "ION_IOC_IMPORT", 0xc0084905 },
-{ "ION_IOC_CUSTOM", 0xc0084906 },
-{ "ION_IOC_SYNC", 0xc0084907 },
 { "AMDKFD_IOC_DESTROY_QUEUE", 0xc0084b03 },
 { "ND_IOCTL_DIMM_FLAGS", 0xc0084e03 },
 { "ND_IOCTL_SET_CONFIG_DATA", 0xc0084e06 },
@@ -2349,6 +2331,7 @@
 { "DRM_IOCTL_TEGRA_GEM_GET_FLAGS", 0xc008644d },
 { "DRM_IOCTL_RADEON_GETPARAM", 0xc0086451 },
 { "DRM_IOCTL_R128_GETPARAM", 0xc0086452 },
+{ "DRM_IOCTL_AMDGPU_VM", 0xc0086453 },
 { "DRM_IOCTL_SIS_AGP_INIT", 0xc0086453 },
 { "DRM_IOCTL_I915_GEM_BUSY", 0xc0086457 },
 { "DRM_IOCTL_EXYNOS_G2D_GET_VER", 0xc0086460 },
@@ -2358,17 +2341,15 @@
 { "DRM_IOCTL_I915_GEM_CONTEXT_CREATE", 0xc008646d },
 { "DRM_IOCTL_I915_GEM_GET_CACHING", 0xc0086470 },
 { "DRM_IOCTL_EXYNOS_IPP_CMD_CTRL", 0xc0086473 },
+{ "DRM_IOCTL_SYNCOBJ_CREATE", 0xc00864bf },
+{ "DRM_IOCTL_SYNCOBJ_DESTROY", 0xc00864c0 },
 { "NCP_IOC_GETPRIVATEDATA", 0xc0086e0a },
 { "PHN_GETREG", 0xc0087005 },
 { "SCIF_BIND", 0xc0087301 },
 { "SCIF_CONNECT", 0xc0087303 },
 { "SCIF_ACCEPTREG", 0xc0087305 },
 { "PPPIOCGNPMODE", 0xc008744c },
-{ "KVM_GET_SUPPORTED_CPUID", 0xc008ae05 },
-{ "KVM_GET_EMULATED_CPUID", 0xc008ae09 },
 { "KVM_IRQ_LINE_STATUS", 0xc008ae67 },
-{ "KVM_GET_MSRS", 0xc008ae88 },
-{ "KVM_GET_CPUID2", 0xc008ae91 },
 { "KVM_GET_REG_LIST", 0xc008aeb0 },
 { "FSL_HV_IOCTL_PARTITION_RESTART", 0xc008af01 },
 { "FSL_HV_IOCTL_PARTITION_STOP", 0xc008af04 },
@@ -2385,6 +2366,8 @@
 { "SNDCTL_SYNTH_REMOVESAMPLE", 0xc00c5116 },
 { "USBDEVFS_IOCTL", 0xc00c5512 },
 { "UI_BEGIN_FF_ERASE", 0xc00c55ca },
+{ "SWITCHTEC_IOCTL_PFF_TO_PORT", 0xc00c5744 },
+{ "SWITCHTEC_IOCTL_PORT_TO_PFF", 0xc00c5745 },
 { "NS_GETPSTAT", 0xc00c6161 },
 { "DRM_IOCTL_MAP_BUFS", 0xc00c6419 },
 { "DRM_IOCTL_PRIME_HANDLE_TO_FD", 0xc00c642d },
@@ -2396,11 +2379,9 @@
 { "DRM_IOCTL_I915_GEM_MADVISE", 0xc00c6466 },
 { "DRM_IOCTL_RADEON_GEM_SET_TILING", 0xc00c6468 },
 { "DRM_IOCTL_RADEON_GEM_GET_TILING", 0xc00c6469 },
-{ "DRM_IOCTL_MODE_GETPLANERESOURCES", 0xc00c64b5 },
 { "I2OHRTGET", 0xc00c6901 },
 { "I2OLCTGET", 0xc00c6902 },
 { "NCP_IOC_GETOBJECTNAME", 0xc00c6e09 },
-{ "SCIF_FENCE_MARK", 0xc00c730f },
 { "UVCIOC_CTRL_QUERY", 0xc00c7521 },
 { "KVM_CREATE_DEVICE", 0xc00caee0 },
 { "FSL_HV_IOCTL_PARTITION_GET_STATUS", 0xc00caf02 },
@@ -2413,12 +2394,11 @@
 { "HIDIOCGCOLLECTIONINFO", 0xc0104811 },
 { "SNDRV_EMUX_IOCTL_LOAD_PATCH", 0xc0104881 },
 { "SNDRV_EMUX_IOCTL_MISC_MODE", 0xc0104884 },
-{ "MTRRIOC_GET_ENTRY", 0xc0104d03 },
 { "MEMGETREGIONINFO", 0xc0104d08 },
-{ "MTRRIOC_GET_PAGE_ENTRY", 0xc0104d08 },
 { "SNDRV_SEQ_IOCTL_RUNNING_MODE", 0xc0105303 },
 { "USBDEVFS_CONTROL", 0xc0105500 },
 { "USBDEVFS_BULK", 0xc0105502 },
+{ "SWITCHTEC_IOCTL_FLASH_PART_INFO", 0xc0105741 },
 { "RIO_CM_CHAN_RECEIVE", 0xc010630a },
 { "DRM_IOCTL_IRQ_BUSID", 0xc0106403 },
 { "DRM_IOCTL_SET_VERSION", 0xc0106407 },
@@ -2461,7 +2441,9 @@
 { "DRM_IOCTL_VC4_GET_PARAM", 0xc0106447 },
 { "DRM_IOCTL_VIA_DMA_INIT", 0xc0106447 },
 { "DRM_IOCTL_I915_ALLOC", 0xc0106448 },
+{ "DRM_IOCTL_VC4_SET_TILING", 0xc0106448 },
 { "DRM_IOCTL_TEGRA_GET_SYNCPT_BASE", 0xc0106449 },
+{ "DRM_IOCTL_VC4_GET_TILING", 0xc0106449 },
 { "DRM_IOCTL_TEGRA_GEM_SET_TILING", 0xc010644a },
 { "DRM_IOCTL_TEGRA_GEM_GET_TILING", 0xc010644b },
 { "DRM_IOCTL_RADEON_INDIRECT", 0xc010644d },
@@ -2481,21 +2463,24 @@
 { "DRM_IOCTL_MODE_SETPROPERTY", 0xc01064ab },
 { "DRM_IOCTL_MODE_GETPROPBLOB", 0xc01064ac },
 { "DRM_IOCTL_MODE_MAP_DUMB", 0xc01064b3 },
+{ "DRM_IOCTL_MODE_GETPLANERESOURCES", 0xc01064b5 },
 { "DRM_IOCTL_MODE_CREATEPROPBLOB", 0xc01064bd },
+{ "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", 0xc01064c1 },
+{ "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", 0xc01064c2 },
 { "MGSL_IOCWAITGPIO", 0xc0106d12 },
 { "DMX_GET_STC", 0xc0106f32 },
 { "SCIF_ACCEPTREQ", 0xc0107304 },
 { "SCIF_UNREG", 0xc0107309 },
+{ "SCIF_FENCE_MARK", 0xc010730f },
 { "BTRFS_IOC_SPACE_INFO", 0xc0109414 },
 { "BTRFS_IOC_QUOTA_CTL", 0xc0109428 },
+{ "TEE_IOC_SHM_ALLOC", 0xc010a401 },
 { "FSL_HV_IOCTL_PARTITION_START", 0xc010af03 },
-{ "FW_CDEV_IOC_GET_CYCLE_TIMER2", 0xc0142314 },
-{ "FW_CDEV_IOC_SEND_PHY_PACKET", 0xc0142315 },
+{ "ASPEED_LPC_CTRL_IOCTL_GET_SIZE", 0xc010b200 },
 { "SNDCTL_COPR_RDATA", 0xc0144302 },
 { "SNDCTL_COPR_RCODE", 0xc0144303 },
 { "SNDCTL_COPR_RUN", 0xc0144306 },
 { "SNDCTL_COPR_HALT", 0xc0144307 },
-{ "ION_IOC_ALLOC", 0xc0144900 },
 { "SNDRV_TIMER_IOCTL_NEXT_DEVICE", 0xc0145401 },
 { "VIDIOC_REQBUFS", 0xc0145608 },
 { "VIDIOC_G_CROP", 0xc014563b },
@@ -2504,10 +2489,6 @@
 { "DRM_IOCTL_I915_GET_SPRITE_COLORKEY", 0xc014646a },
 { "DRM_IOCTL_I915_SET_SPRITE_COLORKEY", 0xc014646b },
 { "DRM_IOCTL_MODE_GETENCODER", 0xc01464a6 },
-{ "DRM_IOCTL_MODE_OBJ_SETPROPERTY", 0xc01464ba },
-{ "SCIF_SEND", 0xc0147306 },
-{ "SCIF_RECV", 0xc0147307 },
-{ "SCIF_GET_NODEIDS", 0xc014730e },
 { "VTPM_PROXY_IOC_NEW_DEV", 0xc014a100 },
 { "HFI1_IOCTL_TID_UPDATE", 0xc0181be4 },
 { "HFI1_IOCTL_TID_FREE", 0xc0181be5 },
@@ -2515,8 +2496,11 @@
 { "FW_CDEV_IOC_ADD_DESCRIPTOR", 0xc0182306 },
 { "FW_CDEV_IOC_QUEUE_ISO", 0xc0182309 },
 { "FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE", 0xc018230d },
+{ "FW_CDEV_IOC_GET_CYCLE_TIMER2", 0xc0182314 },
+{ "FW_CDEV_IOC_SEND_PHY_PACKET", 0xc0182315 },
 { "HIDIOCGUSAGE", 0xc018480b },
 { "HIDIOCGUCODE", 0xc018480d },
+{ "ION_IOC_ALLOC", 0xc0184900 },
 { "ION_IOC_HEAP_QUERY", 0xc0184908 },
 { "AMDKFD_IOC_WAIT_EVENTS", 0xc0184b0c },
 { "MEMWRITEOOB64", 0xc0184d15 },
@@ -2551,6 +2535,7 @@
 { "DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM", 0xc0186475 },
 { "DRM_IOCTL_MODE_PAGE_FLIP", 0xc01864b0 },
 { "DRM_IOCTL_MODE_DIRTYFB", 0xc01864b1 },
+{ "DRM_IOCTL_MODE_OBJ_SETPROPERTY", 0xc01864ba },
 { "I2OPARMSET", 0xc0186903 },
 { "I2OPARMGET", 0xc0186904 },
 { "IPMICTL_RECEIVE_MSG_TRUNC", 0xc018690b },
@@ -2559,6 +2544,9 @@
 { "RIO_TRANSFER", 0xc0186d15 },
 { "NILFS_IOCTL_GET_VINFO", 0xc0186e86 },
 { "NILFS_IOCTL_GET_BDESCS", 0xc0186e87 },
+{ "SCIF_SEND", 0xc0187306 },
+{ "SCIF_RECV", 0xc0187307 },
+{ "SCIF_GET_NODEIDS", 0xc018730e },
 { "TOSH_SMM", 0xc0187490 },
 { "TOSHIBA_ACPI_SCI", 0xc0187491 },
 { "AUTOFS_DEV_IOCTL_VERSION", 0xc0189371 },
@@ -2581,20 +2569,18 @@
 { "KVM_TRANSLATE", 0xc018ae85 },
 { "IB_USER_MAD_REGISTER_AGENT", 0xc01c1b01 },
 { "HFI1_IOCTL_ASSIGN_CTXT", 0xc01c1be1 },
-{ "FW_CDEV_IOC_CREATE_ISO_CONTEXT", 0xc01c2308 },
 { "SI4713_IOC_MEASURE_RNL", 0xc01c56c0 },
 { "DRM_IOCTL_MGA_DMA_BOOTSTRAP", 0xc01c644c },
-{ "DRM_IOCTL_RADEON_GEM_CREATE", 0xc01c645d },
 { "DRM_IOCTL_MODE_CURSOR", 0xc01c64a3 },
 { "DRM_IOCTL_MODE_GETFB", 0xc01c64ad },
 { "DRM_IOCTL_MODE_ADDFB", 0xc01c64ae },
-{ "DRM_IOCTL_MODE_OBJ_GETPROPERTIES", 0xc01c64b9 },
 { "I2OSWDL", 0xc01c6905 },
 { "I2OSWUL", 0xc01c6906 },
 { "I2OSWDEL", 0xc01c6907 },
 { "I2OHTML", 0xc01c6909 },
 { "MEDIA_IOC_ENUM_LINKS", 0xc01c7c02 },
 { "FW_CDEV_IOC_ALLOCATE", 0xc0202302 },
+{ "FW_CDEV_IOC_CREATE_ISO_CONTEXT", 0xc0202308 },
 { "AMDKFD_IOC_CREATE_EVENT", 0xc0204b08 },
 { "ND_IOCTL_ARS_CAP", 0xc0204e01 },
 { "ND_IOCTL_ARS_START", 0xc0204e02 },
@@ -2602,10 +2588,9 @@
 { "VIDIOC_OMAP3ISP_CCDC_CFG", 0xc02056c1 },
 { "VIDIOC_OMAP3ISP_AEWB_CFG", 0xc02056c3 },
 { "SNDRV_RAWMIDI_IOCTL_PARAMS", 0xc0205710 },
-{ "X86_IOC_RDMSR_REGS", 0xc02063a0 },
-{ "X86_IOC_WRMSR_REGS", 0xc02063a1 },
 { "DRM_IOCTL_AMDGPU_GEM_CREATE", 0xc0206440 },
 { "DRM_IOCTL_AMDGPU_WAIT_CS", 0xc0206449 },
+{ "DRM_IOCTL_RADEON_GEM_CREATE", 0xc020645d },
 { "DRM_IOCTL_RADEON_GEM_MMAP", 0xc020645e },
 { "DRM_IOCTL_RADEON_GEM_PREAD", 0xc0206461 },
 { "DRM_IOCTL_RADEON_GEM_PWRITE", 0xc0206462 },
@@ -2614,13 +2599,14 @@
 { "DRM_IOCTL_MODE_SETGAMMA", 0xc02064a5 },
 { "DRM_IOCTL_MODE_CREATE_DUMB", 0xc02064b2 },
 { "DRM_IOCTL_MODE_GETPLANE", 0xc02064b6 },
+{ "DRM_IOCTL_MODE_OBJ_GETPROPERTIES", 0xc02064b9 },
 { "FS_IOC_FIEMAP", 0xc020660b },
 { "GENWQE_PIN_MEM", 0xc020a528 },
 { "GENWQE_UNPIN_MEM", 0xc020a529 },
 { "UFFDIO_REGISTER", 0xc020aa00 },
 { "UFFDIO_ZEROPAGE", 0xc020aa04 },
+{ "KVM_S390_GET_CMMA_BITS", 0xc020aeb8 },
 { "SNDCTL_MIDI_MPUCMD", 0xc0216d02 },
-{ "FW_CDEV_IOC_GET_INFO", 0xc0242300 },
 { "SNDRV_COMPRESS_GET_METADATA", 0xc0244315 },
 { "VIDIOC_G_EDID", 0xc0245628 },
 { "VIDIOC_SUBDEV_G_EDID", 0xc0245628 },
@@ -2628,21 +2614,18 @@
 { "VIDIOC_S_EDID", 0xc0245629 },
 { "SNDRV_RAWMIDI_IOCTL_STATUS", 0xc0245720 },
 { "DRM_IOCTL_VERSION", 0xc0246400 },
-{ "DRM_IOCTL_MSM_GEM_SUBMIT", 0xc0246446 },
 { "DRM_IOCTL_VIRTGPU_TRANSFER_FROM_HOST", 0xc0246446 },
 { "DRM_IOCTL_VIRTGPU_TRANSFER_TO_HOST", 0xc0246447 },
 { "DRM_IOCTL_MODE_CURSOR2", 0xc02464bb },
 { "NCP_IOC_GET_FS_INFO_V2", 0xc0246e04 },
-{ "SCIF_READFROM", 0xc024730a },
-{ "SCIF_WRITETO", 0xc024730b },
-{ "SCIF_VREADFROM", 0xc024730c },
-{ "SCIF_VWRITETO", 0xc024730d },
-{ "SCIF_FENCE_SIGNAL", 0xc0247311 },
 { "IB_USER_MAD_REGISTER_AGENT2", 0xc0281b04 },
+{ "FW_CDEV_IOC_GET_INFO", 0xc0282300 },
 { "AMDKFD_IOC_GET_CLOCK_COUNTERS", 0xc0284b05 },
 { "VIDIOC_ENCODER_CMD", 0xc028564d },
 { "VIDIOC_TRY_ENCODER_CMD", 0xc028564e },
+{ "SWITCHTEC_IOCTL_EVENT_CTL", 0xc0285743 },
 { "DRM_IOCTL_DMA", 0xc0286429 },
+{ "DRM_IOCTL_MSM_GEM_SUBMIT", 0xc0286446 },
 { "DRM_IOCTL_I915_GEM_MMAP", 0xc028645e },
 { "DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST", 0xc0286461 },
 { "DRM_IOCTL_EXYNOS_IPP_QUEUE_BUF", 0xc0286472 },
@@ -2652,6 +2635,11 @@
 { "NCP_IOC_GET_FS_INFO", 0xc0286e04 },
 { "PHN_GETREGS", 0xc0287007 },
 { "SCIF_REG", 0xc0287308 },
+{ "SCIF_READFROM", 0xc028730a },
+{ "SCIF_WRITETO", 0xc028730b },
+{ "SCIF_VREADFROM", 0xc028730c },
+{ "SCIF_VWRITETO", 0xc028730d },
+{ "SCIF_FENCE_SIGNAL", 0xc0287311 },
 { "UFFDIO_COPY", 0xc028aa03 },
 { "KVM_TPR_ACCESS_REPORTING", 0xc028ae92 },
 { "FSL_HV_IOCTL_MEMCPY", 0xc028af05 },
@@ -2673,7 +2661,6 @@
 { "VIDIOC_SUBDEV_S_FRAME_INTERVAL", 0xc0305616 },
 { "VIDIOC_OMAP3ISP_HIST_CFG", 0xc03056c4 },
 { "BINDER_WRITE_READ", 0xc0306201 },
-{ "DRM_IOCTL_ETNAVIV_GEM_SUBMIT", 0xc0306446 },
 { "DRM_IOCTL_NOUVEAU_GEM_NEW", 0xc0306480 },
 { "DRM_IOCTL_MODE_SETPLANE", 0xc03064b7 },
 { "GPIO_GET_LINEEVENT_IOCTL", 0xc030b404 },
@@ -2690,13 +2677,13 @@
 { "CEC_TRANSMIT", 0xc0386105 },
 { "CEC_RECEIVE", 0xc0386106 },
 { "DRM_IOCTL_VIRTGPU_RESOURCE_CREATE", 0xc0386444 },
+{ "DRM_IOCTL_ETNAVIV_GEM_SUBMIT", 0xc0386446 },
 { "DRM_IOCTL_MODE_ATOMIC", 0xc03864bc },
 { "BTRFS_IOC_INO_PATHS", 0xc0389423 },
 { "BTRFS_IOC_LOGICAL_INO", 0xc0389424 },
 { "GENWQE_SLU_UPDATE", 0xc038a550 },
 { "GENWQE_SLU_READ", 0xc038a551 },
 { "VIDIOC_OMAP3ISP_PRV_CFG", 0xc03c56c2 },
-{ "BLKTRACESETUP", 0xc0401273 },
 { "PTP_SYS_OFFSET_PRECISE", 0xc0403d08 },
 { "CAPI_GET_PROFILE", 0xc0404309 },
 { "NVME_NVM_IOCTL_SUBMIT_VIO", 0xc0404c42 },
@@ -2705,7 +2692,6 @@
 { "SNDRV_CTL_IOCTL_ELEM_REMOVE", 0xc0405519 },
 { "VIDIOC_ENUM_FMT", 0xc0405602 },
 { "VIDIOC_EXPBUF", 0xc0405610 },
-{ "VIDIOC_ENUMSTD", 0xc0405619 },
 { "VIDIOC_SUBDEV_G_SELECTION", 0xc040563d },
 { "VIDIOC_SUBDEV_S_SELECTION", 0xc040563e },
 { "VIDIOC_SUBDEV_ENUM_FRAME_SIZE", 0xc040564a },
@@ -2713,6 +2699,7 @@
 { "VIDIOC_G_SELECTION", 0xc040565e },
 { "VIDIOC_S_SELECTION", 0xc040565f },
 { "VIDIOC_ENUM_FREQ_BANDS", 0xc0405665 },
+{ "DRM_IOCTL_I915_GEM_EXECBUFFER2_WR", 0xc0406469 },
 { "DRM_IOCTL_NOUVEAU_GEM_PUSHBUF", 0xc0406481 },
 { "DRM_IOCTL_MODE_GETRESOURCES", 0xc04064a0 },
 { "DRM_IOCTL_MODE_GETPROPERTY", 0xc04064aa },
@@ -2724,11 +2711,13 @@
 { "VIDIOC_QUERYCTRL", 0xc0445624 },
 { "VIDIOC_G_MODULATOR", 0xc0445636 },
 { "VIDIOC_PREPARE_BUF", 0xc044565d },
+{ "BLKTRACESETUP", 0xc0481273 },
 { "FBIO_CURSOR", 0xc0484608 },
 { "SNDRV_EMU10K1_IOCTL_PCM_PEEK", 0xc0484831 },
 { "NVME_IOCTL_ADMIN_CMD", 0xc0484e41 },
 { "NVME_IOCTL_IO_CMD", 0xc0484e43 },
 { "SNDRV_CTL_IOCTL_ELEM_LIST", 0xc0485510 },
+{ "VIDIOC_ENUMSTD", 0xc0485619 },
 { "VIDIOC_ENUMOUTPUT", 0xc0485630 },
 { "VIDIOC_DECODER_CMD", 0xc0485660 },
 { "VIDIOC_TRY_DECODER_CMD", 0xc0485661 },
@@ -2737,16 +2726,15 @@
 { "VIDEO_COMMAND", 0xc0486f3b },
 { "VIDEO_TRY_COMMAND", 0xc0486f3c },
 { "MEDIA_IOC_G_TOPOLOGY", 0xc0487c04 },
-{ "KVM_GET_PIT", 0xc048ae65 },
 { "MMC_IOC_CMD", 0xc048b300 },
 { "GPIO_GET_LINEINFO_IOCTL", 0xc048b402 },
 { "SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT", 0xc04c5349 },
-{ "VIDIOC_ENUMINPUT", 0xc04c561a },
 { "VIDIOC_OMAP3ISP_AF_CFG", 0xc04c56c5 },
 { "CEC_ADAP_G_CAPS", 0xc04c6100 },
 { "NVME_NVM_IOCTL_ADMIN_VIO", 0xc0504c41 },
 { "NVME_NVM_IOCTL_IO_VIO", 0xc0504c43 },
 { "SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION", 0xc0505350 },
+{ "VIDIOC_ENUMINPUT", 0xc050561a },
 { "CEC_DQEVENT", 0xc0506107 },
 { "DRM_IOCTL_EXYNOS_IPP_GET_PROPERTY", 0xc0506470 },
 { "DRM_IOCTL_MODE_GETCONNECTOR", 0xc05064a7 },
@@ -2768,10 +2756,10 @@
 { "UI_BEGIN_FF_UPLOAD", 0xc06055c8 },
 { "DRM_IOCTL_EXYNOS_IPP_SET_PROPERTY", 0xc0606471 },
 { "DK_CXLFLASH_DETACH", 0xc060ca83 },
-{ "DRM_IOCTL_MODE_ADDFB2", 0xc06464b8 },
 { "SNDRV_PCM_IOCTL_SW_PARAMS", 0xc0684113 },
 { "DRM_IOCTL_MODE_GETCRTC", 0xc06864a1 },
 { "DRM_IOCTL_MODE_SETCRTC", 0xc06864a2 },
+{ "DRM_IOCTL_MODE_ADDFB2", 0xc06864b8 },
 { "DK_CXLFLASH_RELEASE", 0xc068ca82 },
 { "DK_CXLFLASH_MANAGE_LUN", 0xc068ca86 },
 { "SNDRV_PCM_IOCTL_STATUS_EXT", 0xc06c4124 },
@@ -2783,6 +2771,7 @@
 { "DK_CXLFLASH_RECOVER_AFU", 0xc078ca85 },
 { "DK_CXLFLASH_USER_VIRTUAL", 0xc078ca87 },
 { "DK_CXLFLASH_VLUN_RESIZE", 0xc078ca88 },
+{ "HT_CXLFLASH_AFU_DEBUG", 0xc078cabe },
 { "SOUND_MIXER_ACCESS", 0xc0804d66 },
 { "SNDRV_PCM_IOCTL_SYNC_PTR", 0xc0844123 },
 { "ND_IOCTL_SMART", 0xc0844e01 },
@@ -2805,6 +2794,7 @@
 { "VIDIOC_SUBDEV_ENUM_DV_TIMINGS", 0xc0945662 },
 { "DRM_IOCTL_VC4_SUBMIT_CL", 0xc0a06440 },
 { "DRM_IOCTL_VC4_GET_HANG_STATE", 0xc0a06446 },
+{ "HT_CXLFLASH_LUN_PROVISION", 0xc0a0cabf },
 { "SOUND_MIXER_GETLEVELS", 0xc0a44d74 },
 { "SOUND_MIXER_SETLEVELS", 0xc0a44d75 },
 { "SNDRV_SEQ_IOCTL_CREATE_PORT", 0xc0a45320 },
@@ -2812,9 +2802,10 @@
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT", 0xc0a45352 },
 { "SNDRV_SEQ_IOCTL_GET_CLIENT_INFO", 0xc0bc5310 },
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT", 0xc0bc5351 },
-{ "BTRFS_IOC_SET_RECEIVED_SUBVOL", 0xc0c09425 },
+{ "FS_IOC_GETFSMAP", 0xc0c0583b },
 { "SNDRV_COMPRESS_GET_CAPS", 0xc0c44310 },
 { "VIDIOC_DBG_G_CHIP_INFO", 0xc0c85666 },
+{ "BTRFS_IOC_SET_RECEIVED_SUBVOL", 0xc0c89425 },
 { "VIDIOC_G_FMT", 0xc0cc5604 },
 { "VIDIOC_S_FMT", 0xc0cc5605 },
 { "VIDIOC_G_PARM", 0xc0cc5615 },
@@ -2831,8 +2822,8 @@
 { "SNDRV_CTL_IOCTL_ELEM_INFO", 0xc1105511 },
 { "SNDRV_CTL_IOCTL_ELEM_ADD", 0xc1105517 },
 { "SNDRV_CTL_IOCTL_ELEM_REPLACE", 0xc1105518 },
-{ "DRM_IOCTL_AMDGPU_GEM_METADATA", 0xc11c6446 },
 { "SNDRV_CTL_IOCTL_PCM_INFO", 0xc1205531 },
+{ "DRM_IOCTL_AMDGPU_GEM_METADATA", 0xc1206446 },
 { "DM_VERSION", 0xc138fd00 },
 { "DM_REMOVE_ALL", 0xc138fd01 },
 { "DM_LIST_DEVICES", 0xc138fd02 },
@@ -2849,18 +2840,19 @@
 { "DM_LIST_VERSIONS", 0xc138fd0d },
 { "DM_TARGET_MSG", 0xc138fd0e },
 { "DM_DEV_SET_GEOMETRY", 0xc138fd0f },
+{ "DM_DEV_ARM_POLL", 0xc138fd10 },
 { "GPIO_GET_LINEHANDLE_IOCTL", 0xc16cb403 },
 { "SNDRV_EMU10K1_IOCTL_CODE_PEEK", 0xc18c4812 },
 { "KVM_GET_IRQCHIP", 0xc208ae62 },
 { "SNDRV_PCM_IOCTL_HW_REFINE", 0xc25c4110 },
 { "SNDRV_PCM_IOCTL_HW_PARAMS", 0xc25c4111 },
-{ "SNDRV_CTL_IOCTL_ELEM_READ", 0xc2c45512 },
-{ "SNDRV_CTL_IOCTL_ELEM_WRITE", 0xc2c45513 },
+{ "SNDRV_CTL_IOCTL_ELEM_READ", 0xc2c85512 },
+{ "SNDRV_CTL_IOCTL_ELEM_WRITE", 0xc2c85513 },
 { "BTRFS_IOC_SCRUB", 0xc400941b },
 { "BTRFS_IOC_SCRUB_PROGRESS", 0xc400941d },
 { "BTRFS_IOC_BALANCE_V2", 0xc4009420 },
 { "BTRFS_IOC_GET_DEV_STATS", 0xc4089434 },
-{ "BTRFS_IOC_DEV_REPLACE", 0xca249435 },
+{ "BTRFS_IOC_DEV_REPLACE", 0xca289435 },
 { "SNDCTL_COPR_SENDMSG", 0xcfa44308 },
 { "SNDCTL_SYNTH_CONTROL", 0xcfa45115 },
 { "SNDCTL_COPR_LOAD", 0xcfb04301 },
diff --git a/ioctlent2.h b/ioctlent2.h
index 5549d01..9065d16 100644
--- a/ioctlent2.h
+++ b/ioctlent2.h
@@ -269,7 +269,6 @@
 { "IIOCNETGPN", 0x00004922 },
 { "IIOCDBGVAR", 0x0000497f },
 { "IIOCDRVCTL", 0x00004980 },
-{ "ION_IOC_TEST_SET_FD", 0x000049f0 },
 { "KIOCSOUND", 0x00004b2f },
 { "KDMKTONE", 0x00004b30 },
 { "KDGETLED", 0x00004b31 },
@@ -339,7 +338,9 @@
 { "OMAPFB_WAITFORVSYNC", 0x00004f39 },
 { "OMAPFB_WAITFORGO", 0x00004f3c },
 { "SNDCTL_DSP_RESET", 0x00005000 },
+{ "PCITEST_BAR", 0x00005001 },
 { "SNDCTL_DSP_SYNC", 0x00005001 },
+{ "PCITEST_LEGACY_IRQ", 0x00005002 },
 { "SNDCTL_DSP_POST", 0x00005008 },
 { "SNDCTL_DSP_NONBLOCK", 0x0000500e },
 { "SNDCTL_DSP_SETSYNCRO", 0x00005015 },
@@ -451,6 +452,7 @@
 { "TCSETXF", 0x00005434 },
 { "TCSETXW", 0x00005435 },
 { "TIOCVHANGUP", 0x00005437 },
+{ "TIOCGPTPEER", 0x00005441 },
 { "FIONCLEX", 0x00005450 },
 { "FIOCLEX", 0x00005451 },
 { "FIOASYNC", 0x00005452 },
@@ -476,6 +478,7 @@
 { "USBDEVFS_RESET", 0x00005514 },
 { "USBDEVFS_DISCONNECT", 0x00005516 },
 { "USBDEVFS_CONNECT", 0x00005517 },
+{ "USBDEVFS_GET_SPEED", 0x0000551f },
 { "VT_OPENQRY", 0x00005600 },
 { "VIDIOC_RESERVED", 0x00005601 },
 { "VT_GETMODE", 0x00005601 },
@@ -949,6 +952,7 @@
 { "AGPIOC_SETUP", 0x40044103 },
 { "SNDRV_PCM_IOCTL_TTSTAMP", 0x40044103 },
 { "AGPIOC_RESERVE", 0x40044104 },
+{ "SNDRV_PCM_IOCTL_USER_PVERSION", 0x40044104 },
 { "AGPIOC_PROTECT", 0x40044105 },
 { "AGPIOC_DEALLOCATE", 0x40044107 },
 { "AGPIOC_BIND", 0x40044108 },
@@ -1004,6 +1008,10 @@
 { "OMAPFB_GET_UPDATE_MODE", 0x40044f2b },
 { "OMAPFB_LCD_TEST", 0x40044f2d },
 { "OMAPFB_CTRL_TEST", 0x40044f2e },
+{ "PCITEST_MSI", 0x40045003 },
+{ "PCITEST_WRITE", 0x40045004 },
+{ "PCITEST_READ", 0x40045005 },
+{ "PCITEST_COPY", 0x40045006 },
 { "SNDCTL_DSP_SETTRIGGER", 0x40045010 },
 { "SNDCTL_DSP_PROFILE", 0x40045017 },
 { "SNDCTL_DSP_SETSPDIF", 0x40045042 },
@@ -1060,7 +1068,6 @@
 { "VIDIOC_S_PRIORITY", 0x40045644 },
 { "IVTV_IOC_PASSTHROUGH_MODE", 0x400456c1 },
 { "VIDIOC_AM437X_CCDC_CFG", 0x400456c1 },
-{ "VPFE_CMD_S_CCDC_RAW_PARAMS", 0x400456c1 },
 { "SNDRV_RAWMIDI_IOCTL_DROP", 0x40045730 },
 { "SNDRV_RAWMIDI_IOCTL_DRAIN", 0x40045731 },
 { "CEC_S_MODE", 0x40046109 },
@@ -1481,6 +1488,7 @@
 { "KVM_ARM_SET_DEVICE_ADDR", 0x4010aeab },
 { "KVM_GET_ONE_REG", 0x4010aeab },
 { "KVM_SET_ONE_REG", 0x4010aeac },
+{ "ASPEED_LPC_CTRL_IOCTL_MAP", 0x4010b201 },
 { "SNDRV_DM_FM_IOCTL_SET_VOICE", 0x40124823 },
 { "FDSETMAXERRS", 0x4014024c },
 { "ADD_NEW_DISK", 0x40140921 },
@@ -1539,8 +1547,6 @@
 { "OSD_SEND_CMD", 0x401c6fa0 },
 { "RTC_PLL_SET", 0x401c7012 },
 { "CS_CONFIG_BUFS", 0x4020431f },
-{ "ION_IOC_TEST_DMA_MAPPING", 0x402049f1 },
-{ "ION_IOC_TEST_KERNEL_MAPPING", 0x402049f2 },
 { "AMDKFD_IOC_SET_MEMORY_POLICY", 0x40204b04 },
 { "VIDIOC_SUBSCRIBE_EVENT", 0x4020565a },
 { "VIDIOC_UNSUBSCRIBE_EVENT", 0x4020565b },
@@ -1562,6 +1568,7 @@
 { "KVM_SIGNAL_MSI", 0x4020aea5 },
 { "KVM_S390_SET_IRQ_STATE", 0x4020aeb5 },
 { "KVM_S390_GET_IRQ_STATE", 0x4020aeb6 },
+{ "KVM_S390_SET_CMMA_BITS", 0x4020aeb9 },
 { "SNDRV_COMPRESS_SET_METADATA", 0x40244314 },
 { "NVM_DEV_REMOVE", 0x40244c23 },
 { "NVM_DEV_FACTORY", 0x40244c25 },
@@ -1983,6 +1990,7 @@
 { "AUTOFS_IOC_PROTOVER", 0x80049363 },
 { "AUTOFS_IOC_PROTOSUBVER", 0x80049367 },
 { "AUTOFS_IOC_ASKUMOUNT", 0x80049370 },
+{ "TEE_IOC_CLOSE_SESSION", 0x8004a405 },
 { "GENWQE_GET_CARD_STATE", 0x8004a524 },
 { "KVM_GET_MP_STATE", 0x8004ae98 },
 { "CXL_IOCTL_GET_PROCESS_ELEMENT", 0x8004ca01 },
@@ -2034,6 +2042,7 @@
 { "BR_CLEAR_DEATH_NOTIFICATION_DONE", 0x80087210 },
 { "BTRFS_IOC_START_SYNC", 0x80089418 },
 { "BTRFS_IOC_SUBVOL_GETFLAGS", 0x80089419 },
+{ "TEE_IOC_CANCEL", 0x8008a404 },
 { "KVM_X86_GET_MCE_CAP_SUPPORTED", 0x8008ae9d },
 { "VHOST_GET_FEATURES", 0x8008af00 },
 { "FUNCTIONFS_ENDPOINT_DESC", 0x80096782 },
@@ -2056,6 +2065,7 @@
 { "VIDEO_GET_SIZE", 0x800c6f37 },
 { "FE_DISEQC_RECV_SLAVE_REPLY", 0x800c6f40 },
 { "CA_GET_SLOT_INFO", 0x800c6f82 },
+{ "TEE_IOC_VERSION", 0x800ca400 },
 { "FDGETDRVTYP", 0x8010020f },
 { "FW_CDEV_IOC_GET_CYCLE_TIMER", 0x8010230c },
 { "STP_POLICY_ID_GET", 0x80102501 },
@@ -2066,6 +2076,7 @@
 { "OMAPFB_MEMORY_READ", 0x80104f3a },
 { "SNDCTL_DSP_GETOSPACE", 0x8010500c },
 { "SNDCTL_DSP_GETISPACE", 0x8010500d },
+{ "SWITCHTEC_IOCTL_FLASH_INFO", 0x80105740 },
 { "DRM_IOCTL_I915_GEM_GET_APERTURE", 0x80106463 },
 { "MGSL_IOCGGPIO", 0x80106d11 },
 { "CA_GET_CAP", 0x80106f81 },
@@ -2076,6 +2087,10 @@
 { "BR_DECREFS", 0x8010720a },
 { "PPPIOCGIDLE", 0x8010743f },
 { "PPPIOCGIFNAME", 0x80107488 },
+{ "TEE_IOC_OPEN_SESSION", 0x8010a402 },
+{ "TEE_IOC_INVOKE", 0x8010a403 },
+{ "TEE_IOC_SUPPL_RECV", 0x8010a406 },
+{ "TEE_IOC_SUPPL_SEND", 0x8010a407 },
 { "GENWQE_READ_REG64", 0x8010a51e },
 { "GENWQE_READ_REG32", 0x8010a520 },
 { "GENWQE_READ_REG16", 0x8010a522 },
@@ -2090,6 +2105,7 @@
 { "IPMICTL_SEND_COMMAND", 0x8014690d },
 { "NCP_IOC_LOCKUNLOCK", 0x80146e07 },
 { "VIDEO_GET_STATUS", 0x80146f1b },
+{ "VIDEO_GET_EVENT", 0x80146f1c },
 { "FDWERRORGET", 0x80180217 },
 { "SNDRV_PCM_IOCTL_CHANNEL_INFO", 0x80184132 },
 { "SNDRV_HDSPM_IOCTL_GET_CONFIG", 0x80184841 },
@@ -2121,7 +2137,6 @@
 { "I2OGETIOPS", 0x80206900 },
 { "MGSL_IOCGPARAMS", 0x80206d01 },
 { "AUDIO_GET_STATUS", 0x80206f0a },
-{ "VIDEO_GET_EVENT", 0x80206f1c },
 { "PPPIOCGXASYNCMAP", 0x80207450 },
 { "PPPIOCGCOMPRESSORS", 0x80207486 },
 { "SNDRV_HDSP_IOCTL_GET_CONFIG_INFO", 0x80244841 },
@@ -2205,6 +2220,7 @@
 { "SNDRV_CTL_IOCTL_CARD_INFO", 0x81785501 },
 { "KVM_GET_XCRS", 0x8188aea6 },
 { "AMDKFD_IOC_GET_PROCESS_APERTURES", 0x81904b06 },
+{ "SWITCHTEC_IOCTL_EVENT_SUMMARY", 0x81985742 },
 { "KVM_GET_FPU", 0x81a0ae8c },
 { "KVM_SET_IRQCHIP", 0x8208ae63 },
 { "VFAT_IOCTL_READDIR_BOTH", 0x82307201 },
@@ -2233,7 +2249,6 @@
 { "CAPI_GET_SERIAL", 0xc0044308 },
 { "GIGASET_REDIR", 0xc0044700 },
 { "GIGASET_CONFIG", 0xc0044701 },
-{ "ION_IOC_FREE", 0xc0044901 },
 { "SOUND_MIXER_AGC", 0xc0044d67 },
 { "SOUND_MIXER_3DSE", 0xc0044d68 },
 { "SOUND_MIXER_PRIVATE1", 0xc0044d6f },
@@ -2311,11 +2326,6 @@
 { "CAPI_MANUFACTURER_CMD", 0xc0084320 },
 { "HDA_IOCTL_VERB_WRITE", 0xc0084811 },
 { "HDA_IOCTL_GET_WCAP", 0xc0084812 },
-{ "ION_IOC_MAP", 0xc0084902 },
-{ "ION_IOC_SHARE", 0xc0084904 },
-{ "ION_IOC_IMPORT", 0xc0084905 },
-{ "ION_IOC_CUSTOM", 0xc0084906 },
-{ "ION_IOC_SYNC", 0xc0084907 },
 { "AMDKFD_IOC_DESTROY_QUEUE", 0xc0084b03 },
 { "ND_IOCTL_DIMM_FLAGS", 0xc0084e03 },
 { "ND_IOCTL_SET_CONFIG_DATA", 0xc0084e06 },
@@ -2349,6 +2359,7 @@
 { "DRM_IOCTL_TEGRA_GEM_GET_FLAGS", 0xc008644d },
 { "DRM_IOCTL_RADEON_GETPARAM", 0xc0086451 },
 { "DRM_IOCTL_R128_GETPARAM", 0xc0086452 },
+{ "DRM_IOCTL_AMDGPU_VM", 0xc0086453 },
 { "DRM_IOCTL_SIS_AGP_INIT", 0xc0086453 },
 { "DRM_IOCTL_I915_GEM_BUSY", 0xc0086457 },
 { "DRM_IOCTL_EXYNOS_G2D_GET_VER", 0xc0086460 },
@@ -2358,6 +2369,8 @@
 { "DRM_IOCTL_I915_GEM_CONTEXT_CREATE", 0xc008646d },
 { "DRM_IOCTL_I915_GEM_GET_CACHING", 0xc0086470 },
 { "DRM_IOCTL_EXYNOS_IPP_CMD_CTRL", 0xc0086473 },
+{ "DRM_IOCTL_SYNCOBJ_CREATE", 0xc00864bf },
+{ "DRM_IOCTL_SYNCOBJ_DESTROY", 0xc00864c0 },
 { "NCP_IOC_GETPRIVATEDATA", 0xc0086e0a },
 { "PHN_GETREG", 0xc0087005 },
 { "SCIF_BIND", 0xc0087301 },
@@ -2385,6 +2398,8 @@
 { "SNDCTL_SYNTH_REMOVESAMPLE", 0xc00c5116 },
 { "USBDEVFS_IOCTL", 0xc00c5512 },
 { "UI_BEGIN_FF_ERASE", 0xc00c55ca },
+{ "SWITCHTEC_IOCTL_PFF_TO_PORT", 0xc00c5744 },
+{ "SWITCHTEC_IOCTL_PORT_TO_PFF", 0xc00c5745 },
 { "NS_GETPSTAT", 0xc00c6161 },
 { "DRM_IOCTL_MAP_BUFS", 0xc00c6419 },
 { "DRM_IOCTL_PRIME_HANDLE_TO_FD", 0xc00c642d },
@@ -2415,6 +2430,7 @@
 { "SNDRV_SEQ_IOCTL_RUNNING_MODE", 0xc0105303 },
 { "USBDEVFS_CONTROL", 0xc0105500 },
 { "USBDEVFS_BULK", 0xc0105502 },
+{ "SWITCHTEC_IOCTL_FLASH_PART_INFO", 0xc0105741 },
 { "RIO_CM_CHAN_RECEIVE", 0xc010630a },
 { "DRM_IOCTL_IRQ_BUSID", 0xc0106403 },
 { "DRM_IOCTL_SET_VERSION", 0xc0106407 },
@@ -2457,7 +2473,9 @@
 { "DRM_IOCTL_VC4_GET_PARAM", 0xc0106447 },
 { "DRM_IOCTL_VIA_DMA_INIT", 0xc0106447 },
 { "DRM_IOCTL_I915_ALLOC", 0xc0106448 },
+{ "DRM_IOCTL_VC4_SET_TILING", 0xc0106448 },
 { "DRM_IOCTL_TEGRA_GET_SYNCPT_BASE", 0xc0106449 },
+{ "DRM_IOCTL_VC4_GET_TILING", 0xc0106449 },
 { "DRM_IOCTL_TEGRA_GEM_SET_TILING", 0xc010644a },
 { "DRM_IOCTL_TEGRA_GEM_GET_TILING", 0xc010644b },
 { "DRM_IOCTL_RADEON_INDIRECT", 0xc010644d },
@@ -2479,6 +2497,8 @@
 { "DRM_IOCTL_MODE_MAP_DUMB", 0xc01064b3 },
 { "DRM_IOCTL_MODE_GETPLANERESOURCES", 0xc01064b5 },
 { "DRM_IOCTL_MODE_CREATEPROPBLOB", 0xc01064bd },
+{ "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", 0xc01064c1 },
+{ "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", 0xc01064c2 },
 { "MGSL_IOCWAITGPIO", 0xc0106d12 },
 { "DMX_GET_STC", 0xc0106f32 },
 { "SCIF_ACCEPTREQ", 0xc0107304 },
@@ -2486,12 +2506,13 @@
 { "SCIF_FENCE_MARK", 0xc010730f },
 { "BTRFS_IOC_SPACE_INFO", 0xc0109414 },
 { "BTRFS_IOC_QUOTA_CTL", 0xc0109428 },
+{ "TEE_IOC_SHM_ALLOC", 0xc010a401 },
 { "FSL_HV_IOCTL_PARTITION_START", 0xc010af03 },
+{ "ASPEED_LPC_CTRL_IOCTL_GET_SIZE", 0xc010b200 },
 { "SNDCTL_COPR_RDATA", 0xc0144302 },
 { "SNDCTL_COPR_RCODE", 0xc0144303 },
 { "SNDCTL_COPR_RUN", 0xc0144306 },
 { "SNDCTL_COPR_HALT", 0xc0144307 },
-{ "ION_IOC_ALLOC", 0xc0144900 },
 { "SNDRV_TIMER_IOCTL_NEXT_DEVICE", 0xc0145401 },
 { "VIDIOC_REQBUFS", 0xc0145608 },
 { "VIDIOC_G_CROP", 0xc014563b },
@@ -2511,6 +2532,7 @@
 { "FW_CDEV_IOC_SEND_PHY_PACKET", 0xc0182315 },
 { "HIDIOCGUSAGE", 0xc018480b },
 { "HIDIOCGUCODE", 0xc018480d },
+{ "ION_IOC_ALLOC", 0xc0184900 },
 { "ION_IOC_HEAP_QUERY", 0xc0184908 },
 { "AMDKFD_IOC_WAIT_EVENTS", 0xc0184b0c },
 { "MTRRIOC_GET_ENTRY", 0xc0184d03 },
@@ -2619,6 +2641,7 @@
 { "GENWQE_UNPIN_MEM", 0xc020a529 },
 { "UFFDIO_REGISTER", 0xc020aa00 },
 { "UFFDIO_ZEROPAGE", 0xc020aa04 },
+{ "KVM_S390_GET_CMMA_BITS", 0xc020aeb8 },
 { "SNDCTL_MIDI_MPUCMD", 0xc0216d02 },
 { "SNDRV_COMPRESS_GET_METADATA", 0xc0244315 },
 { "VIDIOC_G_EDID", 0xc0245628 },
@@ -2635,6 +2658,7 @@
 { "AMDKFD_IOC_GET_CLOCK_COUNTERS", 0xc0284b05 },
 { "VIDIOC_ENCODER_CMD", 0xc028564d },
 { "VIDIOC_TRY_ENCODER_CMD", 0xc028564e },
+{ "SWITCHTEC_IOCTL_EVENT_CTL", 0xc0285743 },
 { "DRM_IOCTL_DMA", 0xc0286429 },
 { "DRM_IOCTL_MSM_GEM_SUBMIT", 0xc0286446 },
 { "DRM_IOCTL_I915_GEM_MMAP", 0xc028645e },
@@ -2673,7 +2697,6 @@
 { "VIDIOC_OMAP3ISP_HIST_CFG", 0xc03056c4 },
 { "SNDRV_RAWMIDI_IOCTL_STATUS", 0xc0305720 },
 { "BINDER_WRITE_READ", 0xc0306201 },
-{ "DRM_IOCTL_ETNAVIV_GEM_SUBMIT", 0xc0306446 },
 { "DRM_IOCTL_NOUVEAU_GEM_NEW", 0xc0306480 },
 { "DRM_IOCTL_MODE_SETPLANE", 0xc03064b7 },
 { "GPIO_GET_LINEEVENT_IOCTL", 0xc030b404 },
@@ -2690,6 +2713,7 @@
 { "CEC_TRANSMIT", 0xc0386105 },
 { "CEC_RECEIVE", 0xc0386106 },
 { "DRM_IOCTL_VIRTGPU_RESOURCE_CREATE", 0xc0386444 },
+{ "DRM_IOCTL_ETNAVIV_GEM_SUBMIT", 0xc0386446 },
 { "DRM_IOCTL_MODE_ATOMIC", 0xc03864bc },
 { "BTRFS_IOC_INO_PATHS", 0xc0389423 },
 { "BTRFS_IOC_LOGICAL_INO", 0xc0389424 },
@@ -2711,6 +2735,7 @@
 { "VIDIOC_G_SELECTION", 0xc040565e },
 { "VIDIOC_S_SELECTION", 0xc040565f },
 { "VIDIOC_ENUM_FREQ_BANDS", 0xc0405665 },
+{ "DRM_IOCTL_I915_GEM_EXECBUFFER2_WR", 0xc0406469 },
 { "DRM_IOCTL_NOUVEAU_GEM_PUSHBUF", 0xc0406481 },
 { "DRM_IOCTL_MODE_GETRESOURCES", 0xc04064a0 },
 { "DRM_IOCTL_MODE_GETPROPERTY", 0xc04064aa },
@@ -2782,6 +2807,7 @@
 { "DK_CXLFLASH_RECOVER_AFU", 0xc078ca85 },
 { "DK_CXLFLASH_USER_VIRTUAL", 0xc078ca87 },
 { "DK_CXLFLASH_VLUN_RESIZE", 0xc078ca88 },
+{ "HT_CXLFLASH_AFU_DEBUG", 0xc078cabe },
 { "SNDRV_PCM_IOCTL_STATUS_EXT", 0xc0804124 },
 { "SOUND_MIXER_ACCESS", 0xc0804d66 },
 { "ND_IOCTL_SMART", 0xc0844e01 },
@@ -2805,6 +2831,7 @@
 { "VIDIOC_SUBDEV_ENUM_DV_TIMINGS", 0xc0945662 },
 { "DRM_IOCTL_VC4_SUBMIT_CL", 0xc0a06440 },
 { "DRM_IOCTL_VC4_GET_HANG_STATE", 0xc0a06446 },
+{ "HT_CXLFLASH_LUN_PROVISION", 0xc0a0cabf },
 { "SOUND_MIXER_GETLEVELS", 0xc0a44d74 },
 { "SOUND_MIXER_SETLEVELS", 0xc0a44d75 },
 { "SNDRV_SEQ_IOCTL_CREATE_PORT", 0xc0a45320 },
@@ -2812,6 +2839,7 @@
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT", 0xc0a45352 },
 { "SNDRV_SEQ_IOCTL_GET_CLIENT_INFO", 0xc0bc5310 },
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT", 0xc0bc5351 },
+{ "FS_IOC_GETFSMAP", 0xc0c0583b },
 { "SNDRV_COMPRESS_GET_CAPS", 0xc0c44310 },
 { "VIDIOC_DBG_G_CHIP_INFO", 0xc0c85666 },
 { "BTRFS_IOC_SET_RECEIVED_SUBVOL", 0xc0c89425 },
@@ -2849,6 +2877,7 @@
 { "DM_LIST_VERSIONS", 0xc138fd0d },
 { "DM_TARGET_MSG", 0xc138fd0e },
 { "DM_DEV_SET_GEOMETRY", 0xc138fd0f },
+{ "DM_DEV_ARM_POLL", 0xc138fd10 },
 { "GPIO_GET_LINEHANDLE_IOCTL", 0xc16cb403 },
 { "SNDRV_EMU10K1_IOCTL_CODE_PEEK", 0xc18c4812 },
 { "KVM_GET_IRQCHIP", 0xc208ae62 },
diff --git a/kernel_types.h b/kernel_types.h
index 373a3e0..3651014 100644
--- a/kernel_types.h
+++ b/kernel_types.h
@@ -55,4 +55,36 @@
 	char		d_name[1];
 } kernel_dirent;
 
+#if SIZEOF_KERNEL_LONG_T > SIZEOF_LONG
+# define PRI_kl "ll"
+#else
+# define PRI_kl "l"
+#endif
+
+#define PRI_kld PRI_kl"d"
+#define PRI_klu PRI_kl"u"
+#define PRI_klx PRI_kl"x"
+
+/*
+ * The kernel used to define 64-bit types on 64-bit systems on a per-arch
+ * basis.  Some architectures would use unsigned long and others would use
+ * unsigned long long.  These types were exported as part of the
+ * kernel-userspace ABI and now must be maintained forever.  This matches
+ * what the kernel exports for each architecture so we don't need to cast
+ * every printing of __u64 or __s64 to stdint types.
+ * The exception is Android, where for MIPS64 unsigned long long is used.
+ */
+#if SIZEOF_LONG == 4
+# define PRI__64 "ll"
+#elif defined ALPHA || defined IA64 || defined POWERPC \
+      || (defined MIPS && !defined __ANDROID__)
+# define PRI__64 "l"
+#else
+# define PRI__64 "ll"
+#endif
+
+#define PRI__d64 PRI__64"d"
+#define PRI__u64 PRI__64"u"
+#define PRI__x64 PRI__64"x"
+
 #endif /* !STRACE_KERNEL_TYPES_H */
diff --git a/keyctl.c b/keyctl.c
index 3165fcd..9ee0803 100644
--- a/keyctl.c
+++ b/keyctl.c
@@ -28,6 +28,9 @@
 
 #include "defs.h"
 
+#include "keyctl_kdf_params.h"
+#include "print_fields.h"
+
 typedef int32_t key_serial_t;
 
 #include "xlat/key_spec.h"
@@ -245,12 +248,14 @@
 
 static void
 keyctl_dh_compute(struct tcb *tcp, kernel_ulong_t params, kernel_ulong_t buf,
-		  kernel_ulong_t len)
+		  kernel_ulong_t len, kernel_ulong_t kdf_addr)
 {
 	if (entering(tcp)) {
 		print_dh_params(tcp, params);
 		tprints(", ");
 	} else {
+		struct strace_keyctl_kdf_params kdf;
+
 		if (syserror(tcp)) {
 			printaddr(buf);
 		} else {
@@ -259,10 +264,64 @@
 				(kernel_ulong_t) tcp->u_rval;
 			printstrn(tcp, buf, rval);
 		}
-		tprintf(", %llu", zero_extend_signed_to_ull(len));
+		tprintf(", %llu, ", zero_extend_signed_to_ull(len));
+
+		if (fetch_keyctl_kdf_params(tcp, kdf_addr, &kdf)) {
+			printaddr(kdf_addr);
+		} else {
+			size_t i;
+
+			PRINT_FIELD_STR("{", kdf, hashname, tcp);
+
+			/*
+			 * Kernel doesn't touch otherinfo
+			 * if otherinfolen is zero.
+			 */
+			if (kdf.otherinfolen)
+				PRINT_FIELD_STRN(", ", kdf, otherinfo,
+						 kdf.otherinfolen, tcp);
+			else
+				PRINT_FIELD_PTR(", ", kdf, otherinfo);
+
+			PRINT_FIELD_U(", ", kdf, otherinfolen);
+
+			/* Some future-proofing */
+			for (i = 0; i < ARRAY_SIZE(kdf.__spare); i++) {
+				if (kdf.__spare[i])
+					break;
+			}
+
+			if (i < ARRAY_SIZE(kdf.__spare)) {
+				tprints(", __spare=[");
+
+				for (i = 0; i < ARRAY_SIZE(kdf.__spare); i++) {
+					if (i)
+						tprints(", ");
+
+					tprintf("%#x", kdf.__spare[i]);
+				}
+
+				tprints("]");
+			}
+
+			tprints("}");
+		}
 	}
 }
 
+static void
+keyctl_restrict_keyring(struct tcb *const tcp,
+			const key_serial_t id,
+			const kernel_ulong_t addr1,
+			const kernel_ulong_t addr2)
+{
+	print_keyring_serial_number(id);
+	tprints(", ");
+	printstr(tcp, addr1);
+	tprints(", ");
+	printstr(tcp, addr2);
+}
+
 #include "xlat/key_reqkeys.h"
 #include "xlat/keyctl_commands.h"
 
@@ -360,9 +419,13 @@
 		break;
 
 	case KEYCTL_DH_COMPUTE:
-		keyctl_dh_compute(tcp, arg2, arg3, arg4);
+		keyctl_dh_compute(tcp, arg2, arg3, arg4, arg5);
 		return 0;
 
+	case KEYCTL_RESTRICT_KEYRING:
+		keyctl_restrict_keyring(tcp, arg2, arg3, arg4);
+		break;
+
 	default:
 		tprintf("%#" PRI_klx ", %#" PRI_klx
 			", %#" PRI_klx ", %#" PRI_klx,
diff --git a/keyctl_kdf_params.h b/keyctl_kdf_params.h
new file mode 100644
index 0000000..7f3a9db
--- /dev/null
+++ b/keyctl_kdf_params.h
@@ -0,0 +1,27 @@
+#ifndef STRACE_KEYCTL_KDF_PARAMS_H
+#define STRACE_KEYCTL_KDF_PARAMS_H
+
+#include <stdint.h>
+#include "kernel_types.h"
+
+/* from include/linux/crypto.h */
+#define CRYPTO_MAX_ALG_NAME		128
+
+/* from security/keys/internal.h */
+#define KEYCTL_KDF_MAX_OI_LEN		64      /* max length of otherinfo */
+
+struct keyctl_kdf_params {
+	char *hashname;
+	char *otherinfo;
+	uint32_t otherinfolen;
+	uint32_t __spare[8];
+};
+
+struct strace_keyctl_kdf_params {
+	kernel_ulong_t hashname;
+	kernel_ulong_t otherinfo;
+	uint32_t otherinfolen;
+	uint32_t __spare[8];
+};
+
+#endif /* STRACE_KEYCTL_KDF_PARAMS_H */
diff --git a/linux/32/ioctls_inc_align16.h b/linux/32/ioctls_inc_align16.h
index c16d5a8..2cef342 100644
--- a/linux/32/ioctls_inc_align16.h
+++ b/linux/32/ioctls_inc_align16.h
@@ -39,6 +39,7 @@
 { "asm-generic/ioctls.h", "TIOCGPKT", _IOC_READ, 0x5438, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTLCK", _IOC_READ, 0x5439, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTN", _IOC_READ, 0x5430, 0x04 },
+{ "asm-generic/ioctls.h", "TIOCGPTPEER", _IOC_NONE, 0x5441, 0x00 },
 { "asm-generic/ioctls.h", "TIOCGRS485", 0, 0x542E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSERIAL", 0, 0x541E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSID", 0, 0x5429, 0 },
@@ -92,6 +93,7 @@
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_VA", _IOC_WRITE, 0x6448, 0x28 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_INFO", _IOC_WRITE, 0x6445, 0x20 },
+{ "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_VM", _IOC_READ|_IOC_WRITE, 0x6453, 0x08 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_CS", _IOC_READ|_IOC_WRITE, 0x6449, 0x20 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_FENCES", _IOC_READ|_IOC_WRITE, 0x6452, 0x18 },
 { "drm/drm.h", "DRM_IOCTL_ADD_BUFS", _IOC_READ|_IOC_WRITE, 0x6416, 0x18 },
@@ -177,6 +179,10 @@
 { "drm/drm.h", "DRM_IOCTL_SG_ALLOC", _IOC_READ|_IOC_WRITE, 0x6438, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SG_FREE", _IOC_WRITE, 0x6439, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SWITCH_CTX", _IOC_WRITE, 0x6424, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_CREATE", _IOC_READ|_IOC_WRITE, 0x64bf, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x14 },
@@ -399,7 +405,9 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_CREATE_SHADER_BO", _IOC_READ|_IOC_WRITE, 0x6445, 0x18 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_BO", _IOC_READ|_IOC_WRITE, 0x6442, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_SEQNO", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -727,6 +735,7 @@
 { "linux/cm4000_cs.h", "CM_IOCSRDR", _IOC_NONE, 0x6303, 0x00 },
 { "linux/cm4000_cs.h", "CM_IOSDBGLVL", _IOC_WRITE, 0x63fa, 0x04 },
 { "linux/coda.h", "CIOC_KERNEL_VERSION", _IOC_READ|_IOC_WRITE, 0x630a, 0x04 },
+{ "linux/dm-ioctl.h", "DM_DEV_ARM_POLL", _IOC_READ|_IOC_WRITE, 0xfd10, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_CREATE", _IOC_READ|_IOC_WRITE, 0xfd03, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_REMOVE", _IOC_READ|_IOC_WRITE, 0xfd04, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_RENAME", _IOC_READ|_IOC_WRITE, 0xfd05, 0x138 },
@@ -2105,6 +2114,7 @@
 { "linux/usbdevice_fs.h", "USBDEVFS_FREE_STREAMS", _IOC_READ, 0x551d, 0x08 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GETDRIVER", _IOC_WRITE, 0x5508, 0x104 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GET_CAPABILITIES", _IOC_READ, 0x551a, 0x04 },
+{ "linux/usbdevice_fs.h", "USBDEVFS_GET_SPEED", _IOC_NONE, 0x551f, 0x00 },
 { "linux/usbdevice_fs.h", "USBDEVFS_HUB_PORTINFO", _IOC_READ, 0x5513, 0x80 },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL", _IOC_READ|_IOC_WRITE, 0x5512, 0x0c },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL32", _IOC_READ|_IOC_WRITE, 0x5512, 0x0c },
@@ -2383,7 +2393,6 @@
 { "linux/wireless.h", "SIOCSIWSTATS", 0, 0x8B0E, 0 },
 { "linux/wireless.h", "SIOCSIWTHRSPY", 0, 0x8B12, 0 },
 { "linux/wireless.h", "SIOCSIWTXPOW", 0, 0x8B26, 0 },
-{ "media/davinci/vpfe_capture.h", "VPFE_CMD_S_CCDC_RAW_PARAMS", _IOC_WRITE, 0x56c1, 0x04 },
 { "media/drv-intf/exynos-fimc.h", "S5P_FIMC_TX_END_NOTIFY", _IOC_NONE, 0x6500, 0x00 },
 { "media/i2c/adv7842.h", "ADV7842_CMD_RAM_TEST", _IOC_NONE, 0x56c0, 0x00 },
 { "media/i2c/bt819.h", "BT819_FIFO_RESET_HIGH", _IOC_NONE, 0x6201, 0x00 },
@@ -2493,6 +2502,8 @@
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VERIFY", _IOC_READ|_IOC_WRITE, 0xca84, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_CLONE", _IOC_READ|_IOC_WRITE, 0xca89, 0x70 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_RESIZE", _IOC_READ|_IOC_WRITE, 0xca88, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_AFU_DEBUG", _IOC_READ|_IOC_WRITE, 0xcabe, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_LUN_PROVISION", _IOC_READ|_IOC_WRITE, 0xcabf, 0xa0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_BUS_NUMBER", 0, 0x5386, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_IDLUN", 0, 0x5382, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_PCI", 0, 0x5387, 0 },
@@ -2611,6 +2622,7 @@
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TSTAMP", _IOC_WRITE, 0x4102, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TTSTAMP", _IOC_WRITE, 0x4103, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_UNLINK", _IOC_NONE, 0x4161, 0x00 },
+{ "sound/asound.h", "SNDRV_PCM_IOCTL_USER_PVERSION", _IOC_WRITE, 0x4104, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEI_FRAMES", _IOC_WRITE, 0x4150, 0x0c },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEN_FRAMES", _IOC_WRITE, 0x4152, 0x0c },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_XRUN", _IOC_NONE, 0x4148, 0x00 },
diff --git a/linux/32/ioctls_inc_align32.h b/linux/32/ioctls_inc_align32.h
index 7caf8e8..6b32df2 100644
--- a/linux/32/ioctls_inc_align32.h
+++ b/linux/32/ioctls_inc_align32.h
@@ -39,6 +39,7 @@
 { "asm-generic/ioctls.h", "TIOCGPKT", _IOC_READ, 0x5438, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTLCK", _IOC_READ, 0x5439, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTN", _IOC_READ, 0x5430, 0x04 },
+{ "asm-generic/ioctls.h", "TIOCGPTPEER", _IOC_NONE, 0x5441, 0x00 },
 { "asm-generic/ioctls.h", "TIOCGRS485", 0, 0x542E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSERIAL", 0, 0x541E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSID", 0, 0x5429, 0 },
@@ -92,6 +93,7 @@
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_VA", _IOC_WRITE, 0x6448, 0x28 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_INFO", _IOC_WRITE, 0x6445, 0x20 },
+{ "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_VM", _IOC_READ|_IOC_WRITE, 0x6453, 0x08 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_CS", _IOC_READ|_IOC_WRITE, 0x6449, 0x20 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_FENCES", _IOC_READ|_IOC_WRITE, 0x6452, 0x18 },
 { "drm/drm.h", "DRM_IOCTL_ADD_BUFS", _IOC_READ|_IOC_WRITE, 0x6416, 0x18 },
@@ -177,6 +179,10 @@
 { "drm/drm.h", "DRM_IOCTL_SG_ALLOC", _IOC_READ|_IOC_WRITE, 0x6438, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SG_FREE", _IOC_WRITE, 0x6439, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SWITCH_CTX", _IOC_WRITE, 0x6424, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_CREATE", _IOC_READ|_IOC_WRITE, 0x64bf, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x14 },
@@ -399,7 +405,9 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_CREATE_SHADER_BO", _IOC_READ|_IOC_WRITE, 0x6445, 0x18 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_BO", _IOC_READ|_IOC_WRITE, 0x6442, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_SEQNO", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -727,6 +735,7 @@
 { "linux/cm4000_cs.h", "CM_IOCSRDR", _IOC_NONE, 0x6303, 0x00 },
 { "linux/cm4000_cs.h", "CM_IOSDBGLVL", _IOC_WRITE, 0x63fa, 0x04 },
 { "linux/coda.h", "CIOC_KERNEL_VERSION", _IOC_READ|_IOC_WRITE, 0x630a, 0x04 },
+{ "linux/dm-ioctl.h", "DM_DEV_ARM_POLL", _IOC_READ|_IOC_WRITE, 0xfd10, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_CREATE", _IOC_READ|_IOC_WRITE, 0xfd03, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_REMOVE", _IOC_READ|_IOC_WRITE, 0xfd04, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_RENAME", _IOC_READ|_IOC_WRITE, 0xfd05, 0x138 },
@@ -2105,6 +2114,7 @@
 { "linux/usbdevice_fs.h", "USBDEVFS_FREE_STREAMS", _IOC_READ, 0x551d, 0x08 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GETDRIVER", _IOC_WRITE, 0x5508, 0x104 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GET_CAPABILITIES", _IOC_READ, 0x551a, 0x04 },
+{ "linux/usbdevice_fs.h", "USBDEVFS_GET_SPEED", _IOC_NONE, 0x551f, 0x00 },
 { "linux/usbdevice_fs.h", "USBDEVFS_HUB_PORTINFO", _IOC_READ, 0x5513, 0x80 },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL", _IOC_READ|_IOC_WRITE, 0x5512, 0x0c },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL32", _IOC_READ|_IOC_WRITE, 0x5512, 0x0c },
@@ -2383,7 +2393,6 @@
 { "linux/wireless.h", "SIOCSIWSTATS", 0, 0x8B0E, 0 },
 { "linux/wireless.h", "SIOCSIWTHRSPY", 0, 0x8B12, 0 },
 { "linux/wireless.h", "SIOCSIWTXPOW", 0, 0x8B26, 0 },
-{ "media/davinci/vpfe_capture.h", "VPFE_CMD_S_CCDC_RAW_PARAMS", _IOC_WRITE, 0x56c1, 0x04 },
 { "media/drv-intf/exynos-fimc.h", "S5P_FIMC_TX_END_NOTIFY", _IOC_NONE, 0x6500, 0x00 },
 { "media/i2c/adv7842.h", "ADV7842_CMD_RAM_TEST", _IOC_NONE, 0x56c0, 0x00 },
 { "media/i2c/bt819.h", "BT819_FIFO_RESET_HIGH", _IOC_NONE, 0x6201, 0x00 },
@@ -2493,6 +2502,8 @@
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VERIFY", _IOC_READ|_IOC_WRITE, 0xca84, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_CLONE", _IOC_READ|_IOC_WRITE, 0xca89, 0x70 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_RESIZE", _IOC_READ|_IOC_WRITE, 0xca88, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_AFU_DEBUG", _IOC_READ|_IOC_WRITE, 0xcabe, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_LUN_PROVISION", _IOC_READ|_IOC_WRITE, 0xcabf, 0xa0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_BUS_NUMBER", 0, 0x5386, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_IDLUN", 0, 0x5382, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_PCI", 0, 0x5387, 0 },
@@ -2611,6 +2622,7 @@
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TSTAMP", _IOC_WRITE, 0x4102, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TTSTAMP", _IOC_WRITE, 0x4103, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_UNLINK", _IOC_NONE, 0x4161, 0x00 },
+{ "sound/asound.h", "SNDRV_PCM_IOCTL_USER_PVERSION", _IOC_WRITE, 0x4104, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEI_FRAMES", _IOC_WRITE, 0x4150, 0x0c },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEN_FRAMES", _IOC_WRITE, 0x4152, 0x0c },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_XRUN", _IOC_NONE, 0x4148, 0x00 },
diff --git a/linux/32/ioctls_inc_align64.h b/linux/32/ioctls_inc_align64.h
index 8f8c240..35a0ca9 100644
--- a/linux/32/ioctls_inc_align64.h
+++ b/linux/32/ioctls_inc_align64.h
@@ -39,6 +39,7 @@
 { "asm-generic/ioctls.h", "TIOCGPKT", _IOC_READ, 0x5438, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTLCK", _IOC_READ, 0x5439, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTN", _IOC_READ, 0x5430, 0x04 },
+{ "asm-generic/ioctls.h", "TIOCGPTPEER", _IOC_NONE, 0x5441, 0x00 },
 { "asm-generic/ioctls.h", "TIOCGRS485", 0, 0x542E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSERIAL", 0, 0x541E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSID", 0, 0x5429, 0 },
@@ -92,6 +93,7 @@
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_VA", _IOC_WRITE, 0x6448, 0x28 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_INFO", _IOC_WRITE, 0x6445, 0x20 },
+{ "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_VM", _IOC_READ|_IOC_WRITE, 0x6453, 0x08 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_CS", _IOC_READ|_IOC_WRITE, 0x6449, 0x20 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_FENCES", _IOC_READ|_IOC_WRITE, 0x6452, 0x18 },
 { "drm/drm.h", "DRM_IOCTL_ADD_BUFS", _IOC_READ|_IOC_WRITE, 0x6416, 0x18 },
@@ -177,6 +179,10 @@
 { "drm/drm.h", "DRM_IOCTL_SG_ALLOC", _IOC_READ|_IOC_WRITE, 0x6438, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SG_FREE", _IOC_WRITE, 0x6439, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SWITCH_CTX", _IOC_WRITE, 0x6424, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_CREATE", _IOC_READ|_IOC_WRITE, 0x64bf, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x18 },
@@ -399,7 +405,9 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_CREATE_SHADER_BO", _IOC_READ|_IOC_WRITE, 0x6445, 0x18 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_BO", _IOC_READ|_IOC_WRITE, 0x6442, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_SEQNO", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -727,6 +735,7 @@
 { "linux/cm4000_cs.h", "CM_IOCSRDR", _IOC_NONE, 0x6303, 0x00 },
 { "linux/cm4000_cs.h", "CM_IOSDBGLVL", _IOC_WRITE, 0x63fa, 0x04 },
 { "linux/coda.h", "CIOC_KERNEL_VERSION", _IOC_READ|_IOC_WRITE, 0x630a, 0x04 },
+{ "linux/dm-ioctl.h", "DM_DEV_ARM_POLL", _IOC_READ|_IOC_WRITE, 0xfd10, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_CREATE", _IOC_READ|_IOC_WRITE, 0xfd03, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_REMOVE", _IOC_READ|_IOC_WRITE, 0xfd04, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_RENAME", _IOC_READ|_IOC_WRITE, 0xfd05, 0x138 },
@@ -2105,6 +2114,7 @@
 { "linux/usbdevice_fs.h", "USBDEVFS_FREE_STREAMS", _IOC_READ, 0x551d, 0x08 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GETDRIVER", _IOC_WRITE, 0x5508, 0x104 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GET_CAPABILITIES", _IOC_READ, 0x551a, 0x04 },
+{ "linux/usbdevice_fs.h", "USBDEVFS_GET_SPEED", _IOC_NONE, 0x551f, 0x00 },
 { "linux/usbdevice_fs.h", "USBDEVFS_HUB_PORTINFO", _IOC_READ, 0x5513, 0x80 },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL", _IOC_READ|_IOC_WRITE, 0x5512, 0x0c },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL32", _IOC_READ|_IOC_WRITE, 0x5512, 0x0c },
@@ -2493,6 +2503,8 @@
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VERIFY", _IOC_READ|_IOC_WRITE, 0xca84, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_CLONE", _IOC_READ|_IOC_WRITE, 0xca89, 0x70 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_RESIZE", _IOC_READ|_IOC_WRITE, 0xca88, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_AFU_DEBUG", _IOC_READ|_IOC_WRITE, 0xcabe, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_LUN_PROVISION", _IOC_READ|_IOC_WRITE, 0xcabf, 0xa0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_BUS_NUMBER", 0, 0x5386, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_IDLUN", 0, 0x5382, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_PCI", 0, 0x5387, 0 },
@@ -2611,6 +2623,7 @@
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TSTAMP", _IOC_WRITE, 0x4102, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TTSTAMP", _IOC_WRITE, 0x4103, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_UNLINK", _IOC_NONE, 0x4161, 0x00 },
+{ "sound/asound.h", "SNDRV_PCM_IOCTL_USER_PVERSION", _IOC_WRITE, 0x4104, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEI_FRAMES", _IOC_WRITE, 0x4150, 0x0c },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEN_FRAMES", _IOC_WRITE, 0x4152, 0x0c },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_XRUN", _IOC_NONE, 0x4148, 0x00 },
diff --git a/linux/32/syscallent.h b/linux/32/syscallent.h
index 44315e0..df25e89 100644
--- a/linux/32/syscallent.h
+++ b/linux/32/syscallent.h
@@ -28,7 +28,7 @@
 [ 24] = { 3,	TD,		SEN(dup3),			"dup3"			},
 [ 25] = { 3,	TD,		SEN(fcntl64),			"fcntl64"		},
 [ 26] = { 1,	TD,		SEN(inotify_init1),		"inotify_init1"		},
-[ 27] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[ 27] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [ 28] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [ 29] = { 3,	TD,		SEN(ioctl),			"ioctl"			},
 [ 30] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
diff --git a/linux/64/ioctls_inc.h b/linux/64/ioctls_inc.h
index 2e9e9ad..517caa0 100644
--- a/linux/64/ioctls_inc.h
+++ b/linux/64/ioctls_inc.h
@@ -39,6 +39,7 @@
 { "asm-generic/ioctls.h", "TIOCGPKT", _IOC_READ, 0x5438, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTLCK", _IOC_READ, 0x5439, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTN", _IOC_READ, 0x5430, 0x04 },
+{ "asm-generic/ioctls.h", "TIOCGPTPEER", _IOC_NONE, 0x5441, 0x00 },
 { "asm-generic/ioctls.h", "TIOCGRS485", 0, 0x542E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSERIAL", 0, 0x541E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSID", 0, 0x5429, 0 },
@@ -92,6 +93,7 @@
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_VA", _IOC_WRITE, 0x6448, 0x28 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_INFO", _IOC_WRITE, 0x6445, 0x20 },
+{ "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_VM", _IOC_READ|_IOC_WRITE, 0x6453, 0x08 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_CS", _IOC_READ|_IOC_WRITE, 0x6449, 0x20 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_FENCES", _IOC_READ|_IOC_WRITE, 0x6452, 0x18 },
 { "drm/drm.h", "DRM_IOCTL_ADD_BUFS", _IOC_READ|_IOC_WRITE, 0x6416, 0x20 },
@@ -177,6 +179,10 @@
 { "drm/drm.h", "DRM_IOCTL_SG_ALLOC", _IOC_READ|_IOC_WRITE, 0x6438, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_SG_FREE", _IOC_WRITE, 0x6439, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_SWITCH_CTX", _IOC_WRITE, 0x6424, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_CREATE", _IOC_READ|_IOC_WRITE, 0x64bf, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x18 },
@@ -399,7 +405,9 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_CREATE_SHADER_BO", _IOC_READ|_IOC_WRITE, 0x6445, 0x18 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_BO", _IOC_READ|_IOC_WRITE, 0x6442, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_SEQNO", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -727,6 +735,7 @@
 { "linux/cm4000_cs.h", "CM_IOCSRDR", _IOC_NONE, 0x6303, 0x00 },
 { "linux/cm4000_cs.h", "CM_IOSDBGLVL", _IOC_WRITE, 0x63fa, 0x08 },
 { "linux/coda.h", "CIOC_KERNEL_VERSION", _IOC_READ|_IOC_WRITE, 0x630a, 0x08 },
+{ "linux/dm-ioctl.h", "DM_DEV_ARM_POLL", _IOC_READ|_IOC_WRITE, 0xfd10, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_CREATE", _IOC_READ|_IOC_WRITE, 0xfd03, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_REMOVE", _IOC_READ|_IOC_WRITE, 0xfd04, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_RENAME", _IOC_READ|_IOC_WRITE, 0xfd05, 0x138 },
@@ -2105,6 +2114,7 @@
 { "linux/usbdevice_fs.h", "USBDEVFS_FREE_STREAMS", _IOC_READ, 0x551d, 0x08 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GETDRIVER", _IOC_WRITE, 0x5508, 0x104 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GET_CAPABILITIES", _IOC_READ, 0x551a, 0x04 },
+{ "linux/usbdevice_fs.h", "USBDEVFS_GET_SPEED", _IOC_NONE, 0x551f, 0x00 },
 { "linux/usbdevice_fs.h", "USBDEVFS_HUB_PORTINFO", _IOC_READ, 0x5513, 0x80 },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL", _IOC_READ|_IOC_WRITE, 0x5512, 0x10 },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL32", _IOC_READ|_IOC_WRITE, 0x5512, 0x0c },
@@ -2383,7 +2393,6 @@
 { "linux/wireless.h", "SIOCSIWSTATS", 0, 0x8B0E, 0 },
 { "linux/wireless.h", "SIOCSIWTHRSPY", 0, 0x8B12, 0 },
 { "linux/wireless.h", "SIOCSIWTXPOW", 0, 0x8B26, 0 },
-{ "media/davinci/vpfe_capture.h", "VPFE_CMD_S_CCDC_RAW_PARAMS", _IOC_WRITE, 0x56c1, 0x08 },
 { "media/drv-intf/exynos-fimc.h", "S5P_FIMC_TX_END_NOTIFY", _IOC_NONE, 0x6500, 0x00 },
 { "media/i2c/adv7842.h", "ADV7842_CMD_RAM_TEST", _IOC_NONE, 0x56c0, 0x00 },
 { "media/i2c/bt819.h", "BT819_FIFO_RESET_HIGH", _IOC_NONE, 0x6201, 0x00 },
@@ -2493,6 +2502,8 @@
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VERIFY", _IOC_READ|_IOC_WRITE, 0xca84, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_CLONE", _IOC_READ|_IOC_WRITE, 0xca89, 0x70 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_RESIZE", _IOC_READ|_IOC_WRITE, 0xca88, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_AFU_DEBUG", _IOC_READ|_IOC_WRITE, 0xcabe, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_LUN_PROVISION", _IOC_READ|_IOC_WRITE, 0xcabf, 0xa0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_BUS_NUMBER", 0, 0x5386, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_IDLUN", 0, 0x5382, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_PCI", 0, 0x5387, 0 },
@@ -2611,6 +2622,7 @@
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TSTAMP", _IOC_WRITE, 0x4102, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TTSTAMP", _IOC_WRITE, 0x4103, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_UNLINK", _IOC_NONE, 0x4161, 0x00 },
+{ "sound/asound.h", "SNDRV_PCM_IOCTL_USER_PVERSION", _IOC_WRITE, 0x4104, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEI_FRAMES", _IOC_WRITE, 0x4150, 0x18 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEN_FRAMES", _IOC_WRITE, 0x4152, 0x18 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_XRUN", _IOC_NONE, 0x4148, 0x00 },
diff --git a/linux/64/syscallent.h b/linux/64/syscallent.h
index b5de226..a5ab193 100644
--- a/linux/64/syscallent.h
+++ b/linux/64/syscallent.h
@@ -25,7 +25,7 @@
 [ 24] = { 3,	TD,		SEN(dup3),			"dup3"			},
 [ 25] = { 3,	TD,		SEN(fcntl),			"fcntl"			},
 [ 26] = { 1,	TD,		SEN(inotify_init1),		"inotify_init1"		},
-[ 27] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[ 27] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [ 28] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [ 29] = { 3,	TD,		SEN(ioctl),			"ioctl"			},
 [ 30] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
diff --git a/linux/aarch64/get_error.c b/linux/aarch64/get_error.c
index a3aa127..b3287a0 100644
--- a/linux/aarch64/get_error.c
+++ b/linux/aarch64/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 #define get_error arm_get_error
 #include "arm/get_error.c"
 #undef get_error
diff --git a/linux/alpha/syscallent.h b/linux/alpha/syscallent.h
index ae7821f..5a72bb2 100644
--- a/linux/alpha/syscallent.h
+++ b/linux/alpha/syscallent.h
@@ -408,7 +408,7 @@
 [442] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [443] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [444] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[445] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[445] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [446] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [447] = { 1,	TD,		SEN(fdatasync),			"fdatasync"		},
 [448] = { 4,	0,		SEN(kexec_load),		"kexec_load"		},
@@ -477,3 +477,12 @@
 [511] = { 3,	0,		SEN(getrandom),			"getrandom"		},
 [512] = { 2,	TD,		SEN(memfd_create),		"memfd_create"		},
 [513] = { 5,	TD|TF|TP|SE|SI,	SEN(execveat),			"execveat"		},
+[514] = { 3,	0,		SEN(seccomp),			"seccomp"		},
+[515] = { 3,	TD,		SEN(bpf),			"bpf"			},
+[516] = { 1,	TD,		SEN(userfaultfd),		"userfaultfd"		},
+[517] = { 2,	0,		SEN(membarrier),		"membarrier"		},
+[518] = { 3,	TM,		SEN(mlock2),			"mlock2"		},
+[519] = { 6,	TD,		SEN(copy_file_range),		"copy_file_range"	},
+[520] = { 6,	TD,		SEN(preadv2),			"preadv2"		},
+[521] = { 6,	TD,		SEN(pwritev2),			"pwritev2"		},
+[522] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
diff --git a/linux/arc/get_error.c b/linux/arc/get_error.c
index e19debc..39b5d1c 100644
--- a/linux/arc/get_error.c
+++ b/linux/arc/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/arm/get_error.c b/linux/arm/get_error.c
index fa81dd7..02d7e65 100644
--- a/linux/arm/get_error.c
+++ b/linux/arm/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/arm/ioctls_arch0.h b/linux/arm/ioctls_arch0.h
index c0a9128..ae3fb69 100644
--- a/linux/arm/ioctls_arch0.h
+++ b/linux/arm/ioctls_arch0.h
@@ -50,12 +50,14 @@
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
 { "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
+{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
 { "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
 { "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
 { "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
 { "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
+{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
 { "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
diff --git a/linux/arm/syscallent.h b/linux/arm/syscallent.h
index a6fb470..c5b9564 100644
--- a/linux/arm/syscallent.h
+++ b/linux/arm/syscallent.h
@@ -342,7 +342,7 @@
 [314] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [315] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [316] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[317] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[317] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [318] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [319] = { 6,	TM,		SEN(mbind),			"mbind"			},
 [320] = { 5,	TM,		SEN(get_mempolicy),		"get_mempolicy"		},
diff --git a/linux/avr32/get_error.c b/linux/avr32/get_error.c
index 75e7f67..b53c8f6 100644
--- a/linux/avr32/get_error.c
+++ b/linux/avr32/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/avr32/syscallent.h b/linux/avr32/syscallent.h
index 915aa8d..d75e5df 100644
--- a/linux/avr32/syscallent.h
+++ b/linux/avr32/syscallent.h
@@ -267,7 +267,7 @@
 [238] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [239] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [240] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[241] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[241] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [242] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [243] = { 4,	TD|TF,		SEN(openat),			"openat"		},
 [244] = { 3,	TD|TF,		SEN(mkdirat),			"mkdirat"		},
diff --git a/linux/bfin/get_error.c b/linux/bfin/get_error.c
index 80aeb37..76e4099 100644
--- a/linux/bfin/get_error.c
+++ b/linux/bfin/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/bfin/syscallent.h b/linux/bfin/syscallent.h
index 5cdb991..b68443e 100644
--- a/linux/bfin/syscallent.h
+++ b/linux/bfin/syscallent.h
@@ -318,7 +318,7 @@
 [289] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [290] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [291] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[292] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[292] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [293] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [294] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [295] = { 4,	TD|TF,		SEN(openat),			"openat"		},
diff --git a/linux/crisv10/get_error.c b/linux/crisv10/get_error.c
index b9da923..2c81f1b 100644
--- a/linux/crisv10/get_error.c
+++ b/linux/crisv10/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/crisv10/syscallent.h b/linux/crisv10/syscallent.h
index 0e36774..0232d2f 100644
--- a/linux/crisv10/syscallent.h
+++ b/linux/crisv10/syscallent.h
@@ -285,7 +285,7 @@
 [289] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [290] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [291] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[292] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[292] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [293] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [294] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [295] = { 4,	TD|TF,		SEN(openat),			"openat"		},
diff --git a/linux/hppa/get_error.c b/linux/hppa/get_error.c
index a2a7c0e..8b23f30 100644
--- a/linux/hppa/get_error.c
+++ b/linux/hppa/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/hppa/syscallent.h b/linux/hppa/syscallent.h
index ef0e2d8..aa25918 100644
--- a/linux/hppa/syscallent.h
+++ b/linux/hppa/syscallent.h
@@ -273,7 +273,7 @@
 [267] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [268] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [269] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[270] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[270] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [271] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [272] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [273] = { 6,	TD,		SEN(pselect6),			"pselect6"		},
diff --git a/linux/i386/get_error.c b/linux/i386/get_error.c
index 1f63605..9e0be03 100644
--- a/linux/i386/get_error.c
+++ b/linux/i386/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/i386/ioctls_arch0.h b/linux/i386/ioctls_arch0.h
index 71690c4..fcdee53 100644
--- a/linux/i386/ioctls_arch0.h
+++ b/linux/i386/ioctls_arch0.h
@@ -74,12 +74,14 @@
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
 { "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
+{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
 { "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
 { "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
 { "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
 { "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
+{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
 { "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
diff --git a/linux/i386/syscallent.h b/linux/i386/syscallent.h
index b0e9244..6c5725a 100644
--- a/linux/i386/syscallent.h
+++ b/linux/i386/syscallent.h
@@ -318,7 +318,7 @@
 [289] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [290] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [291] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[292] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[292] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [293] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [294] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [295] = { 4,	TD|TF,		SEN(openat),			"openat"		},
@@ -410,6 +410,7 @@
 [381] = { 2,	0,		SEN(pkey_alloc),		"pkey_alloc"		},
 [382] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
 [383] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
+[384] = { 2,	TP,		SEN(arch_prctl),		"arch_prctl"		},
 
 #define SYS_socket_subcall	400
 #include "subcall.h"
diff --git a/linux/ia64/get_error.c b/linux/ia64/get_error.c
index 52daa7f..41cae92 100644
--- a/linux/ia64/get_error.c
+++ b/linux/ia64/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/ia64/syscallent.h b/linux/ia64/syscallent.h
index a44a4c1..7ca4e39 100644
--- a/linux/ia64/syscallent.h
+++ b/linux/ia64/syscallent.h
@@ -296,7 +296,7 @@
 [1275] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [1276] = { 6,	TM,		SEN(move_pages),		"move_pages"		},
 [1277] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[1278] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[1278] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [1279] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [1280] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [1281] = { 4,	TD|TF,		SEN(openat),			"openat"		},
diff --git a/linux/inet_diag.h b/linux/inet_diag.h
index 24302db..ec6356c 100644
--- a/linux/inet_diag.h
+++ b/linux/inet_diag.h
@@ -39,6 +39,38 @@
 	INET_DIAG_REQ_BYTECODE,
 };
 
+struct inet_diag_bc_op {
+	unsigned char code;
+	unsigned char yes;
+	unsigned short no;
+};
+
+enum {
+	INET_DIAG_BC_NOP,
+	INET_DIAG_BC_JMP,
+	INET_DIAG_BC_S_GE,
+	INET_DIAG_BC_S_LE,
+	INET_DIAG_BC_D_GE,
+	INET_DIAG_BC_D_LE,
+	INET_DIAG_BC_AUTO,
+	INET_DIAG_BC_S_COND,
+	INET_DIAG_BC_D_COND,
+	INET_DIAG_BC_DEV_COND,   /* u32 ifindex */
+	INET_DIAG_BC_MARK_COND,
+};
+
+struct inet_diag_hostcond {
+	uint8_t family;
+	uint8_t prefix_len;
+	int port;
+	uint32_t addr[0];
+};
+
+struct inet_diag_markcond {
+	uint32_t mark;
+	uint32_t mask;
+};
+
 /* Info structure */
 struct inet_diag_msg {
 	uint8_t idiag_family;
diff --git a/linux/m68k/get_error.c b/linux/m68k/get_error.c
index 3ad51a0..edd69cf 100644
--- a/linux/m68k/get_error.c
+++ b/linux/m68k/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/m68k/syscallent.h b/linux/m68k/syscallent.h
index 73e6387..dc532c7 100644
--- a/linux/m68k/syscallent.h
+++ b/linux/m68k/syscallent.h
@@ -311,7 +311,7 @@
 [282] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [283] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [284] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[285] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[285] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [286] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [287] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [288] = { 4,	TD|TF,		SEN(openat),			"openat"		},
diff --git a/linux/metag/get_error.c b/linux/metag/get_error.c
index b7d287f..5415b39 100644
--- a/linux/metag/get_error.c
+++ b/linux/metag/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/microblaze/get_error.c b/linux/microblaze/get_error.c
index 878e24f..1da69c0 100644
--- a/linux/microblaze/get_error.c
+++ b/linux/microblaze/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/microblaze/syscallent.h b/linux/microblaze/syscallent.h
index 4f6120f..4c7b9ad 100644
--- a/linux/microblaze/syscallent.h
+++ b/linux/microblaze/syscallent.h
@@ -318,7 +318,7 @@
 [289] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [290] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [291] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[292] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[292] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [293] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [294] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [295] = { 4,	TD|TF,		SEN(openat),			"openat"		},
@@ -424,3 +424,4 @@
 [395] = { 4,	TM|SI,		SEN(pkey_mprotect),		"pkey_mprotect"		},
 [396] = { 2,	0,		SEN(pkey_alloc),		"pkey_alloc"		},
 [397] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
+[398] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
diff --git a/linux/mips/get_syscall_args.c b/linux/mips/get_syscall_args.c
index ca2819b..3c9160e 100644
--- a/linux/mips/get_syscall_args.c
+++ b/linux/mips/get_syscall_args.c
@@ -14,11 +14,16 @@
 	tcp->u_arg[1] = mips_REG_A1;
 	tcp->u_arg[2] = mips_REG_A2;
 	tcp->u_arg[3] = mips_REG_A3;
-	if (tcp->s_ent->nargs > 4) {
-		if (umoven(tcp, mips_REG_SP + 4 * 4,
-			   (tcp->s_ent->nargs - 4) * sizeof(tcp->u_arg[0]),
-			   &tcp->u_arg[4]) < 0)
-			return -1;
+	if (tcp->s_ent->nargs > 4
+	    && umoven(tcp, mips_REG_SP + 4 * sizeof(tcp->u_arg[0]),
+		      (tcp->s_ent->nargs - 4) * sizeof(tcp->u_arg[0]),
+		      &tcp->u_arg[4]) < 0) {
+		/*
+		 * Let's proceed with the first 4 arguments
+		 * instead of reporting the failure.
+		 */
+		memset(&tcp->u_arg[4], 0,
+		       (tcp->s_ent->nargs - 4) * sizeof(tcp->u_arg[0]));
 	}
 #else
 # error unsupported mips abi
diff --git a/linux/mips/syscallent-n32.h b/linux/mips/syscallent-n32.h
index 73cbc9b..748e09c 100644
--- a/linux/mips/syscallent-n32.h
+++ b/linux/mips/syscallent-n32.h
@@ -248,7 +248,7 @@
 [6245] = { 5,	0,		SEN(keyctl),			"keyctl"		},
 [6246] = { 1,	0,		SEN(set_thread_area),		"set_thread_area"	},
 [6247] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[6248] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[6248] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [6249] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [6250] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [6251] = { 4,	TD|TF,		SEN(openat),			"openat"		},
diff --git a/linux/mips/syscallent-n64.h b/linux/mips/syscallent-n64.h
index 6e9b00a..cc09366 100644
--- a/linux/mips/syscallent-n64.h
+++ b/linux/mips/syscallent-n64.h
@@ -244,7 +244,7 @@
 [5241] = { 5,	0,		SEN(keyctl),			"keyctl"		},
 [5242] = { 1,	0,		SEN(set_thread_area),		"set_thread_area"	},
 [5243] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[5244] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[5244] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [5245] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [5246] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [5247] = { 4,	TD|TF,		SEN(openat),			"openat"		},
diff --git a/linux/mips/syscallent-o32.h b/linux/mips/syscallent-o32.h
index 9b84c48..5ac79b5 100644
--- a/linux/mips/syscallent-o32.h
+++ b/linux/mips/syscallent-o32.h
@@ -285,7 +285,7 @@
 [4282] = { 5,	0,		SEN(keyctl),			"keyctl"		},
 [4283] = { 1,	0,		SEN(set_thread_area),		"set_thread_area"	},
 [4284] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[4285] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[4285] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [4286] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [4287] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [4288] = { 4,	TD|TF,		SEN(openat),			"openat"		},
diff --git a/linux/or1k/get_error.c b/linux/or1k/get_error.c
index 40e00bf..f6a3271 100644
--- a/linux/or1k/get_error.c
+++ b/linux/or1k/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/packet_diag.h b/linux/packet_diag.h
index 3e8120b..368e26f 100644
--- a/linux/packet_diag.h
+++ b/linux/packet_diag.h
@@ -37,4 +37,37 @@
 	PACKET_DIAG_FILTER,
 };
 
+struct packet_diag_info {
+	uint32_t pdi_index;
+	uint32_t pdi_version;
+	uint32_t pdi_reserve;
+	uint32_t pdi_copy_thresh;
+	uint32_t pdi_tstamp;
+	uint32_t pdi_flags;
+
+#define PDI_RUNNING	0x1
+#define PDI_AUXDATA	0x2
+#define PDI_ORIGDEV	0x4
+#define PDI_VNETHDR	0x8
+#define PDI_LOSS	0x10
+};
+
+struct packet_diag_mclist {
+	uint32_t pdmc_index;
+	uint32_t pdmc_count;
+	uint16_t pdmc_type;
+	uint16_t pdmc_alen;
+	uint8_t pdmc_addr[32]; /* MAX_ADDR_LEN */
+};
+
+struct packet_diag_ring {
+	uint32_t pdr_block_size;
+	uint32_t pdr_block_nr;
+	uint32_t pdr_frame_size;
+	uint32_t pdr_frame_nr;
+	uint32_t pdr_retire_tmo;
+	uint32_t pdr_sizeof_priv;
+	uint32_t pdr_features;
+};
+
 #endif /* !STRACE_LINUX_PACKET_DIAG_H */
diff --git a/linux/powerpc/ioctls_arch0.h b/linux/powerpc/ioctls_arch0.h
index 10d40ff..2516661 100644
--- a/linux/powerpc/ioctls_arch0.h
+++ b/linux/powerpc/ioctls_arch0.h
@@ -32,6 +32,7 @@
 { "asm/ioctls.h", "TIOCGPKT", _IOC_READ, 0x5438, 0x04 },
 { "asm/ioctls.h", "TIOCGPTLCK", _IOC_READ, 0x5439, 0x04 },
 { "asm/ioctls.h", "TIOCGPTN", _IOC_READ, 0x5430, 0x04 },
+{ "asm/ioctls.h", "TIOCGPTPEER", _IOC_NONE, 0x5441, 0x00 },
 { "asm/ioctls.h", "TIOCGRS485", 0, 0x542e, 0 },
 { "asm/ioctls.h", "TIOCGSERIAL", 0, 0x541E, 0 },
 { "asm/ioctls.h", "TIOCGSID", 0, 0x5429, 0 },
@@ -86,13 +87,6 @@
 { "asm/ps3fb.h", "PS3FB_IOCTL_ON", _IOC_NONE, 0x7204, 0x00 },
 { "asm/ps3fb.h", "PS3FB_IOCTL_SCREENINFO", _IOC_READ, 0x7203, 0x04 },
 { "asm/ps3fb.h", "PS3FB_IOCTL_SETMODE", _IOC_WRITE, 0x7201, 0x04 },
-{ "asm/sockios.h", "FIOGETOWN", 0, 0x8903, 0 },
-{ "asm/sockios.h", "FIOSETOWN", 0, 0x8901, 0 },
-{ "asm/sockios.h", "SIOCATMARK", 0, 0x8905, 0 },
-{ "asm/sockios.h", "SIOCGPGRP", 0, 0x8904, 0 },
-{ "asm/sockios.h", "SIOCGSTAMP", 0, 0x8906, 0 },
-{ "asm/sockios.h", "SIOCGSTAMPNS", 0, 0x8907, 0 },
-{ "asm/sockios.h", "SIOCSPGRP", 0, 0x8902, 0 },
 { "linux/kvm.h", "KVM_ALLOCATE_RMA", _IOC_READ, 0xaea9, 0x08 },
 { "linux/kvm.h", "KVM_ARM_SET_DEVICE_ADDR", _IOC_WRITE, 0xaeab, 0x10 },
 { "linux/kvm.h", "KVM_ASSIGN_DEV_IRQ", _IOC_WRITE, 0xae70, 0x40 },
@@ -148,12 +142,14 @@
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
 { "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
+{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
 { "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
 { "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
 { "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
 { "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
+{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
 { "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
diff --git a/linux/powerpc/syscallent.h b/linux/powerpc/syscallent.h
index 829af9c..d5e574a 100644
--- a/linux/powerpc/syscallent.h
+++ b/linux/powerpc/syscallent.h
@@ -303,7 +303,7 @@
 [273] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [274] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [275] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[276] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[276] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [277] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [278] = { 3,	0,		SEN(printargs),			"spu_run"		},
 [279] = { 4,	0,		SEN(printargs),			"spu_create"		},
diff --git a/linux/powerpc64/syscallent.h b/linux/powerpc64/syscallent.h
index 3b65ed7..21ba1d8 100644
--- a/linux/powerpc64/syscallent.h
+++ b/linux/powerpc64/syscallent.h
@@ -298,7 +298,7 @@
 [273] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [274] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [275] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[276] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[276] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [277] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [278] = { 3,	0,		SEN(printargs),			"spu_run"		},
 [279] = { 4,	0,		SEN(printargs),			"spu_create"		},
diff --git a/linux/riscv/get_error.c b/linux/riscv/get_error.c
index be640d0..2b2594f 100644
--- a/linux/riscv/get_error.c
+++ b/linux/riscv/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/s390/get_error.c b/linux/s390/get_error.c
index f491962..6d4d0a5 100644
--- a/linux/s390/get_error.c
+++ b/linux/s390/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/s390/ioctls_arch0.h b/linux/s390/ioctls_arch0.h
index 22f4bbc..f21ae98 100644
--- a/linux/s390/ioctls_arch0.h
+++ b/linux/s390/ioctls_arch0.h
@@ -43,6 +43,7 @@
 { "asm/pkey.h", "PKEY_GENSECK", _IOC_READ|_IOC_WRITE, 0x7001, 0x48 },
 { "asm/pkey.h", "PKEY_SEC2PROTK", _IOC_READ|_IOC_WRITE, 0x7003, 0x8c },
 { "asm/pkey.h", "PKEY_SKEY2PKEY", _IOC_READ|_IOC_WRITE, 0x7006, 0x88 },
+{ "asm/pkey.h", "PKEY_VERIFYKEY", _IOC_READ|_IOC_WRITE, 0x7007, 0x4c },
 { "asm/sclp_ctl.h", "SCLP_CTL_SCCB", _IOC_READ|_IOC_WRITE, 0x1010, 0x0c },
 { "asm/tape390.h", "TAPE390_CRYPT_QUERY", _IOC_READ, 0x6403, 0x03 },
 { "asm/tape390.h", "TAPE390_CRYPT_SET", _IOC_WRITE, 0x6402, 0x03 },
@@ -116,12 +117,14 @@
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
 { "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
+{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
 { "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
 { "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
 { "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
 { "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
+{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
 { "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
diff --git a/linux/s390/syscallent.h b/linux/s390/syscallent.h
index 3e769b6..2bf5a21 100644
--- a/linux/s390/syscallent.h
+++ b/linux/s390/syscallent.h
@@ -314,7 +314,7 @@
 [282] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [283] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [284] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[285] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[285] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [286] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [287] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [288] = { 4,	TD|TF,		SEN(openat),			"openat"		},
@@ -407,7 +407,7 @@
 [375] = { 6,	TD,		SEN(copy_file_range),		"copy_file_range"	},
 [376] = { 6,	TD,		SEN(preadv2),			"preadv2"		},
 [377] = { 6,	TD,		SEN(pwritev2),			"pwritev2"		},
-[378] = { },
+[378] = { 2,	0,		SEN(printargs),			"s390_guarded_storage"	},
 [379] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
 
 #define SYS_socket_subcall	400
diff --git a/linux/s390x/ioctls_arch0.h b/linux/s390x/ioctls_arch0.h
index f70da95..7004c72 100644
--- a/linux/s390x/ioctls_arch0.h
+++ b/linux/s390x/ioctls_arch0.h
@@ -43,6 +43,7 @@
 { "asm/pkey.h", "PKEY_GENSECK", _IOC_READ|_IOC_WRITE, 0x7001, 0x48 },
 { "asm/pkey.h", "PKEY_SEC2PROTK", _IOC_READ|_IOC_WRITE, 0x7003, 0x8c },
 { "asm/pkey.h", "PKEY_SKEY2PKEY", _IOC_READ|_IOC_WRITE, 0x7006, 0x88 },
+{ "asm/pkey.h", "PKEY_VERIFYKEY", _IOC_READ|_IOC_WRITE, 0x7007, 0x4c },
 { "asm/sclp_ctl.h", "SCLP_CTL_SCCB", _IOC_READ|_IOC_WRITE, 0x1010, 0x0c },
 { "asm/tape390.h", "TAPE390_CRYPT_QUERY", _IOC_READ, 0x6403, 0x03 },
 { "asm/tape390.h", "TAPE390_CRYPT_SET", _IOC_WRITE, 0x6402, 0x03 },
@@ -116,12 +117,14 @@
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
 { "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
+{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
 { "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
 { "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
 { "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
 { "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
+{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
 { "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
diff --git a/linux/s390x/syscallent.h b/linux/s390x/syscallent.h
index 9429641..3b662b4 100644
--- a/linux/s390x/syscallent.h
+++ b/linux/s390x/syscallent.h
@@ -298,7 +298,7 @@
 [282] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [283] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [284] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[285] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[285] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [286] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [287] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [288] = { 4,	TD|TF,		SEN(openat),			"openat"		},
@@ -391,7 +391,7 @@
 [375] = { 6,	TD,		SEN(copy_file_range),		"copy_file_range"	},
 [376] = { 6,	TD,		SEN(preadv2),			"preadv2"		},
 [377] = { 6,	TD,		SEN(pwritev2),			"pwritev2"		},
-[378] = { },
+[378] = { 2,	0,		SEN(printargs),			"s390_guarded_storage"	},
 [379] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
 
 #define SYS_socket_subcall	400
diff --git a/linux/sh/get_error.c b/linux/sh/get_error.c
index 158ff9e..0bb6fc5 100644
--- a/linux/sh/get_error.c
+++ b/linux/sh/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/sh/syscallent.h b/linux/sh/syscallent.h
index 9b0fed9..74c07e1 100644
--- a/linux/sh/syscallent.h
+++ b/linux/sh/syscallent.h
@@ -317,7 +317,7 @@
 [288] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [289] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [290] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[291] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[291] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [292] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [293] = { },
 [294] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
diff --git a/linux/sh64/get_error.c b/linux/sh64/get_error.c
index 7858df7..0a9001d 100644
--- a/linux/sh64/get_error.c
+++ b/linux/sh64/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/sh64/syscallent.h b/linux/sh64/syscallent.h
index 19e7b73..b1d141d 100644
--- a/linux/sh64/syscallent.h
+++ b/linux/sh64/syscallent.h
@@ -343,7 +343,7 @@
 [316] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [317] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [318] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[319] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[319] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [320] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [321] = { },
 [322] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
diff --git a/linux/smc_diag.h b/linux/smc_diag.h
index aea7d32..a9d4a51 100644
--- a/linux/smc_diag.h
+++ b/linux/smc_diag.h
@@ -30,4 +30,43 @@
 	SMC_DIAG_SHUTDOWN,
 };
 
+/* SMC_DIAG_CONNINFO */
+struct smc_diag_cursor {
+	uint16_t reserved;
+	uint16_t wrap;
+	uint32_t count;
+};
+
+struct smc_diag_conninfo {
+	uint32_t		token;
+	uint32_t		sndbuf_size;
+	uint32_t		rmbe_size;
+	uint32_t		peer_rmbe_size;
+	struct smc_diag_cursor	rx_prod;
+	struct smc_diag_cursor	rx_cons;
+	struct smc_diag_cursor	tx_prod;
+	struct smc_diag_cursor	tx_cons;
+	uint8_t			rx_prod_flags;
+	uint8_t			rx_conn_state_flags;
+	uint8_t			tx_prod_flags;
+	uint8_t			tx_conn_state_flags;
+	struct smc_diag_cursor	tx_prep;
+	struct smc_diag_cursor	tx_sent;
+	struct smc_diag_cursor	tx_fin;
+};
+
+/* SMC_DIAG_LINKINFO */
+struct smc_diag_linkinfo {
+	uint8_t link_id;
+	uint8_t ibname[64]; /* IB_DEVICE_NAME_MAX */
+	uint8_t ibport;
+	uint8_t gid[40];
+	uint8_t peer_gid[40];
+};
+
+struct smc_diag_lgrinfo {
+	struct smc_diag_linkinfo lnk[1];
+	uint8_t role;
+};
+
 #endif /* !STRACE_LINUX_SMC_DIAG_H */
diff --git a/linux/sparc/syscallent.h b/linux/sparc/syscallent.h
index 519fa58..9c6fda5 100644
--- a/linux/sparc/syscallent.h
+++ b/linux/sparc/syscallent.h
@@ -150,7 +150,7 @@
 [149] = { 5,	0,		SEN(printargs),			"pciconfig_write"	},
 [150] = { 3,	TN,		SEN(getsockname),		"getsockname"		},
 [151] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[152] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[152] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [153] = { 3,	TD,		SEN(poll),			"poll"			},
 [154] = { 3,	TD,		SEN(getdents64),		"getdents64"		},
 [155] = { 3,	TD,		SEN(fcntl64),			"fcntl64"		},
diff --git a/linux/sparc64/get_scno.c b/linux/sparc64/get_scno.c
index 4abe2a1..81a3aa9 100644
--- a/linux/sparc64/get_scno.c
+++ b/linux/sparc64/get_scno.c
@@ -6,18 +6,18 @@
 	unsigned long trap;
 	errno = 0;
 	trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (void *) sparc_regs.tpc, 0);
-	if (errno)
-		return -1;
-	trap >>= 32;
-	switch (trap) {
-	case 0x91d02010:
-		/* Linux/SPARC syscall trap. */
-		update_personality(tcp, 1);
-		break;
-	case 0x91d0206d:
-		/* Linux/SPARC64 syscall trap. */
-		update_personality(tcp, 0);
-		break;
+	if (errno == 0) {
+		trap >>= 32;
+		switch (trap) {
+		case 0x91d02010:
+			/* Linux/SPARC syscall trap. */
+			update_personality(tcp, 1);
+			break;
+		case 0x91d0206d:
+			/* Linux/SPARC64 syscall trap. */
+			update_personality(tcp, 0);
+			break;
+		}
 	}
 
 	tcp->scno = sparc_regs.u_regs[U_REG_G1];
diff --git a/linux/sparc64/syscallent.h b/linux/sparc64/syscallent.h
index 35ca773..695aa19 100644
--- a/linux/sparc64/syscallent.h
+++ b/linux/sparc64/syscallent.h
@@ -148,7 +148,7 @@
 [149] = { 5,	0,		SEN(printargs),			"pciconfig_write"	},
 [150] = { 3,	TN,		SEN(getsockname),		"getsockname"		},
 [151] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[152] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[152] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [153] = { 3,	TD,		SEN(poll),			"poll"			},
 [154] = { 3,	TD,		SEN(getdents64),		"getdents64"		},
 [155] = { },
diff --git a/linux/tile/get_error.c b/linux/tile/get_error.c
index 9949af4..1f007ba 100644
--- a/linux/tile/get_error.c
+++ b/linux/tile/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/x32/ioctls_inc0.h b/linux/x32/ioctls_inc0.h
index 9bdcb8b..70a857d 100644
--- a/linux/x32/ioctls_inc0.h
+++ b/linux/x32/ioctls_inc0.h
@@ -39,6 +39,7 @@
 { "asm-generic/ioctls.h", "TIOCGPKT", _IOC_READ, 0x5438, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTLCK", _IOC_READ, 0x5439, 0x04 },
 { "asm-generic/ioctls.h", "TIOCGPTN", _IOC_READ, 0x5430, 0x04 },
+{ "asm-generic/ioctls.h", "TIOCGPTPEER", _IOC_NONE, 0x5441, 0x00 },
 { "asm-generic/ioctls.h", "TIOCGRS485", 0, 0x542E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSERIAL", 0, 0x541E, 0 },
 { "asm-generic/ioctls.h", "TIOCGSID", 0, 0x5429, 0 },
@@ -92,6 +93,7 @@
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_VA", _IOC_WRITE, 0x6448, 0x28 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_INFO", _IOC_WRITE, 0x6445, 0x20 },
+{ "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_VM", _IOC_READ|_IOC_WRITE, 0x6453, 0x08 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_CS", _IOC_READ|_IOC_WRITE, 0x6449, 0x20 },
 { "drm/amdgpu_drm.h", "DRM_IOCTL_AMDGPU_WAIT_FENCES", _IOC_READ|_IOC_WRITE, 0x6452, 0x18 },
 { "drm/drm.h", "DRM_IOCTL_ADD_BUFS", _IOC_READ|_IOC_WRITE, 0x6416, 0x18 },
@@ -177,6 +179,10 @@
 { "drm/drm.h", "DRM_IOCTL_SG_ALLOC", _IOC_READ|_IOC_WRITE, 0x6438, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SG_FREE", _IOC_WRITE, 0x6439, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SWITCH_CTX", _IOC_WRITE, 0x6424, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_CREATE", _IOC_READ|_IOC_WRITE, 0x64bf, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x18 },
@@ -399,7 +405,9 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_CREATE_SHADER_BO", _IOC_READ|_IOC_WRITE, 0x6445, 0x18 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_BO", _IOC_READ|_IOC_WRITE, 0x6442, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_WAIT_SEQNO", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -727,6 +735,7 @@
 { "linux/cm4000_cs.h", "CM_IOCSRDR", _IOC_NONE, 0x6303, 0x00 },
 { "linux/cm4000_cs.h", "CM_IOSDBGLVL", _IOC_WRITE, 0x63fa, 0x04 },
 { "linux/coda.h", "CIOC_KERNEL_VERSION", _IOC_READ|_IOC_WRITE, 0x630a, 0x04 },
+{ "linux/dm-ioctl.h", "DM_DEV_ARM_POLL", _IOC_READ|_IOC_WRITE, 0xfd10, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_CREATE", _IOC_READ|_IOC_WRITE, 0xfd03, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_REMOVE", _IOC_READ|_IOC_WRITE, 0xfd04, 0x138 },
 { "linux/dm-ioctl.h", "DM_DEV_RENAME", _IOC_READ|_IOC_WRITE, 0xfd05, 0x138 },
@@ -818,7 +827,7 @@
 { "linux/dvb/video.h", "VIDEO_FAST_FORWARD", _IOC_NONE, 0x6f1f, 0x00 },
 { "linux/dvb/video.h", "VIDEO_FREEZE", _IOC_NONE, 0x6f17, 0x00 },
 { "linux/dvb/video.h", "VIDEO_GET_CAPABILITIES", _IOC_READ, 0x6f21, 0x04 },
-{ "linux/dvb/video.h", "VIDEO_GET_EVENT", _IOC_READ, 0x6f1c, 0x20 },
+{ "linux/dvb/video.h", "VIDEO_GET_EVENT", _IOC_READ, 0x6f1c, 0x14 },
 { "linux/dvb/video.h", "VIDEO_GET_FRAME_COUNT", _IOC_READ, 0x6f3a, 0x08 },
 { "linux/dvb/video.h", "VIDEO_GET_FRAME_RATE", _IOC_READ, 0x6f38, 0x04 },
 { "linux/dvb/video.h", "VIDEO_GET_NAVI", _IOC_READ, 0x6f34, 0x404 },
@@ -2105,6 +2114,7 @@
 { "linux/usbdevice_fs.h", "USBDEVFS_FREE_STREAMS", _IOC_READ, 0x551d, 0x08 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GETDRIVER", _IOC_WRITE, 0x5508, 0x104 },
 { "linux/usbdevice_fs.h", "USBDEVFS_GET_CAPABILITIES", _IOC_READ, 0x551a, 0x04 },
+{ "linux/usbdevice_fs.h", "USBDEVFS_GET_SPEED", _IOC_NONE, 0x551f, 0x00 },
 { "linux/usbdevice_fs.h", "USBDEVFS_HUB_PORTINFO", _IOC_READ, 0x5513, 0x80 },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL", _IOC_READ|_IOC_WRITE, 0x5512, 0x0c },
 { "linux/usbdevice_fs.h", "USBDEVFS_IOCTL32", _IOC_READ|_IOC_WRITE, 0x5512, 0x0c },
@@ -2383,7 +2393,6 @@
 { "linux/wireless.h", "SIOCSIWSTATS", 0, 0x8B0E, 0 },
 { "linux/wireless.h", "SIOCSIWTHRSPY", 0, 0x8B12, 0 },
 { "linux/wireless.h", "SIOCSIWTXPOW", 0, 0x8B26, 0 },
-{ "media/davinci/vpfe_capture.h", "VPFE_CMD_S_CCDC_RAW_PARAMS", _IOC_WRITE, 0x56c1, 0x04 },
 { "media/drv-intf/exynos-fimc.h", "S5P_FIMC_TX_END_NOTIFY", _IOC_NONE, 0x6500, 0x00 },
 { "media/i2c/adv7842.h", "ADV7842_CMD_RAM_TEST", _IOC_NONE, 0x56c0, 0x00 },
 { "media/i2c/bt819.h", "BT819_FIFO_RESET_HIGH", _IOC_NONE, 0x6201, 0x00 },
@@ -2493,6 +2502,8 @@
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VERIFY", _IOC_READ|_IOC_WRITE, 0xca84, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_CLONE", _IOC_READ|_IOC_WRITE, 0xca89, 0x70 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_VLUN_RESIZE", _IOC_READ|_IOC_WRITE, 0xca88, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_AFU_DEBUG", _IOC_READ|_IOC_WRITE, 0xcabe, 0x78 },
+{ "scsi/cxlflash_ioctl.h", "HT_CXLFLASH_LUN_PROVISION", _IOC_READ|_IOC_WRITE, 0xcabf, 0xa0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_BUS_NUMBER", 0, 0x5386, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_IDLUN", 0, 0x5382, 0 },
 { "scsi/scsi.h", "SCSI_IOCTL_GET_PCI", 0, 0x5387, 0 },
@@ -2611,6 +2622,7 @@
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TSTAMP", _IOC_WRITE, 0x4102, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_TTSTAMP", _IOC_WRITE, 0x4103, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_UNLINK", _IOC_NONE, 0x4161, 0x00 },
+{ "sound/asound.h", "SNDRV_PCM_IOCTL_USER_PVERSION", _IOC_WRITE, 0x4104, 0x04 },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEI_FRAMES", _IOC_WRITE, 0x4150, 0x0c },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_WRITEN_FRAMES", _IOC_WRITE, 0x4152, 0x0c },
 { "sound/asound.h", "SNDRV_PCM_IOCTL_XRUN", _IOC_NONE, 0x4148, 0x00 },
diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h
index 4d68327..bbc2447 100644
--- a/linux/x32/syscallent.h
+++ b/linux/x32/syscallent.h
@@ -252,7 +252,7 @@
 [251] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [252] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [253] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[254] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[254] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [255] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [256] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [257] = { 4,	TD|TF,		SEN(openat),			"openat"		},
diff --git a/linux/x86_64/get_error.c b/linux/x86_64/get_error.c
index 9411625..440fdc7 100644
--- a/linux/x86_64/get_error.c
+++ b/linux/x86_64/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/x86_64/ioctls_arch0.h b/linux/x86_64/ioctls_arch0.h
index a28ae18..4b8bbd1 100644
--- a/linux/x86_64/ioctls_arch0.h
+++ b/linux/x86_64/ioctls_arch0.h
@@ -74,12 +74,14 @@
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
 { "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
+{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
 { "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
 { "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
 { "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
 { "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
 { "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
+{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
 { "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
 { "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
diff --git a/linux/x86_64/syscallent.h b/linux/x86_64/syscallent.h
index d069edb..0fafe03 100644
--- a/linux/x86_64/syscallent.h
+++ b/linux/x86_64/syscallent.h
@@ -252,7 +252,7 @@
 [251] = { 3,	0,		SEN(ioprio_set),		"ioprio_set"		},
 [252] = { 2,	0,		SEN(ioprio_get),		"ioprio_get"		},
 [253] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[254] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[254] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [255] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [256] = { 4,	TM,		SEN(migrate_pages),		"migrate_pages"		},
 [257] = { 4,	TD|TF,		SEN(openat),			"openat"		},
diff --git a/linux/xtensa/get_error.c b/linux/xtensa/get_error.c
index 51ccd3b..f49cc46 100644
--- a/linux/xtensa/get_error.c
+++ b/linux/xtensa/get_error.c
@@ -1,3 +1,5 @@
+#include "negated_errno.h"
+
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
diff --git a/linux/xtensa/syscallent.h b/linux/xtensa/syscallent.h
index 0d051bc..961cdaf 100644
--- a/linux/xtensa/syscallent.h
+++ b/linux/xtensa/syscallent.h
@@ -267,7 +267,7 @@
 [274] = { 6,	TD,		SEN(epoll_pwait),		"epoll_pwait"		},
 [275] = { 1,	TD,		SEN(epoll_create1),		"epoll_create1"		},
 [276] = { 0,	TD,		SEN(inotify_init),		"inotify_init"		},
-[277] = { 3,	TD,		SEN(inotify_add_watch),		"inotify_add_watch"	},
+[277] = { 3,	TD|TF,		SEN(inotify_add_watch),		"inotify_add_watch"	},
 [278] = { 2,	TD,		SEN(inotify_rm_watch),		"inotify_rm_watch"	},
 [279] = { 1,	TD,		SEN(inotify_init1),		"inotify_init1"		},
 [280] = { 3,	0,		SEN(getcpu),			"getcpu"		},
diff --git a/listen.c b/listen.c
new file mode 100644
index 0000000..b0847c5
--- /dev/null
+++ b/listen.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+ * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+ * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * Copyright (c) 1996-2000 Wichert Akkerman <wichert@cistron.nl>
+ * Copyright (c) 1999-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+SYS_FUNC(listen)
+{
+	printfd(tcp, tcp->u_arg[0]);
+	tprints(", ");
+	tprintf("%" PRI_klu, tcp->u_arg[1]);
+
+	return RVAL_DECODED;
+}
diff --git a/loop.c b/loop.c
index df12520..4811dc0 100644
--- a/loop.c
+++ b/loop.c
@@ -36,6 +36,7 @@
 
 #include MPERS_DEFS
 
+#include "print_fields.h"
 #include "xlat/loop_cmds.h"
 #include "xlat/loop_flags_options.h"
 #include "xlat/loop_crypt_type_options.h"
@@ -52,11 +53,9 @@
 	tprintf("{lo_number=%d", info.lo_number);
 
 	if (!abbrev(tcp)) {
-		tprints(", lo_device=");
-		print_dev_t(info.lo_device);
+		PRINT_FIELD_DEV(", ", info, lo_device);
 		tprintf(", lo_inode=%" PRI_klu, (kernel_ulong_t) info.lo_inode);
-		tprints(", lo_rdevice=");
-		print_dev_t(info.lo_rdevice);
+		PRINT_FIELD_DEV(", ", info, lo_rdevice);
 	}
 
 	tprintf(", lo_offset=%#x", info.lo_offset);
@@ -76,15 +75,13 @@
 	tprints(", lo_flags=");
 	printflags(loop_flags_options, info.lo_flags, "LO_FLAGS_???");
 
-	tprints(", lo_name=");
-	print_quoted_string(info.lo_name, LO_NAME_SIZE,
-			    QUOTE_0_TERMINATED);
+	PRINT_FIELD_CSTRING(", ", info, lo_name);
 
 	if (!abbrev(tcp) || info.lo_encrypt_type != LO_CRYPT_NONE) {
-		tprints(", lo_encrypt_key=");
-		print_quoted_string((void *) info.lo_encrypt_key,
-				    MIN((uint32_t) info.lo_encrypt_key_size,
-				    LO_KEY_SIZE), 0);
+		const unsigned int lo_encrypt_key_size =
+			MIN((unsigned) info.lo_encrypt_key_size, LO_KEY_SIZE);
+		PRINT_FIELD_STRING(", ", info, lo_encrypt_key,
+					  lo_encrypt_key_size, 0);
 	}
 
 	if (!abbrev(tcp))
@@ -108,11 +105,9 @@
 		return;
 
 	if (!abbrev(tcp)) {
-		tprints("{lo_device=");
-		print_dev_t(info64.lo_device);
+		PRINT_FIELD_DEV("{", info64, lo_device);
 		tprintf(", lo_inode=%" PRIu64, (uint64_t) info64.lo_inode);
-		tprints(", lo_rdevice=");
-		print_dev_t(info64.lo_rdevice);
+		PRINT_FIELD_DEV(", ", info64, lo_rdevice);
 		tprintf(", lo_offset=%#" PRIx64 ", lo_sizelimit=%" PRIu64
 			", lo_number=%" PRIu32,
 			(uint64_t) info64.lo_offset,
@@ -135,18 +130,14 @@
 	tprints(", lo_flags=");
 	printflags(loop_flags_options, info64.lo_flags, "LO_FLAGS_???");
 
-	tprints(", lo_file_name=");
-	print_quoted_string((void *) info64.lo_file_name,
-			    LO_NAME_SIZE, QUOTE_0_TERMINATED);
+	PRINT_FIELD_CSTRING(", ", info64, lo_file_name);
 
 	if (!abbrev(tcp) || info64.lo_encrypt_type != LO_CRYPT_NONE) {
-		tprints(", lo_crypt_name=");
-		print_quoted_string((void *) info64.lo_crypt_name,
-				    LO_NAME_SIZE, QUOTE_0_TERMINATED);
-		tprints(", lo_encrypt_key=");
-		print_quoted_string((void *) info64.lo_encrypt_key,
-				    MIN(info64.lo_encrypt_key_size,
-				    LO_KEY_SIZE), 0);
+		PRINT_FIELD_CSTRING(", ", info64, lo_crypt_name);
+		const unsigned int lo_encrypt_key_size =
+			MIN((unsigned) info64.lo_encrypt_key_size, LO_KEY_SIZE);
+		PRINT_FIELD_STRING(", ", info64, lo_encrypt_key,
+					  lo_encrypt_key_size, 0);
 	}
 
 	if (!abbrev(tcp))
@@ -205,5 +196,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/m32_funcs.h b/m32_funcs.h
deleted file mode 100644
index e96342b..0000000
--- a/m32_funcs.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#undef sys_readdir
-#define sys_readdir m32_sys_readdir
-#undef sys_getdents
-#define sys_getdents m32_sys_getdents
-#undef sys_msgctl
-#define sys_msgctl m32_sys_msgctl
-#undef sys_shmctl
-#define sys_shmctl m32_sys_shmctl
-#undef sys_time
-#define sys_time m32_sys_time
-#undef sys_rt_sigreturn
-#define sys_rt_sigreturn m32_sys_rt_sigreturn
-#undef sys_sigaltstack
-#define sys_sigaltstack m32_sys_sigaltstack
-#undef sys_sysinfo
-#define sys_sysinfo m32_sys_sysinfo
-#undef sys_times
-#define sys_times m32_sys_times
-#undef sys_ustat
-#define sys_ustat m32_sys_ustat
-#undef sys_utime
-#define sys_utime m32_sys_utime
-#include "sys_func.h"
diff --git a/m32_printer_decls.h b/m32_printer_decls.h
deleted file mode 100644
index 100c365..0000000
--- a/m32_printer_decls.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_seccomp_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
-extern int m32_block_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int m32_btrfs_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int m32_evdev_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern _Bool m32_fetch_seccomp_fprog(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern _Bool m32_fetch_struct_flock(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern _Bool m32_fetch_struct_flock64(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern int m32_fetch_struct_mmsghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern unsigned int m32_sizeof_struct_mmsghdr(void);
-extern int m32_fetch_struct_msghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern _Bool m32_fetch_struct_stat(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
-extern _Bool m32_fetch_struct_stat64(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
-extern _Bool m32_fetch_struct_statfs(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_statfs *const p);
-extern _Bool m32_fetch_struct_statfs64(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t size, struct strace_statfs *const p);
-extern int m32_hdio_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int m32_loop_ioctl(struct tcb *tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int m32_mtd_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern void m32_printmqattr(struct tcb *const tcp, const kernel_ulong_t addr, const _Bool decode_flags);
-extern void m32_tprint_msgbuf(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t count);
-extern int m32_decode_sg_req_info(struct tcb *const tcp, const kernel_ulong_t arg);
-extern void m32_print_sigevent(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void m32_print_timespec(struct tcb *const tcp, const kernel_ulong_t addr);
-extern const char * m32_sprint_timespec(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void m32_print_timespec_utime_pair(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void m32_print_itimerspec(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void m32_print_struct_timeval(const void *arg);
-extern void m32_print_timeval(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void m32_print_timeval_utimes(struct tcb *const tcp, const kernel_ulong_t addr);
-extern const char * m32_sprint_timeval(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void m32_print_itimerval(struct tcb *const tcp, const kernel_ulong_t addr);
-extern int m32_print_timex(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void m32_printrusage(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void m32_printsiginfo_at(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void m32_print_siginfo_array(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t len);
-extern int m32_rtc_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int m32_decode_sg_io_v3(struct tcb *const tcp, const kernel_ulong_t arg);
-extern int m32_sock_ioctl(struct tcb *tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int m32_v4l2_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
diff --git a/m32_printer_defs.h b/m32_printer_defs.h
deleted file mode 100644
index 1d533a2..0000000
--- a/m32_printer_defs.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_seccomp_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
-.block_ioctl = m32_block_ioctl,
-.btrfs_ioctl = m32_btrfs_ioctl,
-.evdev_ioctl = m32_evdev_ioctl,
-.fetch_seccomp_fprog = m32_fetch_seccomp_fprog,
-.fetch_struct_flock = m32_fetch_struct_flock,
-.fetch_struct_flock64 = m32_fetch_struct_flock64,
-.fetch_struct_mmsghdr = m32_fetch_struct_mmsghdr,
-.sizeof_struct_mmsghdr = m32_sizeof_struct_mmsghdr,
-.fetch_struct_msghdr = m32_fetch_struct_msghdr,
-.fetch_struct_stat = m32_fetch_struct_stat,
-.fetch_struct_stat64 = m32_fetch_struct_stat64,
-.fetch_struct_statfs = m32_fetch_struct_statfs,
-.fetch_struct_statfs64 = m32_fetch_struct_statfs64,
-.hdio_ioctl = m32_hdio_ioctl,
-.loop_ioctl = m32_loop_ioctl,
-.mtd_ioctl = m32_mtd_ioctl,
-.printmqattr = m32_printmqattr,
-.tprint_msgbuf = m32_tprint_msgbuf,
-.decode_sg_req_info = m32_decode_sg_req_info,
-.print_sigevent = m32_print_sigevent,
-.print_timespec = m32_print_timespec,
-.sprint_timespec = m32_sprint_timespec,
-.print_timespec_utime_pair = m32_print_timespec_utime_pair,
-.print_itimerspec = m32_print_itimerspec,
-.print_struct_timeval = m32_print_struct_timeval,
-.print_timeval = m32_print_timeval,
-.print_timeval_utimes = m32_print_timeval_utimes,
-.sprint_timeval = m32_sprint_timeval,
-.print_itimerval = m32_print_itimerval,
-.print_timex = m32_print_timex,
-.printrusage = m32_printrusage,
-.printsiginfo_at = m32_printsiginfo_at,
-.print_siginfo_array = m32_print_siginfo_array,
-.rtc_ioctl = m32_rtc_ioctl,
-.decode_sg_io_v3 = m32_decode_sg_io_v3,
-.sock_ioctl = m32_sock_ioctl,
-.v4l2_ioctl = m32_v4l2_ioctl,
diff --git a/m32_type_defs.h b/m32_type_defs.h
deleted file mode 100644
index a03f4ce..0000000
--- a/m32_type_defs.h
+++ /dev/null
@@ -1,160 +0,0 @@
-#ifdef MPERS_m32_struct_blk_user_trace_setup
-# define struct_blk_user_trace_setup MPERS_m32_struct_blk_user_trace_setup
-#endif
-#ifdef MPERS_m32_struct_blkpg_ioctl_arg
-# define struct_blkpg_ioctl_arg MPERS_m32_struct_blkpg_ioctl_arg
-#endif
-#ifdef MPERS_m32_struct_blkpg_partition
-# define struct_blkpg_partition MPERS_m32_struct_blkpg_partition
-#endif
-#ifdef MPERS_m32_struct_btrfs_ioctl_dev_replace_args
-# define struct_btrfs_ioctl_dev_replace_args MPERS_m32_struct_btrfs_ioctl_dev_replace_args
-#endif
-#ifdef MPERS_m32_struct_btrfs_ioctl_send_args
-# define struct_btrfs_ioctl_send_args MPERS_m32_struct_btrfs_ioctl_send_args
-#endif
-#ifdef MPERS_m32_struct_btrfs_ioctl_received_subvol_args
-# define struct_btrfs_ioctl_received_subvol_args MPERS_m32_struct_btrfs_ioctl_received_subvol_args
-#endif
-#ifdef MPERS_m32_struct_btrfs_ioctl_vol_args_v2
-# define struct_btrfs_ioctl_vol_args_v2 MPERS_m32_struct_btrfs_ioctl_vol_args_v2
-#endif
-#ifdef MPERS_m32_kernel_dirent
-# define kernel_dirent MPERS_m32_kernel_dirent
-#endif
-#ifdef MPERS_m32_struct_ff_effect
-# define struct_ff_effect MPERS_m32_struct_ff_effect
-#endif
-#ifdef MPERS_m32_seccomp_fprog_t
-# define seccomp_fprog_t MPERS_m32_seccomp_fprog_t
-#endif
-#ifdef MPERS_m32_struct_flock
-# define struct_flock MPERS_m32_struct_flock
-#endif
-#ifdef MPERS_m32_struct_flock64
-# define struct_flock64 MPERS_m32_struct_flock64
-#endif
-#ifdef MPERS_m32_struct_mmsghdr
-# define struct_mmsghdr MPERS_m32_struct_mmsghdr
-#endif
-#ifdef MPERS_m32_struct_msghdr
-# define struct_msghdr MPERS_m32_struct_msghdr
-#endif
-#ifdef MPERS_m32_struct_stat
-# define struct_stat MPERS_m32_struct_stat
-#endif
-#ifdef MPERS_m32_struct_stat64
-# define struct_stat64 MPERS_m32_struct_stat64
-#endif
-#ifdef MPERS_m32_struct_statfs
-# define struct_statfs MPERS_m32_struct_statfs
-#endif
-#ifdef MPERS_m32_struct_statfs64
-# define struct_statfs64 MPERS_m32_struct_statfs64
-#endif
-#ifdef MPERS_m32_struct_hd_geometry
-# define struct_hd_geometry MPERS_m32_struct_hd_geometry
-#endif
-#ifdef MPERS_m32_msqid_ds_t
-# define msqid_ds_t MPERS_m32_msqid_ds_t
-#endif
-#ifdef MPERS_m32_shmid_ds_t
-# define shmid_ds_t MPERS_m32_shmid_ds_t
-#endif
-#ifdef MPERS_m32_struct_loop_info
-# define struct_loop_info MPERS_m32_struct_loop_info
-#endif
-#ifdef MPERS_m32_struct_mtd_oob_buf
-# define struct_mtd_oob_buf MPERS_m32_struct_mtd_oob_buf
-#endif
-#ifdef MPERS_m32_mq_attr_t
-# define mq_attr_t MPERS_m32_mq_attr_t
-#endif
-#ifdef MPERS_m32_msgbuf_t
-# define msgbuf_t MPERS_m32_msgbuf_t
-#endif
-#ifdef MPERS_m32_struct_sg_req_info
-# define struct_sg_req_info MPERS_m32_struct_sg_req_info
-#endif
-#ifdef MPERS_m32_struct_sigevent
-# define struct_sigevent MPERS_m32_struct_sigevent
-#endif
-#ifdef MPERS_m32_time_t
-# define time_t MPERS_m32_time_t
-#endif
-#ifdef MPERS_m32_timespec_t
-# define timespec_t MPERS_m32_timespec_t
-#endif
-#ifdef MPERS_m32_timeval_t
-# define timeval_t MPERS_m32_timeval_t
-#endif
-#ifdef MPERS_m32_struct_timex
-# define struct_timex MPERS_m32_struct_timex
-#endif
-#ifdef MPERS_m32_rusage_t
-# define rusage_t MPERS_m32_rusage_t
-#endif
-#ifdef MPERS_m32_siginfo_t
-# define siginfo_t MPERS_m32_siginfo_t
-#endif
-#ifdef MPERS_m32_struct_rt_sigframe
-# define struct_rt_sigframe MPERS_m32_struct_rt_sigframe
-#endif
-#ifdef MPERS_m32_struct_rtc_pll_info
-# define struct_rtc_pll_info MPERS_m32_struct_rtc_pll_info
-#endif
-#ifdef MPERS_m32_struct_sg_io_hdr
-# define struct_sg_io_hdr MPERS_m32_struct_sg_io_hdr
-#endif
-#ifdef MPERS_m32_stack_t
-# define stack_t MPERS_m32_stack_t
-#endif
-#ifdef MPERS_m32_struct_ifconf
-# define struct_ifconf MPERS_m32_struct_ifconf
-#endif
-#ifdef MPERS_m32_struct_ifreq
-# define struct_ifreq MPERS_m32_struct_ifreq
-#endif
-#ifdef MPERS_m32_sysinfo_t
-# define sysinfo_t MPERS_m32_sysinfo_t
-#endif
-#ifdef MPERS_m32_tms_t
-# define tms_t MPERS_m32_tms_t
-#endif
-#ifdef MPERS_m32_struct_ustat
-# define struct_ustat MPERS_m32_struct_ustat
-#endif
-#ifdef MPERS_m32_utimbuf_t
-# define utimbuf_t MPERS_m32_utimbuf_t
-#endif
-#ifdef MPERS_m32_struct_v4l2_buffer
-# define struct_v4l2_buffer MPERS_m32_struct_v4l2_buffer
-#endif
-#ifdef MPERS_m32_struct_v4l2_clip
-# define struct_v4l2_clip MPERS_m32_struct_v4l2_clip
-#endif
-#ifdef MPERS_m32_struct_v4l2_create_buffers
-# define struct_v4l2_create_buffers MPERS_m32_struct_v4l2_create_buffers
-#endif
-#ifdef MPERS_m32_struct_v4l2_ext_control
-# define struct_v4l2_ext_control MPERS_m32_struct_v4l2_ext_control
-#endif
-#ifdef MPERS_m32_struct_v4l2_ext_controls
-# define struct_v4l2_ext_controls MPERS_m32_struct_v4l2_ext_controls
-#endif
-#ifdef MPERS_m32_struct_v4l2_format
-# define struct_v4l2_format MPERS_m32_struct_v4l2_format
-#endif
-#ifdef MPERS_m32_struct_v4l2_framebuffer
-# define struct_v4l2_framebuffer MPERS_m32_struct_v4l2_framebuffer
-#endif
-#ifdef MPERS_m32_struct_v4l2_input
-# define struct_v4l2_input MPERS_m32_struct_v4l2_input
-#endif
-#ifdef MPERS_m32_struct_v4l2_standard
-# define struct_v4l2_standard MPERS_m32_struct_v4l2_standard
-#endif
-#undef MPERS_PRINTER_NAME
-#define MPERS_PRINTER_NAME(printer_name) printer_name
-#include "m32_printer_decls.h"
-#include MPERS_m32_IOCTL_MACROS
diff --git a/m4/ax_code_coverage.m4 b/m4/ax_code_coverage.m4
index 3d417f0..0ca72e5 100644
--- a/m4/ax_code_coverage.m4
+++ b/m4/ax_code_coverage.m4
@@ -1,5 +1,5 @@
 # ===========================================================================
-#     http://www.gnu.org/software/autoconf-archive/ax_code_coverage.html
+#     https://www.gnu.org/software/autoconf-archive/ax_code_coverage.html
 # ===========================================================================
 #
 # SYNOPSIS
@@ -9,9 +9,9 @@
 # DESCRIPTION
 #
 #   Defines CODE_COVERAGE_CPPFLAGS, CODE_COVERAGE_CFLAGS,
-#   CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LDFLAGS which should be
-#   included in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LDFLAGS variables of
-#   every build target (program or library) which should be built with code
+#   CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LIBS which should be included
+#   in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LIBADD variables of every
+#   build target (program or library) which should be built with code
 #   coverage support. Also defines CODE_COVERAGE_RULES which should be
 #   substituted in your Makefile; and $enable_code_coverage which can be
 #   used in subsequent configure output. CODE_COVERAGE_ENABLED is defined
@@ -21,7 +21,7 @@
 #   Test also for gcov program and create GCOV variable that could be
 #   substituted.
 #
-#   Note that all optimisation flags in CFLAGS must be disabled when code
+#   Note that all optimization flags in CFLAGS must be disabled when code
 #   coverage is enabled.
 #
 #   Usage example:
@@ -33,7 +33,7 @@
 #   Makefile.am:
 #
 #     @CODE_COVERAGE_RULES@
-#     my_program_LIBS = ... $(CODE_COVERAGE_LDFLAGS) ...
+#     my_program_LIBS = ... $(CODE_COVERAGE_LIBS) ...
 #     my_program_CPPFLAGS = ... $(CODE_COVERAGE_CPPFLAGS) ...
 #     my_program_CFLAGS = ... $(CODE_COVERAGE_CFLAGS) ...
 #     my_program_CXXFLAGS = ... $(CODE_COVERAGE_CXXFLAGS) ...
@@ -45,6 +45,11 @@
 #   (`make check`) and build a code coverage report detailing the code which
 #   was touched, then print the URI for the report.
 #
+#   In earlier versions of this macro, CODE_COVERAGE_LDFLAGS was defined
+#   instead of CODE_COVERAGE_LIBS. They are both still defined, but use of
+#   CODE_COVERAGE_LIBS is preferred for clarity; CODE_COVERAGE_LDFLAGS is
+#   deprecated. They have the same value.
+#
 #   This code was derived from Makefile.decl in GLib, originally licenced
 #   under LGPLv2.1+.
 #
@@ -56,6 +61,7 @@
 #   Copyright (c) 2012 Paolo Borelli
 #   Copyright (c) 2012 Dan Winship
 #   Copyright (c) 2015 Bastien ROUCARIES
+#   Copyright (c) 2016-2017 The strace developers.
 #
 #   This library is free software; you can redistribute it and/or modify it
 #   under the terms of the GNU Lesser General Public License as published by
@@ -68,9 +74,10 @@
 #   General Public License for more details.
 #
 #   You should have received a copy of the GNU Lesser General Public License
-#   along with this program. If not, see <http://www.gnu.org/licenses/>.
+#   along with this program. If not, see <https://www.gnu.org/licenses/>.
 
-#serial 16
+#serial 24
+##modified for strace project
 
 AC_DEFUN([AX_CODE_COVERAGE],[
 	dnl Check for --enable-code-coverage
@@ -106,49 +113,56 @@
 			AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage])
 		])
 
-		# List of supported lcov versions.
-		lcov_version_list="1.6 1.7 1.8 1.9 1.10 1.11 1.12"
-
 		AC_CHECK_PROG([LCOV], [lcov], [lcov])
 		AC_CHECK_PROG([GENHTML], [genhtml], [genhtml])
 
-		AS_IF([ test "$LCOV" ], [
-			AC_CACHE_CHECK([for lcov version], ax_cv_lcov_version, [
-				ax_cv_lcov_version=invalid
-				lcov_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'`
-				for lcov_check_version in $lcov_version_list; do
-					if test "$lcov_version" = "$lcov_check_version"; then
-						ax_cv_lcov_version="$lcov_check_version (ok)"
-					fi
-				done
-			])
-		], [
-			lcov_msg="To enable code coverage reporting you must have one of the following lcov versions installed: $lcov_version_list"
-			AC_MSG_ERROR([$lcov_msg])
+		AS_IF([ test -z "$LCOV" ], [
+			AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed])
 		])
 
-		case $ax_cv_lcov_version in
-			""|invalid[)]
-				lcov_msg="You must have one of the following versions of lcov: $lcov_version_list (found: $lcov_version)."
-				AC_MSG_ERROR([$lcov_msg])
-				LCOV="exit 0;"
-			;;
-		esac
-
 		AS_IF([ test -z "$GENHTML" ], [
 			AC_MSG_ERROR([Could not find genhtml from the lcov package])
 		])
 
 		dnl Build the code coverage flags
+		dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility
 		CODE_COVERAGE_CPPFLAGS="-DENABLE_COVERAGE_GCOV -DNDEBUG"
 		CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
 		CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
-		CODE_COVERAGE_LDFLAGS="-lgcov"
+		CODE_COVERAGE_LIBS="-lgcov"
+		CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
 
 		AC_SUBST([CODE_COVERAGE_CPPFLAGS])
 		AC_SUBST([CODE_COVERAGE_CFLAGS])
 		AC_SUBST([CODE_COVERAGE_CXXFLAGS])
+		AC_SUBST([CODE_COVERAGE_LIBS])
 		AC_SUBST([CODE_COVERAGE_LDFLAGS])
+
+		[CODE_COVERAGE_RULES_CHECK='
+	-$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+	$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+']
+		[CODE_COVERAGE_RULES_CAPTURE='
+	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+	-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
+	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+	@echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+']
+		[CODE_COVERAGE_RULES_CLEAN='
+clean: code-coverage-clean
+distclean: code-coverage-clean
+code-coverage-clean:
+	-$(LCOV) --directory $(top_builddir) -z
+	-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+	-find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+']
+	], [
+		[CODE_COVERAGE_RULES_CHECK='
+	@echo "Need to reconfigure with --enable-code-coverage"
+']
+		CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK"
+		CODE_COVERAGE_RULES_CLEAN=''
 	])
 
 [CODE_COVERAGE_RULES='
@@ -206,7 +220,7 @@
 CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
 $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
 --rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
-CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULTS)
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
 CODE_COVERAGE_IGNORE_PATTERN ?=
 
 code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
@@ -228,37 +242,15 @@
 code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
 
 # Use recursive makes in order to ignore errors during check
-check-code-coverage:
-ifeq ($(CODE_COVERAGE_ENABLED),yes)
-	-$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
-	$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
-else
-	@echo "Need to reconfigure with --enable-code-coverage"
-endif
+check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"'
 
 # Capture code coverage data
-code-coverage-capture: code-coverage-capture-hook
-ifeq ($(CODE_COVERAGE_ENABLED),yes)
-	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
-	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
-	-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
-	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
-	@echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
-else
-	@echo "Need to reconfigure with --enable-code-coverage"
-endif
+code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"'
 
 # Hook rule executed before code-coverage-capture, overridable by the user
 code-coverage-capture-hook:
 
-ifeq ($(CODE_COVERAGE_ENABLED),yes)
-clean: code-coverage-clean
-distclean: code-coverage-clean
-code-coverage-clean:
-	-$(LCOV) --directory $(top_builddir) -z
-	-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
-	-find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
-endif
+'"$CODE_COVERAGE_RULES_CLEAN"'
 
 GITIGNOREFILES ?=
 GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
diff --git a/m4/ax_valgrind_check.m4 b/m4/ax_valgrind_check.m4
index fa84a35..0d35ee2 100644
--- a/m4/ax_valgrind_check.m4
+++ b/m4/ax_valgrind_check.m4
@@ -1,5 +1,5 @@
 # ===========================================================================
-#     http://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html
+#    https://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html
 # ===========================================================================
 #
 # SYNOPSIS
@@ -61,13 +61,14 @@
 # LICENSE
 #
 #   Copyright (c) 2014, 2015, 2016 Philip Withnall <philip.withnall@collabora.co.uk>
+#   Copyright (c) 2016-2017 The strace developers.
 #
 #   Copying and distribution of this file, with or without modification, are
 #   permitted in any medium without royalty provided the copyright notice
 #   and this notice are preserved.  This file is offered as-is, without any
 #   warranty.
 
-#serial 13
+#serial 15
 #modified for strace project
 
 dnl Configured tools
@@ -102,6 +103,7 @@
 
 	AM_CONDITIONAL([VALGRIND_ENABLED],[test "$enable_valgrind" = "yes"])
 	AC_SUBST([VALGRIND_ENABLED],[$enable_valgrind])
+	AM_EXTRA_RECURSIVE_TARGETS([check-valgrind])
 
 	# Check for Valgrind tools we care about.
 	[valgrind_enabled_tools=]
@@ -140,6 +142,7 @@
 			valgrind_enabled_tools="$valgrind_enabled_tools ]m4_bpatsubst(vgtool,[^exp-])["
 		])
 		AC_SUBST([ENABLE_VALGRIND_]vgtool,[$enable_valgrind_]vgtool)
+		AM_EXTRA_RECURSIVE_TARGETS([check-valgrind-]vgtool)
 	])
 	AC_SUBST([valgrind_tools],["]m4_join([ ], valgrind_tool_list)["])
 	AC_SUBST([valgrind_enabled_tools],[$valgrind_enabled_tools])
@@ -188,9 +191,8 @@
 # Use recursive makes in order to ignore errors during check
 check-valgrind:
 ifeq ($(VALGRIND_ENABLED),yes)
-	-$(A''M_V_at)$(foreach tool,$(valgrind_enabled_tools), \
-		$(MAKE) $(AM_MAKEFLAGS) -k check-valgrind-$(tool); \
-	)
+	$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k \
+		$(foreach tool, $(valgrind_enabled_tools), check-valgrind-$(tool))
 else
 	@echo "Need to reconfigure with --enable-valgrind"
 endif
@@ -206,7 +208,7 @@
 	$(valgrind_lt) \
 	$(VALGRIND) $(VALGRIND_SUPPRESSIONS) --error-exitcode=1 $(VALGRIND_FLAGS)
 
-define valgrind_tool_rule =
+define valgrind_tool_rule
 check-valgrind-$(1): $$(BUILT_SOURCES)
 ifeq ($$(VALGRIND_ENABLED)-$$(ENABLE_VALGRIND_$(1)),yes-yes)
 	$$(valgrind_v_use)$$(MAKE) $$(AM_MAKEFLAGS) check-am \
diff --git a/m4/st_bpf.m4 b/m4/st_bpf.m4
new file mode 100644
index 0000000..ae44d28
--- /dev/null
+++ b/m4/st_bpf.m4
@@ -0,0 +1,50 @@
+#!/usr/bin/m4
+#
+# Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+AC_DEFUN([st_CHECK_UNION_BPF_ATTR],[
+
+pushdef([ATTR_NAME], translit([$1], [a-z], [A-Z]))
+pushdef([attr_text], [union bpf_attr.][$1])
+pushdef([have_attr], [st_cv_member_union_bpf_attr_][$1])
+
+AC_CACHE_CHECK([whether attr_text initialization works],
+	       [have_attr],
+	       [AC_COMPILE_IFELSE(
+		[AC_LANG_PROGRAM([[#include <linux/bpf.h>]],
+				 [union bpf_attr a = { .$1 = 0 };])],
+		[have_attr=yes],
+		[have_attr=no])])
+
+if test $have_attr = yes; then
+	AC_DEFINE([HAVE_UNION_BPF_ATTR_]ATTR_NAME, [1],
+		  [Define to 1 if attr_text initialization works])
+fi
+
+popdef([have_attr])
+popdef([attr_text])
+popdef([ATTR_NAME])
+])
diff --git a/macros.h b/macros.h
index 2913d60..a464134 100644
--- a/macros.h
+++ b/macros.h
@@ -35,4 +35,9 @@
 #define STRINGIFY(...)		#__VA_ARGS__
 #define STRINGIFY_VAL(...)	STRINGIFY(__VA_ARGS__)
 
+#ifndef offsetofend
+# define offsetofend(type_, member_)	\
+	(offsetof(type_, member_) + sizeof(((type_ *)0)->member_))
+#endif
+
 #endif /* !STRACE_MACROS_H */
diff --git a/mpers-m32.stamp b/mpers-m32.stamp
deleted file mode 100644
index e69de29..0000000
--- a/mpers-m32.stamp
+++ /dev/null
diff --git a/mpers-m32/kernel_dirent.c b/mpers-m32/kernel_dirent.c
deleted file mode 100644
index 9ad17aa..0000000
--- a/mpers-m32/kernel_dirent.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-kernel_dirent mpers_target_var;
diff --git a/mpers-m32/kernel_dirent.h b/mpers-m32/kernel_dirent.h
deleted file mode 100644
index 371e7b1..0000000
--- a/mpers-m32/kernel_dirent.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t d_ino;
-uint32_t d_off;
-uint16_t d_reclen;
-char d_name[1];
-unsigned char mpers_end_filler_1[1];
-} ATTRIBUTE_PACKED m32_kernel_dirent;
-#define MPERS_m32_kernel_dirent m32_kernel_dirent
diff --git a/mpers-m32/mq_attr_t.c b/mpers-m32/mq_attr_t.c
deleted file mode 100644
index 9f0ec7a..0000000
--- a/mpers-m32/mq_attr_t.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2004 Ulrich Drepper <drepper@redhat.com>
- * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#ifdef HAVE_MQUEUE_H
-# include <mqueue.h>
-typedef struct mq_attr mq_attr_t;
-#elif defined HAVE_LINUX_MQUEUE_H
-# include <linux/types.h>
-# include <linux/mqueue.h>
-typedef struct mq_attr mq_attr_t;
-#endif
-
-
-mq_attr_t mpers_target_var;
diff --git a/mpers-m32/mq_attr_t.h b/mpers-m32/mq_attr_t.h
deleted file mode 100644
index 255d5cf..0000000
--- a/mpers-m32/mq_attr_t.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t mq_flags;
-int32_t mq_maxmsg;
-int32_t mq_msgsize;
-int32_t mq_curmsgs;
-int32_t __pad[4];
-} ATTRIBUTE_PACKED m32_mq_attr_t;
-#define MPERS_m32_mq_attr_t m32_mq_attr_t
diff --git a/mpers-m32/msgbuf_t.c b/mpers-m32/msgbuf_t.c
deleted file mode 100644
index a345637..0000000
--- a/mpers-m32/msgbuf_t.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2003-2006 Roland McGrath <roland@redhat.com>
- * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#include <sys/msg.h>
-
-typedef struct msgbuf msgbuf_t;
-msgbuf_t mpers_target_var;
diff --git a/mpers-m32/msgbuf_t.h b/mpers-m32/msgbuf_t.h
deleted file mode 100644
index a839436..0000000
--- a/mpers-m32/msgbuf_t.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t mtype;
-char mtext[1];
-unsigned char mpers_end_filler_1[3];
-} ATTRIBUTE_PACKED m32_msgbuf_t;
-#define MPERS_m32_msgbuf_t m32_msgbuf_t
diff --git a/mpers-m32/msqid_ds_t.c b/mpers-m32/msqid_ds_t.c
deleted file mode 100644
index 2e2b96e..0000000
--- a/mpers-m32/msqid_ds_t.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2003-2006 Roland McGrath <roland@redhat.com>
- * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "ipc_defs.h"
-
-#ifdef HAVE_SYS_MSG_H
-/* The C library generally exports the struct the current kernel expects. */
-# include <sys/msg.h>
-typedef struct msqid_ds msqid_ds_t;
-#elif defined HAVE_LINUX_MSG_H
-/* The linux header might provide the right struct. */
-# include <linux/msg.h>
-typedef struct msqid64_ds msqid_ds_t;
-#endif
-
-msqid_ds_t mpers_target_var;
diff --git a/mpers-m32/msqid_ds_t.h b/mpers-m32/msqid_ds_t.h
deleted file mode 100644
index 853bb5a..0000000
--- a/mpers-m32/msqid_ds_t.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-int32_t __key;
-uint32_t uid;
-uint32_t gid;
-uint32_t cuid;
-uint32_t cgid;
-uint16_t mode;
-uint16_t __pad1;
-uint16_t __seq;
-uint16_t __pad2;
-uint32_t __glibc_reserved1;
-uint32_t __glibc_reserved2;
-} ATTRIBUTE_PACKED msg_perm;
-int32_t msg_stime;
-uint32_t __glibc_reserved1;
-int32_t msg_rtime;
-uint32_t __glibc_reserved2;
-int32_t msg_ctime;
-uint32_t __glibc_reserved3;
-uint32_t __msg_cbytes;
-uint32_t msg_qnum;
-uint32_t msg_qbytes;
-int32_t msg_lspid;
-int32_t msg_lrpid;
-uint32_t __glibc_reserved4;
-uint32_t __glibc_reserved5;
-} ATTRIBUTE_PACKED m32_msqid_ds_t;
-#define MPERS_m32_msqid_ds_t m32_msqid_ds_t
diff --git a/mpers-m32/rusage_t.c b/mpers-m32/rusage_t.c
deleted file mode 100644
index cf3c244..0000000
--- a/mpers-m32/rusage_t.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 1999-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-#include <sys/resource.h>
-
-
-typedef struct rusage rusage_t;
-
-rusage_t mpers_target_var;
diff --git a/mpers-m32/rusage_t.h b/mpers-m32/rusage_t.h
deleted file mode 100644
index f3f849c..0000000
--- a/mpers-m32/rusage_t.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-int32_t tv_sec;
-int32_t tv_usec;
-} ATTRIBUTE_PACKED ru_utime;
-struct {
-int32_t tv_sec;
-int32_t tv_usec;
-} ATTRIBUTE_PACKED ru_stime;
-union {
-int32_t ru_maxrss;
-int32_t __ru_maxrss_word;
-} ;
-union {
-int32_t ru_ixrss;
-int32_t __ru_ixrss_word;
-} ;
-union {
-int32_t ru_idrss;
-int32_t __ru_idrss_word;
-} ;
-union {
-int32_t ru_isrss;
-int32_t __ru_isrss_word;
-} ;
-union {
-int32_t ru_minflt;
-int32_t __ru_minflt_word;
-} ;
-union {
-int32_t ru_majflt;
-int32_t __ru_majflt_word;
-} ;
-union {
-int32_t ru_nswap;
-int32_t __ru_nswap_word;
-} ;
-union {
-int32_t ru_inblock;
-int32_t __ru_inblock_word;
-} ;
-union {
-int32_t ru_oublock;
-int32_t __ru_oublock_word;
-} ;
-union {
-int32_t ru_msgsnd;
-int32_t __ru_msgsnd_word;
-} ;
-union {
-int32_t ru_msgrcv;
-int32_t __ru_msgrcv_word;
-} ;
-union {
-int32_t ru_nsignals;
-int32_t __ru_nsignals_word;
-} ;
-union {
-int32_t ru_nvcsw;
-int32_t __ru_nvcsw_word;
-} ;
-union {
-int32_t ru_nivcsw;
-int32_t __ru_nivcsw_word;
-} ;
-} ATTRIBUTE_PACKED m32_rusage_t;
-#define MPERS_m32_rusage_t m32_rusage_t
diff --git a/mpers-m32/sample.c b/mpers-m32/sample.c
deleted file mode 100644
index 1eedf1c..0000000
--- a/mpers-m32/sample.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "mpers_type.h"
-#include DEF_MPERS_TYPE(sample_struct)
-typedef struct {
-	struct {
-		void *p;
-		char sc;
-		/* unsigned char mpers_filler_1[1]; */
-		short ss;
-		unsigned char uc;
-		/* unsigned char mpers_filler_2[3]; */
-		int si;
-		unsigned ui;
-		long sl;
-		unsigned short us;
-		/* unsigned char mpers_filler_3[6]; */
-		long long sll __attribute__((__aligned__(8)));
-		unsigned long long ull;
-		unsigned long ul;
-		long asl[3][5][7];
-		char f;
-		/* unsigned char mpers_end_filler_4[7]; */
-	} s;
-	union {
-		long long sll;
-		unsigned long long ull;
-		void *p;
-		long sl;
-		unsigned long ul;
-		int si;
-		unsigned ui;
-		short ss[7][9];
-		unsigned short us[4];
-		char sc;
-		unsigned char uc;
-	} u[3][2];
-	short f[0];
-} sample_struct;
-#include MPERS_DEFS
diff --git a/mpers-m32/sample.expected b/mpers-m32/sample.expected
deleted file mode 100644
index f7a21ac..0000000
--- a/mpers-m32/sample.expected
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-mpers_ptr_t p;
-char sc;
-unsigned char mpers_filler_1[1];
-int16_t ss;
-unsigned char uc;
-unsigned char mpers_filler_2[3];
-int32_t si;
-uint32_t ui;
-int32_t sl;
-uint16_t us;
-unsigned char mpers_filler_3[6];
-int64_t sll;
-uint64_t ull;
-uint32_t ul;
-int32_t asl[3][5][7];
-char f;
-unsigned char mpers_end_filler_4[7];
-} ATTRIBUTE_PACKED s;
-union {
-int64_t sll;
-uint64_t ull;
-mpers_ptr_t p;
-int32_t sl;
-uint32_t ul;
-int32_t si;
-uint32_t ui;
-int16_t ss[7][9];
-uint16_t us[4];
-char sc;
-unsigned char uc;
-} u[3][2];
-int16_t f[0];
-} ATTRIBUTE_PACKED m32_sample_struct;
-#define MPERS_m32_sample_struct m32_sample_struct
diff --git a/mpers-m32/sample_struct.c b/mpers-m32/sample_struct.c
deleted file mode 100644
index b9f6d05..0000000
--- a/mpers-m32/sample_struct.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "mpers_type.h"
-typedef struct {
-	struct {
-		void *p;
-		char sc;
-		/* unsigned char mpers_filler_1[1]; */
-		short ss;
-		unsigned char uc;
-		/* unsigned char mpers_filler_2[3]; */
-		int si;
-		unsigned ui;
-		long sl;
-		unsigned short us;
-		/* unsigned char mpers_filler_3[6]; */
-		long long sll __attribute__((__aligned__(8)));
-		unsigned long long ull;
-		unsigned long ul;
-		long asl[3][5][7];
-		char f;
-		/* unsigned char mpers_end_filler_4[7]; */
-	} s;
-	union {
-		long long sll;
-		unsigned long long ull;
-		void *p;
-		long sl;
-		unsigned long ul;
-		int si;
-		unsigned ui;
-		short ss[7][9];
-		unsigned short us[4];
-		char sc;
-		unsigned char uc;
-	} u[3][2];
-	short f[0];
-} sample_struct;
-sample_struct mpers_target_var;
diff --git a/mpers-m32/sample_struct.h b/mpers-m32/sample_struct.h
deleted file mode 100644
index f7a21ac..0000000
--- a/mpers-m32/sample_struct.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-mpers_ptr_t p;
-char sc;
-unsigned char mpers_filler_1[1];
-int16_t ss;
-unsigned char uc;
-unsigned char mpers_filler_2[3];
-int32_t si;
-uint32_t ui;
-int32_t sl;
-uint16_t us;
-unsigned char mpers_filler_3[6];
-int64_t sll;
-uint64_t ull;
-uint32_t ul;
-int32_t asl[3][5][7];
-char f;
-unsigned char mpers_end_filler_4[7];
-} ATTRIBUTE_PACKED s;
-union {
-int64_t sll;
-uint64_t ull;
-mpers_ptr_t p;
-int32_t sl;
-uint32_t ul;
-int32_t si;
-uint32_t ui;
-int16_t ss[7][9];
-uint16_t us[4];
-char sc;
-unsigned char uc;
-} u[3][2];
-int16_t f[0];
-} ATTRIBUTE_PACKED m32_sample_struct;
-#define MPERS_m32_sample_struct m32_sample_struct
diff --git a/mpers-m32/seccomp_fprog_t.c b/mpers-m32/seccomp_fprog_t.c
deleted file mode 100644
index f26c70c..0000000
--- a/mpers-m32/seccomp_fprog_t.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "seccomp_fprog.h"
-typedef struct seccomp_fprog seccomp_fprog_t;
-
-seccomp_fprog_t mpers_target_var;
diff --git a/mpers-m32/seccomp_fprog_t.h b/mpers-m32/seccomp_fprog_t.h
deleted file mode 100644
index 9c08476..0000000
--- a/mpers-m32/seccomp_fprog_t.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint16_t len;
-unsigned char mpers_filler_1[2];
-uint32_t filter;
-} ATTRIBUTE_PACKED m32_seccomp_fprog_t;
-#define MPERS_m32_seccomp_fprog_t m32_seccomp_fprog_t
diff --git a/mpers-m32/shmid_ds_t.c b/mpers-m32/shmid_ds_t.c
deleted file mode 100644
index af4a7d2..0000000
--- a/mpers-m32/shmid_ds_t.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2003-2006 Roland McGrath <roland@redhat.com>
- * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "ipc_defs.h"
-
-#ifdef HAVE_SYS_SHM_H
-/* The C library generally exports the struct the current kernel expects. */
-# include <sys/shm.h>
-typedef struct shmid_ds shmid_ds_t;
-#elif defined HAVE_LINUX_SHM_H
-/* The linux header might provide the right struct. */
-# include <linux/shm.h>
-typedef struct shmid64_ds shmid_ds_t;
-#endif
-
-shmid_ds_t mpers_target_var;
diff --git a/mpers-m32/shmid_ds_t.h b/mpers-m32/shmid_ds_t.h
deleted file mode 100644
index 97bf2e1..0000000
--- a/mpers-m32/shmid_ds_t.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-int32_t __key;
-uint32_t uid;
-uint32_t gid;
-uint32_t cuid;
-uint32_t cgid;
-uint16_t mode;
-uint16_t __pad1;
-uint16_t __seq;
-uint16_t __pad2;
-uint32_t __glibc_reserved1;
-uint32_t __glibc_reserved2;
-} ATTRIBUTE_PACKED shm_perm;
-uint32_t shm_segsz;
-int32_t shm_atime;
-uint32_t __glibc_reserved1;
-int32_t shm_dtime;
-uint32_t __glibc_reserved2;
-int32_t shm_ctime;
-uint32_t __glibc_reserved3;
-int32_t shm_cpid;
-int32_t shm_lpid;
-uint32_t shm_nattch;
-uint32_t __glibc_reserved4;
-uint32_t __glibc_reserved5;
-} ATTRIBUTE_PACKED m32_shmid_ds_t;
-#define MPERS_m32_shmid_ds_t m32_shmid_ds_t
diff --git a/mpers-m32/siginfo_t.c b/mpers-m32/siginfo_t.c
deleted file mode 100644
index fbd003c..0000000
--- a/mpers-m32/siginfo_t.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2001 John Hughes <john@Calva.COM>
- * Copyright (c) 2013 Denys Vlasenko <vda.linux@googlemail.com>
- * Copyright (c) 2011-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <signal.h>
-#include <linux/audit.h>
-
-siginfo_t mpers_target_var;
diff --git a/mpers-m32/siginfo_t.h b/mpers-m32/siginfo_t.h
deleted file mode 100644
index e6989a2..0000000
--- a/mpers-m32/siginfo_t.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t si_signo;
-int32_t si_errno;
-int32_t si_code;
-union {
-int32_t _pad[29];
-struct {
-int32_t si_pid;
-uint32_t si_uid;
-} ATTRIBUTE_PACKED _kill;
-struct {
-int32_t si_tid;
-int32_t si_overrun;
-union {
-int32_t sival_int;
-mpers_ptr_t sival_ptr;
-} si_sigval;
-} ATTRIBUTE_PACKED _timer;
-struct {
-int32_t si_pid;
-uint32_t si_uid;
-union {
-int32_t sival_int;
-mpers_ptr_t sival_ptr;
-} si_sigval;
-} ATTRIBUTE_PACKED _rt;
-struct {
-int32_t si_pid;
-uint32_t si_uid;
-int32_t si_status;
-int32_t si_utime;
-int32_t si_stime;
-} ATTRIBUTE_PACKED _sigchld;
-struct {
-mpers_ptr_t si_addr;
-int16_t si_addr_lsb;
-unsigned char mpers_end_filler_1[2];
-} ATTRIBUTE_PACKED _sigfault;
-struct {
-int32_t si_band;
-int32_t si_fd;
-} ATTRIBUTE_PACKED _sigpoll;
-struct {
-mpers_ptr_t _call_addr;
-int32_t _syscall;
-uint32_t _arch;
-} ATTRIBUTE_PACKED _sigsys;
-} _sifields;
-} ATTRIBUTE_PACKED m32_siginfo_t;
-#define MPERS_m32_siginfo_t m32_siginfo_t
diff --git a/mpers-m32/stack_t.c b/mpers-m32/stack_t.c
deleted file mode 100644
index a958819..0000000
--- a/mpers-m32/stack_t.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <signal.h>
-
-stack_t mpers_target_var;
diff --git a/mpers-m32/stack_t.h b/mpers-m32/stack_t.h
deleted file mode 100644
index 5b4a93a..0000000
--- a/mpers-m32/stack_t.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-mpers_ptr_t ss_sp;
-int32_t ss_flags;
-uint32_t ss_size;
-} ATTRIBUTE_PACKED m32_stack_t;
-#define MPERS_m32_stack_t m32_stack_t
diff --git a/mpers-m32/struct_blk_user_trace_setup.c b/mpers-m32/struct_blk_user_trace_setup.c
deleted file mode 100644
index 273bae4..0000000
--- a/mpers-m32/struct_blk_user_trace_setup.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/ioctl.h>
-#include <linux/fs.h>
-
-typedef struct {
-	int op;
-	int flags;
-	int datalen;
-	void *data;
-} struct_blkpg_ioctl_arg;
-
-#define BLKPG_DEVNAMELTH	64
-#define BLKPG_VOLNAMELTH	64
-typedef struct {
-	int64_t start;			/* starting offset in bytes */
-	int64_t length;			/* length in bytes */
-	int pno;			/* partition number */
-	char devname[BLKPG_DEVNAMELTH];	/* partition name, like sda5 or c0d1p2,
-					   to be used in kernel messages */
-	char volname[BLKPG_VOLNAMELTH];	/* volume label */
-} struct_blkpg_partition;
-
-#define BLKTRACE_BDEV_SIZE      32
-typedef struct blk_user_trace_setup {
-	char name[BLKTRACE_BDEV_SIZE];	/* output */
-	uint16_t act_mask;		/* input */
-	uint32_t buf_size;		/* input */
-	uint32_t buf_nr;		/* input */
-	uint64_t start_lba;
-	uint64_t end_lba;
-	uint32_t pid;
-} struct_blk_user_trace_setup;
-
-struct_blk_user_trace_setup mpers_target_var;
diff --git a/mpers-m32/struct_blk_user_trace_setup.h b/mpers-m32/struct_blk_user_trace_setup.h
deleted file mode 100644
index 8b69987..0000000
--- a/mpers-m32/struct_blk_user_trace_setup.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-char name[32];
-uint16_t act_mask;
-unsigned char mpers_filler_1[2];
-uint32_t buf_size;
-uint32_t buf_nr;
-uint64_t start_lba;
-uint64_t end_lba;
-uint32_t pid;
-} ATTRIBUTE_PACKED m32_struct_blk_user_trace_setup;
-#define MPERS_m32_struct_blk_user_trace_setup m32_struct_blk_user_trace_setup
diff --git a/mpers-m32/struct_blkpg_ioctl_arg.c b/mpers-m32/struct_blkpg_ioctl_arg.c
deleted file mode 100644
index 46a4fa8..0000000
--- a/mpers-m32/struct_blkpg_ioctl_arg.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/ioctl.h>
-#include <linux/fs.h>
-
-typedef struct {
-	int op;
-	int flags;
-	int datalen;
-	void *data;
-} struct_blkpg_ioctl_arg;
-
-#define BLKPG_DEVNAMELTH	64
-#define BLKPG_VOLNAMELTH	64
-typedef struct {
-	int64_t start;			/* starting offset in bytes */
-	int64_t length;			/* length in bytes */
-	int pno;			/* partition number */
-	char devname[BLKPG_DEVNAMELTH];	/* partition name, like sda5 or c0d1p2,
-					   to be used in kernel messages */
-	char volname[BLKPG_VOLNAMELTH];	/* volume label */
-} struct_blkpg_partition;
-
-#define BLKTRACE_BDEV_SIZE      32
-typedef struct blk_user_trace_setup {
-	char name[BLKTRACE_BDEV_SIZE];	/* output */
-	uint16_t act_mask;		/* input */
-	uint32_t buf_size;		/* input */
-	uint32_t buf_nr;		/* input */
-	uint64_t start_lba;
-	uint64_t end_lba;
-	uint32_t pid;
-} struct_blk_user_trace_setup;
-
-struct_blkpg_ioctl_arg mpers_target_var;
diff --git a/mpers-m32/struct_blkpg_ioctl_arg.h b/mpers-m32/struct_blkpg_ioctl_arg.h
deleted file mode 100644
index e97ea0f..0000000
--- a/mpers-m32/struct_blkpg_ioctl_arg.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t op;
-int32_t flags;
-int32_t datalen;
-mpers_ptr_t data;
-} ATTRIBUTE_PACKED m32_struct_blkpg_ioctl_arg;
-#define MPERS_m32_struct_blkpg_ioctl_arg m32_struct_blkpg_ioctl_arg
diff --git a/mpers-m32/struct_blkpg_partition.c b/mpers-m32/struct_blkpg_partition.c
deleted file mode 100644
index 04a04ff..0000000
--- a/mpers-m32/struct_blkpg_partition.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/ioctl.h>
-#include <linux/fs.h>
-
-typedef struct {
-	int op;
-	int flags;
-	int datalen;
-	void *data;
-} struct_blkpg_ioctl_arg;
-
-#define BLKPG_DEVNAMELTH	64
-#define BLKPG_VOLNAMELTH	64
-typedef struct {
-	int64_t start;			/* starting offset in bytes */
-	int64_t length;			/* length in bytes */
-	int pno;			/* partition number */
-	char devname[BLKPG_DEVNAMELTH];	/* partition name, like sda5 or c0d1p2,
-					   to be used in kernel messages */
-	char volname[BLKPG_VOLNAMELTH];	/* volume label */
-} struct_blkpg_partition;
-
-#define BLKTRACE_BDEV_SIZE      32
-typedef struct blk_user_trace_setup {
-	char name[BLKTRACE_BDEV_SIZE];	/* output */
-	uint16_t act_mask;		/* input */
-	uint32_t buf_size;		/* input */
-	uint32_t buf_nr;		/* input */
-	uint64_t start_lba;
-	uint64_t end_lba;
-	uint32_t pid;
-} struct_blk_user_trace_setup;
-
-struct_blkpg_partition mpers_target_var;
diff --git a/mpers-m32/struct_blkpg_partition.h b/mpers-m32/struct_blkpg_partition.h
deleted file mode 100644
index 8e34b80..0000000
--- a/mpers-m32/struct_blkpg_partition.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t start;
-int64_t length;
-int32_t pno;
-char devname[64];
-char volname[64];
-} ATTRIBUTE_PACKED m32_struct_blkpg_partition;
-#define MPERS_m32_struct_blkpg_partition m32_struct_blkpg_partition
diff --git a/mpers-m32/struct_btrfs_ioctl_dev_replace_args.c b/mpers-m32/struct_btrfs_ioctl_dev_replace_args.c
deleted file mode 100644
index 6caef1a..0000000
--- a/mpers-m32/struct_btrfs_ioctl_dev_replace_args.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_BTRFS_H
-
-
-# include <linux/btrfs.h>
-
-typedef struct btrfs_ioctl_dev_replace_args
-	struct_btrfs_ioctl_dev_replace_args;
-typedef struct btrfs_ioctl_send_args
-	struct_btrfs_ioctl_send_args;
-typedef struct btrfs_ioctl_received_subvol_args
-	struct_btrfs_ioctl_received_subvol_args;
-typedef struct btrfs_ioctl_vol_args_v2
-	struct_btrfs_ioctl_vol_args_v2;
-
-#endif /* HAVE_LINUX_BTRFS_H */
-
-struct_btrfs_ioctl_dev_replace_args mpers_target_var;
diff --git a/mpers-m32/struct_btrfs_ioctl_dev_replace_args.h b/mpers-m32/struct_btrfs_ioctl_dev_replace_args.h
deleted file mode 100644
index 953f203..0000000
--- a/mpers-m32/struct_btrfs_ioctl_dev_replace_args.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint64_t cmd;
-uint64_t result;
-union {
-struct {
-uint64_t srcdevid;
-uint64_t cont_reading_from_srcdev_mode;
-unsigned char srcdev_name[1025];
-unsigned char tgtdev_name[1025];
-unsigned char mpers_end_filler_1[2];
-} ATTRIBUTE_PACKED start;
-struct {
-uint64_t replace_state;
-uint64_t progress_1000;
-uint64_t time_started;
-uint64_t time_stopped;
-uint64_t num_write_errors;
-uint64_t num_uncorrectable_read_errors;
-} ATTRIBUTE_PACKED status;
-} ;
-uint64_t spare[64];
-} ATTRIBUTE_PACKED m32_struct_btrfs_ioctl_dev_replace_args;
-#define MPERS_m32_struct_btrfs_ioctl_dev_replace_args m32_struct_btrfs_ioctl_dev_replace_args
diff --git a/mpers-m32/struct_btrfs_ioctl_received_subvol_args.c b/mpers-m32/struct_btrfs_ioctl_received_subvol_args.c
deleted file mode 100644
index 4f54da8..0000000
--- a/mpers-m32/struct_btrfs_ioctl_received_subvol_args.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_BTRFS_H
-
-
-# include <linux/btrfs.h>
-
-typedef struct btrfs_ioctl_dev_replace_args
-	struct_btrfs_ioctl_dev_replace_args;
-typedef struct btrfs_ioctl_send_args
-	struct_btrfs_ioctl_send_args;
-typedef struct btrfs_ioctl_received_subvol_args
-	struct_btrfs_ioctl_received_subvol_args;
-typedef struct btrfs_ioctl_vol_args_v2
-	struct_btrfs_ioctl_vol_args_v2;
-
-#endif /* HAVE_LINUX_BTRFS_H */
-
-struct_btrfs_ioctl_received_subvol_args mpers_target_var;
diff --git a/mpers-m32/struct_btrfs_ioctl_received_subvol_args.h b/mpers-m32/struct_btrfs_ioctl_received_subvol_args.h
deleted file mode 100644
index c947619..0000000
--- a/mpers-m32/struct_btrfs_ioctl_received_subvol_args.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-char uuid[16];
-uint64_t stransid;
-uint64_t rtransid;
-struct {
-uint64_t sec;
-uint32_t nsec;
-} ATTRIBUTE_PACKED stime;
-struct {
-uint64_t sec;
-uint32_t nsec;
-} ATTRIBUTE_PACKED rtime;
-uint64_t flags;
-uint64_t reserved[16];
-} ATTRIBUTE_PACKED m32_struct_btrfs_ioctl_received_subvol_args;
-#define MPERS_m32_struct_btrfs_ioctl_received_subvol_args m32_struct_btrfs_ioctl_received_subvol_args
diff --git a/mpers-m32/struct_btrfs_ioctl_send_args.c b/mpers-m32/struct_btrfs_ioctl_send_args.c
deleted file mode 100644
index 0e1d924..0000000
--- a/mpers-m32/struct_btrfs_ioctl_send_args.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_BTRFS_H
-
-
-# include <linux/btrfs.h>
-
-typedef struct btrfs_ioctl_dev_replace_args
-	struct_btrfs_ioctl_dev_replace_args;
-typedef struct btrfs_ioctl_send_args
-	struct_btrfs_ioctl_send_args;
-typedef struct btrfs_ioctl_received_subvol_args
-	struct_btrfs_ioctl_received_subvol_args;
-typedef struct btrfs_ioctl_vol_args_v2
-	struct_btrfs_ioctl_vol_args_v2;
-
-#endif /* HAVE_LINUX_BTRFS_H */
-
-struct_btrfs_ioctl_send_args mpers_target_var;
diff --git a/mpers-m32/struct_btrfs_ioctl_send_args.h b/mpers-m32/struct_btrfs_ioctl_send_args.h
deleted file mode 100644
index 6547390..0000000
--- a/mpers-m32/struct_btrfs_ioctl_send_args.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t send_fd;
-uint64_t clone_sources_count;
-mpers_ptr_t clone_sources;
-uint64_t parent_root;
-uint64_t flags;
-uint64_t reserved[4];
-} ATTRIBUTE_PACKED m32_struct_btrfs_ioctl_send_args;
-#define MPERS_m32_struct_btrfs_ioctl_send_args m32_struct_btrfs_ioctl_send_args
diff --git a/mpers-m32/struct_btrfs_ioctl_vol_args_v2.c b/mpers-m32/struct_btrfs_ioctl_vol_args_v2.c
deleted file mode 100644
index 977a309..0000000
--- a/mpers-m32/struct_btrfs_ioctl_vol_args_v2.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_BTRFS_H
-
-
-# include <linux/btrfs.h>
-
-typedef struct btrfs_ioctl_dev_replace_args
-	struct_btrfs_ioctl_dev_replace_args;
-typedef struct btrfs_ioctl_send_args
-	struct_btrfs_ioctl_send_args;
-typedef struct btrfs_ioctl_received_subvol_args
-	struct_btrfs_ioctl_received_subvol_args;
-typedef struct btrfs_ioctl_vol_args_v2
-	struct_btrfs_ioctl_vol_args_v2;
-
-#endif /* HAVE_LINUX_BTRFS_H */
-
-struct_btrfs_ioctl_vol_args_v2 mpers_target_var;
diff --git a/mpers-m32/struct_btrfs_ioctl_vol_args_v2.h b/mpers-m32/struct_btrfs_ioctl_vol_args_v2.h
deleted file mode 100644
index 2e2a260..0000000
--- a/mpers-m32/struct_btrfs_ioctl_vol_args_v2.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t fd;
-uint64_t transid;
-uint64_t flags;
-union {
-struct {
-uint64_t size;
-mpers_ptr_t qgroup_inherit;
-} ATTRIBUTE_PACKED ;
-uint64_t unused[4];
-} ;
-char name[4040];
-} ATTRIBUTE_PACKED m32_struct_btrfs_ioctl_vol_args_v2;
-#define MPERS_m32_struct_btrfs_ioctl_vol_args_v2 m32_struct_btrfs_ioctl_vol_args_v2
diff --git a/mpers-m32/struct_ff_effect.c b/mpers-m32/struct_ff_effect.c
deleted file mode 100644
index 6daa032..0000000
--- a/mpers-m32/struct_ff_effect.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2015 Etienne Gemsa <etienne.gemsa@lse.epita.fr>
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_INPUT_H
-
-
-# include <linux/ioctl.h>
-# include <linux/input.h>
-
-typedef struct ff_effect struct_ff_effect;
-
-#endif /* HAVE_LINUX_INPUT_H */
-
-struct_ff_effect mpers_target_var;
diff --git a/mpers-m32/struct_ff_effect.h b/mpers-m32/struct_ff_effect.h
deleted file mode 100644
index 4574af1..0000000
--- a/mpers-m32/struct_ff_effect.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint16_t type;
-int16_t id;
-uint16_t direction;
-struct {
-uint16_t button;
-uint16_t interval;
-} ATTRIBUTE_PACKED trigger;
-struct {
-uint16_t length;
-uint16_t delay;
-} ATTRIBUTE_PACKED replay;
-unsigned char mpers_filler_1[2];
-union {
-struct {
-int16_t level;
-struct {
-uint16_t attack_length;
-uint16_t attack_level;
-uint16_t fade_length;
-uint16_t fade_level;
-} ATTRIBUTE_PACKED envelope;
-} ATTRIBUTE_PACKED constant;
-struct {
-int16_t start_level;
-int16_t end_level;
-struct {
-uint16_t attack_length;
-uint16_t attack_level;
-uint16_t fade_length;
-uint16_t fade_level;
-} ATTRIBUTE_PACKED envelope;
-} ATTRIBUTE_PACKED ramp;
-struct {
-uint16_t waveform;
-uint16_t period;
-int16_t magnitude;
-int16_t offset;
-uint16_t phase;
-struct {
-uint16_t attack_length;
-uint16_t attack_level;
-uint16_t fade_length;
-uint16_t fade_level;
-} ATTRIBUTE_PACKED envelope;
-unsigned char mpers_filler_2[2];
-uint32_t custom_len;
-mpers_ptr_t custom_data;
-} ATTRIBUTE_PACKED periodic;
-struct {
-uint16_t right_saturation;
-uint16_t left_saturation;
-int16_t right_coeff;
-int16_t left_coeff;
-uint16_t deadband;
-int16_t center;
-} ATTRIBUTE_PACKED condition[2];
-struct {
-uint16_t strong_magnitude;
-uint16_t weak_magnitude;
-} ATTRIBUTE_PACKED rumble;
-} u;
-} ATTRIBUTE_PACKED m32_struct_ff_effect;
-#define MPERS_m32_struct_ff_effect m32_struct_ff_effect
diff --git a/mpers-m32/struct_flock.c b/mpers-m32/struct_flock.c
deleted file mode 100644
index 5aa82c9..0000000
--- a/mpers-m32/struct_flock.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "flock.h"
-typedef struct_kernel_flock struct_flock;
-typedef struct_kernel_flock64 struct_flock64;
-
-struct_flock mpers_target_var;
diff --git a/mpers-m32/struct_flock.h b/mpers-m32/struct_flock.h
deleted file mode 100644
index 0acc9c1..0000000
--- a/mpers-m32/struct_flock.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int16_t l_type;
-int16_t l_whence;
-int32_t l_start;
-int32_t l_len;
-int32_t l_pid;
-} ATTRIBUTE_PACKED m32_struct_flock;
-#define MPERS_m32_struct_flock m32_struct_flock
diff --git a/mpers-m32/struct_flock64.c b/mpers-m32/struct_flock64.c
deleted file mode 100644
index 3535de1..0000000
--- a/mpers-m32/struct_flock64.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "flock.h"
-typedef struct_kernel_flock struct_flock;
-typedef struct_kernel_flock64 struct_flock64;
-
-struct_flock64 mpers_target_var;
diff --git a/mpers-m32/struct_flock64.h b/mpers-m32/struct_flock64.h
deleted file mode 100644
index 9a2f03b..0000000
--- a/mpers-m32/struct_flock64.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int16_t l_type;
-int16_t l_whence;
-int64_t l_start;
-int64_t l_len;
-int32_t l_pid;
-} ATTRIBUTE_PACKED m32_struct_flock64;
-#define MPERS_m32_struct_flock64 m32_struct_flock64
diff --git a/mpers-m32/struct_hd_geometry.c b/mpers-m32/struct_hd_geometry.c
deleted file mode 100644
index 9a78951..0000000
--- a/mpers-m32/struct_hd_geometry.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/hdreg.h>
-
-typedef struct hd_geometry struct_hd_geometry;
-
-struct_hd_geometry mpers_target_var;
diff --git a/mpers-m32/struct_hd_geometry.h b/mpers-m32/struct_hd_geometry.h
deleted file mode 100644
index 6c4ec7a..0000000
--- a/mpers-m32/struct_hd_geometry.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-unsigned char heads;
-unsigned char sectors;
-uint16_t cylinders;
-uint32_t start;
-} ATTRIBUTE_PACKED m32_struct_hd_geometry;
-#define MPERS_m32_struct_hd_geometry m32_struct_hd_geometry
diff --git a/mpers-m32/struct_ifconf.c b/mpers-m32/struct_ifconf.c
deleted file mode 100644
index 10d0006..0000000
--- a/mpers-m32/struct_ifconf.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#include <sys/socket.h>
-#if defined ALPHA || defined SH || defined SH64
-# include <linux/ioctl.h>
-#endif
-#include <linux/sockios.h>
-#include <arpa/inet.h>
-#include <net/if.h>
-
-
-typedef struct ifconf struct_ifconf;
-typedef struct ifreq struct_ifreq;
-
-struct_ifconf mpers_target_var;
diff --git a/mpers-m32/struct_ifconf.h b/mpers-m32/struct_ifconf.h
deleted file mode 100644
index 6751792..0000000
--- a/mpers-m32/struct_ifconf.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t ifc_len;
-union {
-mpers_ptr_t ifcu_buf;
-mpers_ptr_t ifcu_req;
-} ifc_ifcu;
-} ATTRIBUTE_PACKED m32_struct_ifconf;
-#define MPERS_m32_struct_ifconf m32_struct_ifconf
diff --git a/mpers-m32/struct_ifreq.c b/mpers-m32/struct_ifreq.c
deleted file mode 100644
index 31f73ea..0000000
--- a/mpers-m32/struct_ifreq.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#include <sys/socket.h>
-#if defined ALPHA || defined SH || defined SH64
-# include <linux/ioctl.h>
-#endif
-#include <linux/sockios.h>
-#include <arpa/inet.h>
-#include <net/if.h>
-
-
-typedef struct ifconf struct_ifconf;
-typedef struct ifreq struct_ifreq;
-
-struct_ifreq mpers_target_var;
diff --git a/mpers-m32/struct_ifreq.h b/mpers-m32/struct_ifreq.h
deleted file mode 100644
index 0250cbc..0000000
--- a/mpers-m32/struct_ifreq.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-union {
-char ifrn_name[16];
-} ifr_ifrn;
-union {
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_addr;
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_dstaddr;
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_broadaddr;
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_netmask;
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_hwaddr;
-int16_t ifru_flags;
-int32_t ifru_ivalue;
-int32_t ifru_mtu;
-struct {
-uint32_t mem_start;
-uint32_t mem_end;
-uint16_t base_addr;
-unsigned char irq;
-unsigned char dma;
-unsigned char port;
-unsigned char mpers_end_filler_1[3];
-} ATTRIBUTE_PACKED ifru_map;
-char ifru_slave[16];
-char ifru_newname[16];
-mpers_ptr_t ifru_data;
-} ifr_ifru;
-} ATTRIBUTE_PACKED m32_struct_ifreq;
-#define MPERS_m32_struct_ifreq m32_struct_ifreq
diff --git a/mpers-m32/struct_loop_info.c b/mpers-m32/struct_loop_info.c
deleted file mode 100644
index a7116a1..0000000
--- a/mpers-m32/struct_loop_info.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2012 The Chromium OS Authors.
- * Copyright (c) 2012-2017 The strace developers.
- * Written by Mike Frysinger <vapier@gentoo.org>.
- *
- * 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 <linux/ioctl.h>
-#include <linux/loop.h>
-
-typedef struct loop_info struct_loop_info;
-
-
-struct_loop_info mpers_target_var;
diff --git a/mpers-m32/struct_loop_info.h b/mpers-m32/struct_loop_info.h
deleted file mode 100644
index 3f94785..0000000
--- a/mpers-m32/struct_loop_info.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t lo_number;
-uint16_t lo_device;
-unsigned char mpers_filler_1[2];
-uint32_t lo_inode;
-uint16_t lo_rdevice;
-unsigned char mpers_filler_2[2];
-int32_t lo_offset;
-int32_t lo_encrypt_type;
-int32_t lo_encrypt_key_size;
-int32_t lo_flags;
-char lo_name[64];
-unsigned char lo_encrypt_key[32];
-uint32_t lo_init[2];
-char reserved[4];
-} ATTRIBUTE_PACKED m32_struct_loop_info;
-#define MPERS_m32_struct_loop_info m32_struct_loop_info
diff --git a/mpers-m32/struct_mmsghdr.c b/mpers-m32/struct_mmsghdr.c
deleted file mode 100644
index 73bc165..0000000
--- a/mpers-m32/struct_mmsghdr.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "msghdr.h"
-typedef struct mmsghdr struct_mmsghdr;
-
-struct_mmsghdr mpers_target_var;
diff --git a/mpers-m32/struct_mmsghdr.h b/mpers-m32/struct_mmsghdr.h
deleted file mode 100644
index 2fff804..0000000
--- a/mpers-m32/struct_mmsghdr.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-mpers_ptr_t msg_name;
-uint32_t msg_namelen;
-mpers_ptr_t msg_iov;
-uint32_t msg_iovlen;
-mpers_ptr_t msg_control;
-uint32_t msg_controllen;
-int32_t msg_flags;
-} ATTRIBUTE_PACKED msg_hdr;
-uint32_t msg_len;
-} ATTRIBUTE_PACKED m32_struct_mmsghdr;
-#define MPERS_m32_struct_mmsghdr m32_struct_mmsghdr
diff --git a/mpers-m32/struct_msghdr.c b/mpers-m32/struct_msghdr.c
deleted file mode 100644
index 0100d76..0000000
--- a/mpers-m32/struct_msghdr.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "msghdr.h"
-typedef struct msghdr struct_msghdr;
-
-struct_msghdr mpers_target_var;
diff --git a/mpers-m32/struct_msghdr.h b/mpers-m32/struct_msghdr.h
deleted file mode 100644
index fc171c0..0000000
--- a/mpers-m32/struct_msghdr.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-mpers_ptr_t msg_name;
-uint32_t msg_namelen;
-mpers_ptr_t msg_iov;
-uint32_t msg_iovlen;
-mpers_ptr_t msg_control;
-uint32_t msg_controllen;
-int32_t msg_flags;
-} ATTRIBUTE_PACKED m32_struct_msghdr;
-#define MPERS_m32_struct_msghdr m32_struct_msghdr
diff --git a/mpers-m32/struct_mtd_oob_buf.c b/mpers-m32/struct_mtd_oob_buf.c
deleted file mode 100644
index 48fc9ab..0000000
--- a/mpers-m32/struct_mtd_oob_buf.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2012 Mike Frysinger <vapier@gentoo.org>
- * Copyright (c) 2012-2017 The strace developers.
- *
- * 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 <linux/ioctl.h>
-
-/* The mtd api changes quickly, so we have to keep a local copy */
-#include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
-# include "mtd-abi.h"
-#else
-# include <mtd/mtd-abi.h>
-#endif
-
-typedef struct mtd_oob_buf struct_mtd_oob_buf;
-
-struct_mtd_oob_buf mpers_target_var;
diff --git a/mpers-m32/struct_mtd_oob_buf.h b/mpers-m32/struct_mtd_oob_buf.h
deleted file mode 100644
index c6a1b1e..0000000
--- a/mpers-m32/struct_mtd_oob_buf.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t start;
-uint32_t length;
-mpers_ptr_t ptr;
-} ATTRIBUTE_PACKED m32_struct_mtd_oob_buf;
-#define MPERS_m32_struct_mtd_oob_buf m32_struct_mtd_oob_buf
diff --git a/mpers-m32/struct_rt_sigframe.c b/mpers-m32/struct_rt_sigframe.c
deleted file mode 100644
index e5a0b48..0000000
--- a/mpers-m32/struct_rt_sigframe.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "rt_sigframe.h"
-
-struct_rt_sigframe mpers_target_var;
diff --git a/mpers-m32/struct_rt_sigframe.h b/mpers-m32/struct_rt_sigframe.h
deleted file mode 100644
index 5b21882..0000000
--- a/mpers-m32/struct_rt_sigframe.h
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t pretcode;
-int32_t sig;
-uint32_t pinfo;
-uint32_t puc;
-struct {
-int32_t si_signo;
-int32_t si_errno;
-int32_t si_code;
-union {
-int32_t _pad[29];
-struct {
-int32_t si_pid;
-uint32_t si_uid;
-} ATTRIBUTE_PACKED _kill;
-struct {
-int32_t si_tid;
-int32_t si_overrun;
-union {
-int32_t sival_int;
-mpers_ptr_t sival_ptr;
-} si_sigval;
-} ATTRIBUTE_PACKED _timer;
-struct {
-int32_t si_pid;
-uint32_t si_uid;
-union {
-int32_t sival_int;
-mpers_ptr_t sival_ptr;
-} si_sigval;
-} ATTRIBUTE_PACKED _rt;
-struct {
-int32_t si_pid;
-uint32_t si_uid;
-int32_t si_status;
-int32_t si_utime;
-int32_t si_stime;
-} ATTRIBUTE_PACKED _sigchld;
-struct {
-mpers_ptr_t si_addr;
-int16_t si_addr_lsb;
-unsigned char mpers_end_filler_1[2];
-} ATTRIBUTE_PACKED _sigfault;
-struct {
-int32_t si_band;
-int32_t si_fd;
-} ATTRIBUTE_PACKED _sigpoll;
-struct {
-mpers_ptr_t _call_addr;
-int32_t _syscall;
-uint32_t _arch;
-} ATTRIBUTE_PACKED _sigsys;
-} _sifields;
-} ATTRIBUTE_PACKED info;
-struct {
-uint32_t uc_flags;
-mpers_ptr_t uc_link;
-struct {
-mpers_ptr_t ss_sp;
-int32_t ss_flags;
-uint32_t ss_size;
-} ATTRIBUTE_PACKED uc_stack;
-struct {
-int32_t gregs[19];
-mpers_ptr_t fpregs;
-uint32_t oldmask;
-uint32_t cr2;
-} ATTRIBUTE_PACKED uc_mcontext;
-struct {
-uint32_t __val[32];
-} ATTRIBUTE_PACKED uc_sigmask;
-struct {
-uint32_t cw;
-uint32_t sw;
-uint32_t tag;
-uint32_t ipoff;
-uint32_t cssel;
-uint32_t dataoff;
-uint32_t datasel;
-struct {
-uint16_t significand[4];
-uint16_t exponent;
-} ATTRIBUTE_PACKED _st[8];
-uint32_t status;
-} ATTRIBUTE_PACKED __fpregs_mem;
-} ATTRIBUTE_PACKED uc;
-} ATTRIBUTE_PACKED m32_struct_rt_sigframe;
-#define MPERS_m32_struct_rt_sigframe m32_struct_rt_sigframe
diff --git a/mpers-m32/struct_rtc_pll_info.c b/mpers-m32/struct_rtc_pll_info.c
deleted file mode 100644
index 1ae0b09..0000000
--- a/mpers-m32/struct_rtc_pll_info.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2004 Ulrich Drepper <drepper@redhat.com>
- * Copyright (c) 2004-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/ioctl.h>
-#include <linux/rtc.h>
-
-typedef struct rtc_pll_info struct_rtc_pll_info;
-
-struct_rtc_pll_info mpers_target_var;
diff --git a/mpers-m32/struct_rtc_pll_info.h b/mpers-m32/struct_rtc_pll_info.h
deleted file mode 100644
index 778c80f..0000000
--- a/mpers-m32/struct_rtc_pll_info.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t pll_ctrl;
-int32_t pll_value;
-int32_t pll_max;
-int32_t pll_min;
-int32_t pll_posmult;
-int32_t pll_negmult;
-int32_t pll_clock;
-} ATTRIBUTE_PACKED m32_struct_rtc_pll_info;
-#define MPERS_m32_struct_rtc_pll_info m32_struct_rtc_pll_info
diff --git a/mpers-m32/struct_sg_io_hdr.c b/mpers-m32/struct_sg_io_hdr.c
deleted file mode 100644
index 3858182..0000000
--- a/mpers-m32/struct_sg_io_hdr.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2007 Vladimir Nadvornik <nadvornik@suse.cz>
- * Copyright (c) 2007-2017 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015 Bart Van Assche <bart.vanassche@sandisk.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_SCSI_SG_H
-
-
-# include <scsi/sg.h>
-
-typedef struct sg_io_hdr struct_sg_io_hdr;
-
-#endif /* HAVE_SCSI_SG_H */
-
-struct_sg_io_hdr mpers_target_var;
diff --git a/mpers-m32/struct_sg_io_hdr.h b/mpers-m32/struct_sg_io_hdr.h
deleted file mode 100644
index 9322e92..0000000
--- a/mpers-m32/struct_sg_io_hdr.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t interface_id;
-int32_t dxfer_direction;
-unsigned char cmd_len;
-unsigned char mx_sb_len;
-uint16_t iovec_count;
-uint32_t dxfer_len;
-mpers_ptr_t dxferp;
-mpers_ptr_t cmdp;
-mpers_ptr_t sbp;
-uint32_t timeout;
-uint32_t flags;
-int32_t pack_id;
-mpers_ptr_t usr_ptr;
-unsigned char status;
-unsigned char masked_status;
-unsigned char msg_status;
-unsigned char sb_len_wr;
-uint16_t host_status;
-uint16_t driver_status;
-int32_t resid;
-uint32_t duration;
-uint32_t info;
-} ATTRIBUTE_PACKED m32_struct_sg_io_hdr;
-#define MPERS_m32_struct_sg_io_hdr m32_struct_sg_io_hdr
diff --git a/mpers-m32/struct_sg_req_info.c b/mpers-m32/struct_sg_req_info.c
deleted file mode 100644
index 26bddb3..0000000
--- a/mpers-m32/struct_sg_req_info.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Decode struct sg_req_info.
- *
- * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_SCSI_SG_H
-
-
-# include <scsi/sg.h>
-
-typedef struct sg_req_info struct_sg_req_info;
-
-#endif /* HAVE_SCSI_SG_H */
-
-struct_sg_req_info mpers_target_var;
diff --git a/mpers-m32/struct_sg_req_info.h b/mpers-m32/struct_sg_req_info.h
deleted file mode 100644
index f2d5a6d..0000000
--- a/mpers-m32/struct_sg_req_info.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-char req_state;
-char orphan;
-char sg_io_owned;
-char problem;
-int32_t pack_id;
-mpers_ptr_t usr_ptr;
-uint32_t duration;
-int32_t unused;
-} ATTRIBUTE_PACKED m32_struct_sg_req_info;
-#define MPERS_m32_struct_sg_req_info m32_struct_sg_req_info
diff --git a/mpers-m32/struct_sigevent.c b/mpers-m32/struct_sigevent.c
deleted file mode 100644
index e5294a2..0000000
--- a/mpers-m32/struct_sigevent.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2003, 2004 Ulrich Drepper <drepper@redhat.com>
- * Copyright (c) 2005-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#include "sigevent.h"
-struct_sigevent mpers_target_var;
diff --git a/mpers-m32/struct_sigevent.h b/mpers-m32/struct_sigevent.h
deleted file mode 100644
index dbe82fe..0000000
--- a/mpers-m32/struct_sigevent.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-union {
-int32_t sival_int;
-uint32_t sival_ptr;
-} sigev_value;
-int32_t sigev_signo;
-int32_t sigev_notify;
-union {
-int32_t tid;
-struct {
-uint32_t function;
-uint32_t attribute;
-} ATTRIBUTE_PACKED sigev_thread;
-} sigev_un;
-} ATTRIBUTE_PACKED m32_struct_sigevent;
-#define MPERS_m32_struct_sigevent m32_struct_sigevent
diff --git a/mpers-m32/struct_stat.c b/mpers-m32/struct_stat.c
deleted file mode 100644
index e10cfd9..0000000
--- a/mpers-m32/struct_stat.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "asm_stat.h"
-
-#if defined MPERS_IS_m32
-# undef HAVE_STRUCT_STAT
-# undef HAVE_STRUCT_STAT_ST_MTIME_NSEC
-# ifdef HAVE_M32_STRUCT_STAT
-#  define HAVE_STRUCT_STAT 1
-#  ifdef HAVE_M32_STRUCT_STAT_ST_MTIME_NSEC
-#   define HAVE_STRUCT_STAT_ST_MTIME_NSEC 1
-#  endif /* HAVE_M32_STRUCT_STAT_ST_MTIME_NSEC */
-# endif /* HAVE_M32_STRUCT_STAT */
-#elif defined MPERS_IS_mx32
-# undef HAVE_STRUCT_STAT
-# undef HAVE_STRUCT_STAT_ST_MTIME_NSEC
-# ifdef HAVE_MX32_STRUCT_STAT
-#  define HAVE_STRUCT_STAT 1
-#  ifdef HAVE_MX32_STRUCT_STAT_ST_MTIME_NSEC
-#   define HAVE_STRUCT_STAT_ST_MTIME_NSEC 1
-#  endif /* HAVE_MX32_STRUCT_STAT_ST_MTIME_NSEC */
-# endif /* HAVE_MX32_STRUCT_STAT */
-#else /* !MPERS_IS_m32 && !MPERS_IS_mx32 */
-# define HAVE_STRUCT_STAT 1
-#endif
-
-#ifndef HAVE_STRUCT_STAT
-struct stat {};
-#endif
-
-typedef struct stat struct_stat;
-
-struct_stat mpers_target_var;
diff --git a/mpers-m32/struct_stat.h b/mpers-m32/struct_stat.h
deleted file mode 100644
index 141cb61..0000000
--- a/mpers-m32/struct_stat.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t st_dev;
-uint32_t st_ino;
-uint16_t st_mode;
-uint16_t st_nlink;
-uint16_t st_uid;
-uint16_t st_gid;
-uint32_t st_rdev;
-uint32_t st_size;
-uint32_t st_blksize;
-uint32_t st_blocks;
-uint32_t st_atime;
-uint32_t st_atime_nsec;
-uint32_t st_mtime;
-uint32_t st_mtime_nsec;
-uint32_t st_ctime;
-uint32_t st_ctime_nsec;
-uint32_t __unused4;
-uint32_t __unused5;
-} ATTRIBUTE_PACKED m32_struct_stat;
-#define MPERS_m32_struct_stat m32_struct_stat
diff --git a/mpers-m32/struct_stat64.c b/mpers-m32/struct_stat64.c
deleted file mode 100644
index 0f0480b..0000000
--- a/mpers-m32/struct_stat64.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "asm_stat.h"
-
-#if defined MPERS_IS_m32
-# undef HAVE_STRUCT_STAT64
-# undef HAVE_STRUCT_STAT64_ST_MTIME_NSEC
-# ifdef HAVE_M32_STRUCT_STAT64
-#  define HAVE_STRUCT_STAT64 1
-#  ifdef HAVE_M32_STRUCT_STAT64_ST_MTIME_NSEC
-#   define HAVE_STRUCT_STAT64_ST_MTIME_NSEC 1
-#  endif /* HAVE_M32_STRUCT_STAT64_ST_MTIME_NSEC */
-# endif /* HAVE_M32_STRUCT_STAT64 */
-#elif defined MPERS_IS_mx32
-# undef HAVE_STRUCT_STAT64
-# undef HAVE_STRUCT_STAT64_ST_MTIME_NSEC
-# ifdef HAVE_MX32_STRUCT_STAT64
-#  define HAVE_STRUCT_STAT64 1
-#  ifdef HAVE_MX32_STRUCT_STAT64_ST_MTIME_NSEC
-#   define HAVE_STRUCT_STAT64_ST_MTIME_NSEC 1
-#  endif /* HAVE_MX32_STRUCT_STAT64_ST_MTIME_NSEC */
-# endif /* HAVE_MX32_STRUCT_STAT64 */
-#endif /* MPERS_IS_m32 || MPERS_IS_mx32 */
-
-#ifndef HAVE_STRUCT_STAT64
-struct stat64 {};
-#endif
-
-typedef struct stat64 struct_stat64;
-
-struct_stat64 mpers_target_var;
diff --git a/mpers-m32/struct_stat64.h b/mpers-m32/struct_stat64.h
deleted file mode 100644
index 0730290..0000000
--- a/mpers-m32/struct_stat64.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint64_t st_dev;
-unsigned char __pad0[4];
-uint32_t __st_ino;
-uint32_t st_mode;
-uint32_t st_nlink;
-uint32_t st_uid;
-uint32_t st_gid;
-uint64_t st_rdev;
-unsigned char __pad3[4];
-int64_t st_size;
-uint32_t st_blksize;
-uint64_t st_blocks;
-uint32_t st_atime;
-uint32_t st_atime_nsec;
-uint32_t st_mtime;
-uint32_t st_mtime_nsec;
-uint32_t st_ctime;
-uint32_t st_ctime_nsec;
-uint64_t st_ino;
-} ATTRIBUTE_PACKED m32_struct_stat64;
-#define MPERS_m32_struct_stat64 m32_struct_stat64
diff --git a/mpers-m32/struct_statfs.c b/mpers-m32/struct_statfs.c
deleted file mode 100644
index 0c05890..0000000
--- a/mpers-m32/struct_statfs.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/types.h>
-#include <asm/statfs.h>
-typedef struct statfs struct_statfs;
-typedef struct statfs64 struct_statfs64;
-
-struct_statfs mpers_target_var;
diff --git a/mpers-m32/struct_statfs.h b/mpers-m32/struct_statfs.h
deleted file mode 100644
index 7685545..0000000
--- a/mpers-m32/struct_statfs.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t f_type;
-uint32_t f_bsize;
-uint32_t f_blocks;
-uint32_t f_bfree;
-uint32_t f_bavail;
-uint32_t f_files;
-uint32_t f_ffree;
-struct {
-int32_t val[2];
-} ATTRIBUTE_PACKED f_fsid;
-uint32_t f_namelen;
-uint32_t f_frsize;
-uint32_t f_flags;
-uint32_t f_spare[4];
-} ATTRIBUTE_PACKED m32_struct_statfs;
-#define MPERS_m32_struct_statfs m32_struct_statfs
diff --git a/mpers-m32/struct_statfs64.c b/mpers-m32/struct_statfs64.c
deleted file mode 100644
index 2b287cb..0000000
--- a/mpers-m32/struct_statfs64.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/types.h>
-#include <asm/statfs.h>
-typedef struct statfs struct_statfs;
-typedef struct statfs64 struct_statfs64;
-
-struct_statfs64 mpers_target_var;
diff --git a/mpers-m32/struct_statfs64.h b/mpers-m32/struct_statfs64.h
deleted file mode 100644
index 7f19207..0000000
--- a/mpers-m32/struct_statfs64.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t f_type;
-uint32_t f_bsize;
-uint64_t f_blocks;
-uint64_t f_bfree;
-uint64_t f_bavail;
-uint64_t f_files;
-uint64_t f_ffree;
-struct {
-int32_t val[2];
-} ATTRIBUTE_PACKED f_fsid;
-uint32_t f_namelen;
-uint32_t f_frsize;
-uint32_t f_flags;
-uint32_t f_spare[4];
-} ATTRIBUTE_PACKED m32_struct_statfs64;
-#define MPERS_m32_struct_statfs64 m32_struct_statfs64
diff --git a/mpers-m32/struct_timex.c b/mpers-m32/struct_timex.c
deleted file mode 100644
index bf8298f..0000000
--- a/mpers-m32/struct_timex.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <sys/timex.h>
-typedef struct timex struct_timex;
-
-struct_timex mpers_target_var;
diff --git a/mpers-m32/struct_timex.h b/mpers-m32/struct_timex.h
deleted file mode 100644
index 144259b..0000000
--- a/mpers-m32/struct_timex.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t modes;
-int32_t offset;
-int32_t freq;
-int32_t maxerror;
-int32_t esterror;
-int32_t status;
-int32_t constant;
-int32_t precision;
-int32_t tolerance;
-struct {
-int32_t tv_sec;
-int32_t tv_usec;
-} ATTRIBUTE_PACKED time;
-int32_t tick;
-int32_t ppsfreq;
-int32_t jitter;
-int32_t shift;
-int32_t stabil;
-int32_t jitcnt;
-int32_t calcnt;
-int32_t errcnt;
-int32_t stbcnt;
-int32_t tai;
-unsigned char mpers_end_filler_1[44];
-} ATTRIBUTE_PACKED m32_struct_timex;
-#define MPERS_m32_struct_timex m32_struct_timex
diff --git a/mpers-m32/struct_ustat.c b/mpers-m32/struct_ustat.c
deleted file mode 100644
index af87064..0000000
--- a/mpers-m32/struct_ustat.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-#ifdef HAVE_USTAT_H
-# include <ustat.h>
-typedef struct ustat struct_ustat;
-#endif /* HAVE_USTAT_H */
-
-struct_ustat mpers_target_var;
diff --git a/mpers-m32/struct_ustat.h b/mpers-m32/struct_ustat.h
deleted file mode 100644
index 615a4c8..0000000
--- a/mpers-m32/struct_ustat.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t f_tfree;
-uint32_t f_tinode;
-char f_fname[6];
-char f_fpack[6];
-} ATTRIBUTE_PACKED m32_struct_ustat;
-#define MPERS_m32_struct_ustat m32_struct_ustat
diff --git a/mpers-m32/struct_v4l2_buffer.c b/mpers-m32/struct_v4l2_buffer.c
deleted file mode 100644
index dd68e07..0000000
--- a/mpers-m32/struct_v4l2_buffer.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_buffer mpers_target_var;
diff --git a/mpers-m32/struct_v4l2_buffer.h b/mpers-m32/struct_v4l2_buffer.h
deleted file mode 100644
index 6da200d..0000000
--- a/mpers-m32/struct_v4l2_buffer.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t index;
-uint32_t type;
-uint32_t bytesused;
-uint32_t flags;
-uint32_t field;
-struct {
-int32_t tv_sec;
-int32_t tv_usec;
-} ATTRIBUTE_PACKED timestamp;
-struct {
-uint32_t type;
-uint32_t flags;
-unsigned char frames;
-unsigned char seconds;
-unsigned char minutes;
-unsigned char hours;
-unsigned char userbits[4];
-} ATTRIBUTE_PACKED timecode;
-uint32_t sequence;
-uint32_t memory;
-union {
-uint32_t offset;
-uint32_t userptr;
-mpers_ptr_t planes;
-int32_t fd;
-} m;
-uint32_t length;
-uint32_t reserved2;
-uint32_t reserved;
-} ATTRIBUTE_PACKED m32_struct_v4l2_buffer;
-#define MPERS_m32_struct_v4l2_buffer m32_struct_v4l2_buffer
diff --git a/mpers-m32/struct_v4l2_clip.c b/mpers-m32/struct_v4l2_clip.c
deleted file mode 100644
index cd89a04..0000000
--- a/mpers-m32/struct_v4l2_clip.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_clip mpers_target_var;
diff --git a/mpers-m32/struct_v4l2_clip.h b/mpers-m32/struct_v4l2_clip.h
deleted file mode 100644
index 4c7ab36..0000000
--- a/mpers-m32/struct_v4l2_clip.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-int32_t left;
-int32_t top;
-int32_t width;
-int32_t height;
-} ATTRIBUTE_PACKED c;
-mpers_ptr_t next;
-} ATTRIBUTE_PACKED m32_struct_v4l2_clip;
-#define MPERS_m32_struct_v4l2_clip m32_struct_v4l2_clip
diff --git a/mpers-m32/struct_v4l2_create_buffers.c b/mpers-m32/struct_v4l2_create_buffers.c
deleted file mode 100644
index 0fc1469..0000000
--- a/mpers-m32/struct_v4l2_create_buffers.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_create_buffers mpers_target_var;
diff --git a/mpers-m32/struct_v4l2_create_buffers.h b/mpers-m32/struct_v4l2_create_buffers.h
deleted file mode 100644
index 2d5380f..0000000
--- a/mpers-m32/struct_v4l2_create_buffers.h
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t index;
-uint32_t count;
-uint32_t memory;
-struct {
-uint32_t type;
-union {
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t bytesperline;
-uint32_t sizeimage;
-uint32_t colorspace;
-uint32_t priv;
-} ATTRIBUTE_PACKED pix;
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t colorspace;
-struct {
-uint32_t sizeimage;
-uint16_t bytesperline;
-uint16_t reserved[7];
-} ATTRIBUTE_PACKED plane_fmt[8];
-unsigned char num_planes;
-unsigned char reserved[11];
-} ATTRIBUTE_PACKED pix_mp;
-struct {
-struct {
-int32_t left;
-int32_t top;
-int32_t width;
-int32_t height;
-} ATTRIBUTE_PACKED w;
-uint32_t field;
-uint32_t chromakey;
-mpers_ptr_t clips;
-uint32_t clipcount;
-mpers_ptr_t bitmap;
-unsigned char global_alpha;
-unsigned char mpers_end_filler_1[3];
-} ATTRIBUTE_PACKED win;
-struct {
-uint32_t sampling_rate;
-uint32_t offset;
-uint32_t samples_per_line;
-uint32_t sample_format;
-int32_t start[2];
-uint32_t count[2];
-uint32_t flags;
-uint32_t reserved[2];
-} ATTRIBUTE_PACKED vbi;
-struct {
-uint16_t service_set;
-uint16_t service_lines[2][24];
-unsigned char mpers_filler_2[2];
-uint32_t io_size;
-uint32_t reserved[2];
-} ATTRIBUTE_PACKED sliced;
-unsigned char raw_data[200];
-} fmt;
-} ATTRIBUTE_PACKED format;
-uint32_t reserved[8];
-} ATTRIBUTE_PACKED m32_struct_v4l2_create_buffers;
-#define MPERS_m32_struct_v4l2_create_buffers m32_struct_v4l2_create_buffers
diff --git a/mpers-m32/struct_v4l2_ext_control.c b/mpers-m32/struct_v4l2_ext_control.c
deleted file mode 100644
index 2696feb..0000000
--- a/mpers-m32/struct_v4l2_ext_control.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_ext_control mpers_target_var;
diff --git a/mpers-m32/struct_v4l2_ext_control.h b/mpers-m32/struct_v4l2_ext_control.h
deleted file mode 100644
index 42a343e..0000000
--- a/mpers-m32/struct_v4l2_ext_control.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t id;
-uint32_t size;
-uint32_t reserved2[1];
-union {
-int32_t value;
-int64_t value64;
-mpers_ptr_t string;
-} ;
-} ATTRIBUTE_PACKED m32_struct_v4l2_ext_control;
-#define MPERS_m32_struct_v4l2_ext_control m32_struct_v4l2_ext_control
diff --git a/mpers-m32/struct_v4l2_ext_controls.c b/mpers-m32/struct_v4l2_ext_controls.c
deleted file mode 100644
index d89399e..0000000
--- a/mpers-m32/struct_v4l2_ext_controls.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_ext_controls mpers_target_var;
diff --git a/mpers-m32/struct_v4l2_ext_controls.h b/mpers-m32/struct_v4l2_ext_controls.h
deleted file mode 100644
index eccff72..0000000
--- a/mpers-m32/struct_v4l2_ext_controls.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t ctrl_class;
-uint32_t count;
-uint32_t error_idx;
-uint32_t reserved[2];
-mpers_ptr_t controls;
-} ATTRIBUTE_PACKED m32_struct_v4l2_ext_controls;
-#define MPERS_m32_struct_v4l2_ext_controls m32_struct_v4l2_ext_controls
diff --git a/mpers-m32/struct_v4l2_format.c b/mpers-m32/struct_v4l2_format.c
deleted file mode 100644
index 8791f9d..0000000
--- a/mpers-m32/struct_v4l2_format.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_format mpers_target_var;
diff --git a/mpers-m32/struct_v4l2_format.h b/mpers-m32/struct_v4l2_format.h
deleted file mode 100644
index bb62d39..0000000
--- a/mpers-m32/struct_v4l2_format.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t type;
-union {
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t bytesperline;
-uint32_t sizeimage;
-uint32_t colorspace;
-uint32_t priv;
-} ATTRIBUTE_PACKED pix;
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t colorspace;
-struct {
-uint32_t sizeimage;
-uint16_t bytesperline;
-uint16_t reserved[7];
-} ATTRIBUTE_PACKED plane_fmt[8];
-unsigned char num_planes;
-unsigned char reserved[11];
-} ATTRIBUTE_PACKED pix_mp;
-struct {
-struct {
-int32_t left;
-int32_t top;
-int32_t width;
-int32_t height;
-} ATTRIBUTE_PACKED w;
-uint32_t field;
-uint32_t chromakey;
-mpers_ptr_t clips;
-uint32_t clipcount;
-mpers_ptr_t bitmap;
-unsigned char global_alpha;
-unsigned char mpers_end_filler_1[3];
-} ATTRIBUTE_PACKED win;
-struct {
-uint32_t sampling_rate;
-uint32_t offset;
-uint32_t samples_per_line;
-uint32_t sample_format;
-int32_t start[2];
-uint32_t count[2];
-uint32_t flags;
-uint32_t reserved[2];
-} ATTRIBUTE_PACKED vbi;
-struct {
-uint16_t service_set;
-uint16_t service_lines[2][24];
-unsigned char mpers_filler_2[2];
-uint32_t io_size;
-uint32_t reserved[2];
-} ATTRIBUTE_PACKED sliced;
-unsigned char raw_data[200];
-} fmt;
-} ATTRIBUTE_PACKED m32_struct_v4l2_format;
-#define MPERS_m32_struct_v4l2_format m32_struct_v4l2_format
diff --git a/mpers-m32/struct_v4l2_framebuffer.c b/mpers-m32/struct_v4l2_framebuffer.c
deleted file mode 100644
index 4884034..0000000
--- a/mpers-m32/struct_v4l2_framebuffer.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_framebuffer mpers_target_var;
diff --git a/mpers-m32/struct_v4l2_framebuffer.h b/mpers-m32/struct_v4l2_framebuffer.h
deleted file mode 100644
index 3fae478..0000000
--- a/mpers-m32/struct_v4l2_framebuffer.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t capability;
-uint32_t flags;
-mpers_ptr_t base;
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t bytesperline;
-uint32_t sizeimage;
-uint32_t colorspace;
-uint32_t priv;
-} ATTRIBUTE_PACKED fmt;
-} ATTRIBUTE_PACKED m32_struct_v4l2_framebuffer;
-#define MPERS_m32_struct_v4l2_framebuffer m32_struct_v4l2_framebuffer
diff --git a/mpers-m32/struct_v4l2_input.c b/mpers-m32/struct_v4l2_input.c
deleted file mode 100644
index 850ef00..0000000
--- a/mpers-m32/struct_v4l2_input.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_input mpers_target_var;
diff --git a/mpers-m32/struct_v4l2_input.h b/mpers-m32/struct_v4l2_input.h
deleted file mode 100644
index b880ffe..0000000
--- a/mpers-m32/struct_v4l2_input.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t index;
-unsigned char name[32];
-uint32_t type;
-uint32_t audioset;
-uint32_t tuner;
-uint64_t std;
-uint32_t status;
-uint32_t capabilities;
-uint32_t reserved[3];
-} ATTRIBUTE_PACKED m32_struct_v4l2_input;
-#define MPERS_m32_struct_v4l2_input m32_struct_v4l2_input
diff --git a/mpers-m32/struct_v4l2_standard.c b/mpers-m32/struct_v4l2_standard.c
deleted file mode 100644
index 49d08d6..0000000
--- a/mpers-m32/struct_v4l2_standard.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_standard mpers_target_var;
diff --git a/mpers-m32/struct_v4l2_standard.h b/mpers-m32/struct_v4l2_standard.h
deleted file mode 100644
index 8f91ba9..0000000
--- a/mpers-m32/struct_v4l2_standard.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t index;
-uint64_t id;
-unsigned char name[24];
-struct {
-uint32_t numerator;
-uint32_t denominator;
-} ATTRIBUTE_PACKED frameperiod;
-uint32_t framelines;
-uint32_t reserved[4];
-} ATTRIBUTE_PACKED m32_struct_v4l2_standard;
-#define MPERS_m32_struct_v4l2_standard m32_struct_v4l2_standard
diff --git a/mpers-m32/sysinfo_t.c b/mpers-m32/sysinfo_t.c
deleted file mode 100644
index c34a80f..0000000
--- a/mpers-m32/sysinfo_t.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2012 H.J. Lu <hongjiu.lu@intel.com>
- * Copyright (c) 2012 Denys Vlasenko <vda.linux@googlemail.com>
- * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-#include <sys/sysinfo.h>
-typedef struct sysinfo sysinfo_t;
-sysinfo_t mpers_target_var;
diff --git a/mpers-m32/sysinfo_t.h b/mpers-m32/sysinfo_t.h
deleted file mode 100644
index f8984ea..0000000
--- a/mpers-m32/sysinfo_t.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t uptime;
-uint32_t loads[3];
-uint32_t totalram;
-uint32_t freeram;
-uint32_t sharedram;
-uint32_t bufferram;
-uint32_t totalswap;
-uint32_t freeswap;
-uint16_t procs;
-uint16_t pad;
-uint32_t totalhigh;
-uint32_t freehigh;
-uint32_t mem_unit;
-char _f[8];
-} ATTRIBUTE_PACKED m32_sysinfo_t;
-#define MPERS_m32_sysinfo_t m32_sysinfo_t
diff --git a/mpers-m32/time_t.c b/mpers-m32/time_t.c
deleted file mode 100644
index 834d93d..0000000
--- a/mpers-m32/time_t.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-time_t mpers_target_var;
diff --git a/mpers-m32/time_t.h b/mpers-m32/time_t.h
deleted file mode 100644
index d9dd1d6..0000000
--- a/mpers-m32/time_t.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-int32_t m32_time_t;
-#define MPERS_m32_time_t m32_time_t
diff --git a/mpers-m32/timespec_t.c b/mpers-m32/timespec_t.c
deleted file mode 100644
index ac6ccab..0000000
--- a/mpers-m32/timespec_t.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-typedef struct timespec timespec_t;
-
-timespec_t mpers_target_var;
diff --git a/mpers-m32/timespec_t.h b/mpers-m32/timespec_t.h
deleted file mode 100644
index 5d71eb7..0000000
--- a/mpers-m32/timespec_t.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t tv_sec;
-int32_t tv_nsec;
-} ATTRIBUTE_PACKED m32_timespec_t;
-#define MPERS_m32_timespec_t m32_timespec_t
diff --git a/mpers-m32/timeval_t.c b/mpers-m32/timeval_t.c
deleted file mode 100644
index 36574eb..0000000
--- a/mpers-m32/timeval_t.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-typedef struct timeval timeval_t;
-
-timeval_t mpers_target_var;
diff --git a/mpers-m32/timeval_t.h b/mpers-m32/timeval_t.h
deleted file mode 100644
index 89a268e..0000000
--- a/mpers-m32/timeval_t.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t tv_sec;
-int32_t tv_usec;
-} ATTRIBUTE_PACKED m32_timeval_t;
-#define MPERS_m32_timeval_t m32_timeval_t
diff --git a/mpers-m32/tms_t.c b/mpers-m32/tms_t.c
deleted file mode 100644
index b11758c..0000000
--- a/mpers-m32/tms_t.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2012 H.J. Lu <hongjiu.lu@intel.com>
- * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-#include <sys/times.h>
-typedef struct tms tms_t;
-tms_t mpers_target_var;
diff --git a/mpers-m32/tms_t.h b/mpers-m32/tms_t.h
deleted file mode 100644
index da69dd7..0000000
--- a/mpers-m32/tms_t.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t tms_utime;
-int32_t tms_stime;
-int32_t tms_cutime;
-int32_t tms_cstime;
-} ATTRIBUTE_PACKED m32_tms_t;
-#define MPERS_m32_tms_t m32_tms_t
diff --git a/mpers-m32/utimbuf_t.c b/mpers-m32/utimbuf_t.c
deleted file mode 100644
index bb8a34a..0000000
--- a/mpers-m32/utimbuf_t.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "defs.h"
-
-
-#include <utime.h>
-
-typedef struct utimbuf utimbuf_t;
-
-utimbuf_t mpers_target_var;
diff --git a/mpers-m32/utimbuf_t.h b/mpers-m32/utimbuf_t.h
deleted file mode 100644
index ff0fc87..0000000
--- a/mpers-m32/utimbuf_t.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t actime;
-int32_t modtime;
-} ATTRIBUTE_PACKED m32_utimbuf_t;
-#define MPERS_m32_utimbuf_t m32_utimbuf_t
diff --git a/mpers-mx32.stamp b/mpers-mx32.stamp
deleted file mode 100644
index e69de29..0000000
--- a/mpers-mx32.stamp
+++ /dev/null
diff --git a/mpers-mx32/kernel_dirent.c b/mpers-mx32/kernel_dirent.c
deleted file mode 100644
index 9ad17aa..0000000
--- a/mpers-mx32/kernel_dirent.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-kernel_dirent mpers_target_var;
diff --git a/mpers-mx32/kernel_dirent.h b/mpers-mx32/kernel_dirent.h
deleted file mode 100644
index 6561d8a..0000000
--- a/mpers-mx32/kernel_dirent.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint64_t d_ino;
-uint64_t d_off;
-uint16_t d_reclen;
-char d_name[1];
-unsigned char mpers_end_filler_1[5];
-} ATTRIBUTE_PACKED mx32_kernel_dirent;
-#define MPERS_mx32_kernel_dirent mx32_kernel_dirent
diff --git a/mpers-mx32/mq_attr_t.c b/mpers-mx32/mq_attr_t.c
deleted file mode 100644
index 9f0ec7a..0000000
--- a/mpers-mx32/mq_attr_t.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2004 Ulrich Drepper <drepper@redhat.com>
- * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#ifdef HAVE_MQUEUE_H
-# include <mqueue.h>
-typedef struct mq_attr mq_attr_t;
-#elif defined HAVE_LINUX_MQUEUE_H
-# include <linux/types.h>
-# include <linux/mqueue.h>
-typedef struct mq_attr mq_attr_t;
-#endif
-
-
-mq_attr_t mpers_target_var;
diff --git a/mpers-mx32/mq_attr_t.h b/mpers-mx32/mq_attr_t.h
deleted file mode 100644
index 6b3174f..0000000
--- a/mpers-mx32/mq_attr_t.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t mq_flags;
-int64_t mq_maxmsg;
-int64_t mq_msgsize;
-int64_t mq_curmsgs;
-int64_t __pad[4];
-} ATTRIBUTE_PACKED mx32_mq_attr_t;
-#define MPERS_mx32_mq_attr_t mx32_mq_attr_t
diff --git a/mpers-mx32/msgbuf_t.c b/mpers-mx32/msgbuf_t.c
deleted file mode 100644
index a345637..0000000
--- a/mpers-mx32/msgbuf_t.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2003-2006 Roland McGrath <roland@redhat.com>
- * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#include <sys/msg.h>
-
-typedef struct msgbuf msgbuf_t;
-msgbuf_t mpers_target_var;
diff --git a/mpers-mx32/msgbuf_t.h b/mpers-mx32/msgbuf_t.h
deleted file mode 100644
index cfd1d12..0000000
--- a/mpers-mx32/msgbuf_t.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t mtype;
-char mtext[1];
-unsigned char mpers_end_filler_1[7];
-} ATTRIBUTE_PACKED mx32_msgbuf_t;
-#define MPERS_mx32_msgbuf_t mx32_msgbuf_t
diff --git a/mpers-mx32/msqid_ds_t.c b/mpers-mx32/msqid_ds_t.c
deleted file mode 100644
index 2e2b96e..0000000
--- a/mpers-mx32/msqid_ds_t.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2003-2006 Roland McGrath <roland@redhat.com>
- * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "ipc_defs.h"
-
-#ifdef HAVE_SYS_MSG_H
-/* The C library generally exports the struct the current kernel expects. */
-# include <sys/msg.h>
-typedef struct msqid_ds msqid_ds_t;
-#elif defined HAVE_LINUX_MSG_H
-/* The linux header might provide the right struct. */
-# include <linux/msg.h>
-typedef struct msqid64_ds msqid_ds_t;
-#endif
-
-msqid_ds_t mpers_target_var;
diff --git a/mpers-mx32/msqid_ds_t.h b/mpers-mx32/msqid_ds_t.h
deleted file mode 100644
index 6bbd275..0000000
--- a/mpers-mx32/msqid_ds_t.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-int32_t __key;
-uint32_t uid;
-uint32_t gid;
-uint32_t cuid;
-uint32_t cgid;
-uint16_t mode;
-uint16_t __pad1;
-uint16_t __seq;
-uint16_t __pad2;
-unsigned char mpers_filler_1[4];
-uint64_t __glibc_reserved1;
-uint64_t __glibc_reserved2;
-} ATTRIBUTE_PACKED msg_perm;
-int64_t msg_stime;
-int64_t msg_rtime;
-int64_t msg_ctime;
-uint64_t __msg_cbytes;
-uint64_t msg_qnum;
-uint64_t msg_qbytes;
-int32_t msg_lspid;
-int32_t msg_lrpid;
-uint64_t __glibc_reserved4;
-uint64_t __glibc_reserved5;
-} ATTRIBUTE_PACKED mx32_msqid_ds_t;
-#define MPERS_mx32_msqid_ds_t mx32_msqid_ds_t
diff --git a/mpers-mx32/rusage_t.c b/mpers-mx32/rusage_t.c
deleted file mode 100644
index cf3c244..0000000
--- a/mpers-mx32/rusage_t.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 1999-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-#include <sys/resource.h>
-
-
-typedef struct rusage rusage_t;
-
-rusage_t mpers_target_var;
diff --git a/mpers-mx32/rusage_t.h b/mpers-mx32/rusage_t.h
deleted file mode 100644
index dd261ed..0000000
--- a/mpers-mx32/rusage_t.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-int64_t tv_sec;
-int64_t tv_usec;
-} ATTRIBUTE_PACKED ru_utime;
-struct {
-int64_t tv_sec;
-int64_t tv_usec;
-} ATTRIBUTE_PACKED ru_stime;
-union {
-int32_t ru_maxrss;
-int64_t __ru_maxrss_word;
-} ;
-union {
-int32_t ru_ixrss;
-int64_t __ru_ixrss_word;
-} ;
-union {
-int32_t ru_idrss;
-int64_t __ru_idrss_word;
-} ;
-union {
-int32_t ru_isrss;
-int64_t __ru_isrss_word;
-} ;
-union {
-int32_t ru_minflt;
-int64_t __ru_minflt_word;
-} ;
-union {
-int32_t ru_majflt;
-int64_t __ru_majflt_word;
-} ;
-union {
-int32_t ru_nswap;
-int64_t __ru_nswap_word;
-} ;
-union {
-int32_t ru_inblock;
-int64_t __ru_inblock_word;
-} ;
-union {
-int32_t ru_oublock;
-int64_t __ru_oublock_word;
-} ;
-union {
-int32_t ru_msgsnd;
-int64_t __ru_msgsnd_word;
-} ;
-union {
-int32_t ru_msgrcv;
-int64_t __ru_msgrcv_word;
-} ;
-union {
-int32_t ru_nsignals;
-int64_t __ru_nsignals_word;
-} ;
-union {
-int32_t ru_nvcsw;
-int64_t __ru_nvcsw_word;
-} ;
-union {
-int32_t ru_nivcsw;
-int64_t __ru_nivcsw_word;
-} ;
-} ATTRIBUTE_PACKED mx32_rusage_t;
-#define MPERS_mx32_rusage_t mx32_rusage_t
diff --git a/mpers-mx32/sample.c b/mpers-mx32/sample.c
deleted file mode 100644
index 1eedf1c..0000000
--- a/mpers-mx32/sample.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "mpers_type.h"
-#include DEF_MPERS_TYPE(sample_struct)
-typedef struct {
-	struct {
-		void *p;
-		char sc;
-		/* unsigned char mpers_filler_1[1]; */
-		short ss;
-		unsigned char uc;
-		/* unsigned char mpers_filler_2[3]; */
-		int si;
-		unsigned ui;
-		long sl;
-		unsigned short us;
-		/* unsigned char mpers_filler_3[6]; */
-		long long sll __attribute__((__aligned__(8)));
-		unsigned long long ull;
-		unsigned long ul;
-		long asl[3][5][7];
-		char f;
-		/* unsigned char mpers_end_filler_4[7]; */
-	} s;
-	union {
-		long long sll;
-		unsigned long long ull;
-		void *p;
-		long sl;
-		unsigned long ul;
-		int si;
-		unsigned ui;
-		short ss[7][9];
-		unsigned short us[4];
-		char sc;
-		unsigned char uc;
-	} u[3][2];
-	short f[0];
-} sample_struct;
-#include MPERS_DEFS
diff --git a/mpers-mx32/sample.expected b/mpers-mx32/sample.expected
deleted file mode 100644
index 3e6c2a5..0000000
--- a/mpers-mx32/sample.expected
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-mpers_ptr_t p;
-char sc;
-unsigned char mpers_filler_1[1];
-int16_t ss;
-unsigned char uc;
-unsigned char mpers_filler_2[3];
-int32_t si;
-uint32_t ui;
-int32_t sl;
-uint16_t us;
-unsigned char mpers_filler_3[6];
-int64_t sll;
-uint64_t ull;
-uint32_t ul;
-int32_t asl[3][5][7];
-char f;
-unsigned char mpers_end_filler_4[7];
-} ATTRIBUTE_PACKED s;
-union {
-int64_t sll;
-uint64_t ull;
-mpers_ptr_t p;
-int32_t sl;
-uint32_t ul;
-int32_t si;
-uint32_t ui;
-int16_t ss[7][9];
-uint16_t us[4];
-char sc;
-unsigned char uc;
-} u[3][2];
-int16_t f[0];
-} ATTRIBUTE_PACKED mx32_sample_struct;
-#define MPERS_mx32_sample_struct mx32_sample_struct
diff --git a/mpers-mx32/sample_struct.c b/mpers-mx32/sample_struct.c
deleted file mode 100644
index b9f6d05..0000000
--- a/mpers-mx32/sample_struct.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "mpers_type.h"
-typedef struct {
-	struct {
-		void *p;
-		char sc;
-		/* unsigned char mpers_filler_1[1]; */
-		short ss;
-		unsigned char uc;
-		/* unsigned char mpers_filler_2[3]; */
-		int si;
-		unsigned ui;
-		long sl;
-		unsigned short us;
-		/* unsigned char mpers_filler_3[6]; */
-		long long sll __attribute__((__aligned__(8)));
-		unsigned long long ull;
-		unsigned long ul;
-		long asl[3][5][7];
-		char f;
-		/* unsigned char mpers_end_filler_4[7]; */
-	} s;
-	union {
-		long long sll;
-		unsigned long long ull;
-		void *p;
-		long sl;
-		unsigned long ul;
-		int si;
-		unsigned ui;
-		short ss[7][9];
-		unsigned short us[4];
-		char sc;
-		unsigned char uc;
-	} u[3][2];
-	short f[0];
-} sample_struct;
-sample_struct mpers_target_var;
diff --git a/mpers-mx32/sample_struct.h b/mpers-mx32/sample_struct.h
deleted file mode 100644
index 3e6c2a5..0000000
--- a/mpers-mx32/sample_struct.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-mpers_ptr_t p;
-char sc;
-unsigned char mpers_filler_1[1];
-int16_t ss;
-unsigned char uc;
-unsigned char mpers_filler_2[3];
-int32_t si;
-uint32_t ui;
-int32_t sl;
-uint16_t us;
-unsigned char mpers_filler_3[6];
-int64_t sll;
-uint64_t ull;
-uint32_t ul;
-int32_t asl[3][5][7];
-char f;
-unsigned char mpers_end_filler_4[7];
-} ATTRIBUTE_PACKED s;
-union {
-int64_t sll;
-uint64_t ull;
-mpers_ptr_t p;
-int32_t sl;
-uint32_t ul;
-int32_t si;
-uint32_t ui;
-int16_t ss[7][9];
-uint16_t us[4];
-char sc;
-unsigned char uc;
-} u[3][2];
-int16_t f[0];
-} ATTRIBUTE_PACKED mx32_sample_struct;
-#define MPERS_mx32_sample_struct mx32_sample_struct
diff --git a/mpers-mx32/seccomp_fprog_t.c b/mpers-mx32/seccomp_fprog_t.c
deleted file mode 100644
index f26c70c..0000000
--- a/mpers-mx32/seccomp_fprog_t.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "seccomp_fprog.h"
-typedef struct seccomp_fprog seccomp_fprog_t;
-
-seccomp_fprog_t mpers_target_var;
diff --git a/mpers-mx32/seccomp_fprog_t.h b/mpers-mx32/seccomp_fprog_t.h
deleted file mode 100644
index 128cf86..0000000
--- a/mpers-mx32/seccomp_fprog_t.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint16_t len;
-unsigned char mpers_filler_1[2];
-uint32_t filter;
-} ATTRIBUTE_PACKED mx32_seccomp_fprog_t;
-#define MPERS_mx32_seccomp_fprog_t mx32_seccomp_fprog_t
diff --git a/mpers-mx32/shmid_ds_t.c b/mpers-mx32/shmid_ds_t.c
deleted file mode 100644
index af4a7d2..0000000
--- a/mpers-mx32/shmid_ds_t.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2003-2006 Roland McGrath <roland@redhat.com>
- * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "ipc_defs.h"
-
-#ifdef HAVE_SYS_SHM_H
-/* The C library generally exports the struct the current kernel expects. */
-# include <sys/shm.h>
-typedef struct shmid_ds shmid_ds_t;
-#elif defined HAVE_LINUX_SHM_H
-/* The linux header might provide the right struct. */
-# include <linux/shm.h>
-typedef struct shmid64_ds shmid_ds_t;
-#endif
-
-shmid_ds_t mpers_target_var;
diff --git a/mpers-mx32/shmid_ds_t.h b/mpers-mx32/shmid_ds_t.h
deleted file mode 100644
index 37489e8..0000000
--- a/mpers-mx32/shmid_ds_t.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-int32_t __key;
-uint32_t uid;
-uint32_t gid;
-uint32_t cuid;
-uint32_t cgid;
-uint16_t mode;
-uint16_t __pad1;
-uint16_t __seq;
-uint16_t __pad2;
-unsigned char mpers_filler_1[4];
-uint64_t __glibc_reserved1;
-uint64_t __glibc_reserved2;
-} ATTRIBUTE_PACKED shm_perm;
-uint32_t shm_segsz;
-unsigned char mpers_filler_2[4];
-int64_t shm_atime;
-int64_t shm_dtime;
-int64_t shm_ctime;
-int32_t shm_cpid;
-int32_t shm_lpid;
-uint64_t shm_nattch;
-uint64_t __glibc_reserved4;
-uint64_t __glibc_reserved5;
-} ATTRIBUTE_PACKED mx32_shmid_ds_t;
-#define MPERS_mx32_shmid_ds_t mx32_shmid_ds_t
diff --git a/mpers-mx32/siginfo_t.c b/mpers-mx32/siginfo_t.c
deleted file mode 100644
index fbd003c..0000000
--- a/mpers-mx32/siginfo_t.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2001 John Hughes <john@Calva.COM>
- * Copyright (c) 2013 Denys Vlasenko <vda.linux@googlemail.com>
- * Copyright (c) 2011-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <signal.h>
-#include <linux/audit.h>
-
-siginfo_t mpers_target_var;
diff --git a/mpers-mx32/siginfo_t.h b/mpers-mx32/siginfo_t.h
deleted file mode 100644
index 60df081..0000000
--- a/mpers-mx32/siginfo_t.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t si_signo;
-int32_t si_errno;
-int32_t si_code;
-union {
-int32_t _pad[29];
-struct {
-int32_t si_pid;
-uint32_t si_uid;
-} ATTRIBUTE_PACKED _kill;
-struct {
-int32_t si_tid;
-int32_t si_overrun;
-union {
-int32_t sival_int;
-mpers_ptr_t sival_ptr;
-} si_sigval;
-} ATTRIBUTE_PACKED _timer;
-struct {
-int32_t si_pid;
-uint32_t si_uid;
-union {
-int32_t sival_int;
-mpers_ptr_t sival_ptr;
-} si_sigval;
-} ATTRIBUTE_PACKED _rt;
-struct {
-int32_t si_pid;
-uint32_t si_uid;
-int32_t si_status;
-int64_t si_utime;
-int64_t si_stime;
-} ATTRIBUTE_PACKED _sigchld;
-struct {
-mpers_ptr_t si_addr;
-int16_t si_addr_lsb;
-unsigned char mpers_end_filler_1[2];
-} ATTRIBUTE_PACKED _sigfault;
-struct {
-int32_t si_band;
-int32_t si_fd;
-} ATTRIBUTE_PACKED _sigpoll;
-struct {
-mpers_ptr_t _call_addr;
-int32_t _syscall;
-uint32_t _arch;
-} ATTRIBUTE_PACKED _sigsys;
-} _sifields;
-} ATTRIBUTE_PACKED mx32_siginfo_t;
-#define MPERS_mx32_siginfo_t mx32_siginfo_t
diff --git a/mpers-mx32/stack_t.c b/mpers-mx32/stack_t.c
deleted file mode 100644
index a958819..0000000
--- a/mpers-mx32/stack_t.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <signal.h>
-
-stack_t mpers_target_var;
diff --git a/mpers-mx32/stack_t.h b/mpers-mx32/stack_t.h
deleted file mode 100644
index c9791b2..0000000
--- a/mpers-mx32/stack_t.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-mpers_ptr_t ss_sp;
-int32_t ss_flags;
-uint32_t ss_size;
-} ATTRIBUTE_PACKED mx32_stack_t;
-#define MPERS_mx32_stack_t mx32_stack_t
diff --git a/mpers-mx32/struct_blk_user_trace_setup.c b/mpers-mx32/struct_blk_user_trace_setup.c
deleted file mode 100644
index 273bae4..0000000
--- a/mpers-mx32/struct_blk_user_trace_setup.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/ioctl.h>
-#include <linux/fs.h>
-
-typedef struct {
-	int op;
-	int flags;
-	int datalen;
-	void *data;
-} struct_blkpg_ioctl_arg;
-
-#define BLKPG_DEVNAMELTH	64
-#define BLKPG_VOLNAMELTH	64
-typedef struct {
-	int64_t start;			/* starting offset in bytes */
-	int64_t length;			/* length in bytes */
-	int pno;			/* partition number */
-	char devname[BLKPG_DEVNAMELTH];	/* partition name, like sda5 or c0d1p2,
-					   to be used in kernel messages */
-	char volname[BLKPG_VOLNAMELTH];	/* volume label */
-} struct_blkpg_partition;
-
-#define BLKTRACE_BDEV_SIZE      32
-typedef struct blk_user_trace_setup {
-	char name[BLKTRACE_BDEV_SIZE];	/* output */
-	uint16_t act_mask;		/* input */
-	uint32_t buf_size;		/* input */
-	uint32_t buf_nr;		/* input */
-	uint64_t start_lba;
-	uint64_t end_lba;
-	uint32_t pid;
-} struct_blk_user_trace_setup;
-
-struct_blk_user_trace_setup mpers_target_var;
diff --git a/mpers-mx32/struct_blk_user_trace_setup.h b/mpers-mx32/struct_blk_user_trace_setup.h
deleted file mode 100644
index 63ab60b..0000000
--- a/mpers-mx32/struct_blk_user_trace_setup.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-char name[32];
-uint16_t act_mask;
-unsigned char mpers_filler_1[2];
-uint32_t buf_size;
-uint32_t buf_nr;
-unsigned char mpers_filler_2[4];
-uint64_t start_lba;
-uint64_t end_lba;
-uint32_t pid;
-unsigned char mpers_end_filler_3[4];
-} ATTRIBUTE_PACKED mx32_struct_blk_user_trace_setup;
-#define MPERS_mx32_struct_blk_user_trace_setup mx32_struct_blk_user_trace_setup
diff --git a/mpers-mx32/struct_blkpg_ioctl_arg.c b/mpers-mx32/struct_blkpg_ioctl_arg.c
deleted file mode 100644
index 46a4fa8..0000000
--- a/mpers-mx32/struct_blkpg_ioctl_arg.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/ioctl.h>
-#include <linux/fs.h>
-
-typedef struct {
-	int op;
-	int flags;
-	int datalen;
-	void *data;
-} struct_blkpg_ioctl_arg;
-
-#define BLKPG_DEVNAMELTH	64
-#define BLKPG_VOLNAMELTH	64
-typedef struct {
-	int64_t start;			/* starting offset in bytes */
-	int64_t length;			/* length in bytes */
-	int pno;			/* partition number */
-	char devname[BLKPG_DEVNAMELTH];	/* partition name, like sda5 or c0d1p2,
-					   to be used in kernel messages */
-	char volname[BLKPG_VOLNAMELTH];	/* volume label */
-} struct_blkpg_partition;
-
-#define BLKTRACE_BDEV_SIZE      32
-typedef struct blk_user_trace_setup {
-	char name[BLKTRACE_BDEV_SIZE];	/* output */
-	uint16_t act_mask;		/* input */
-	uint32_t buf_size;		/* input */
-	uint32_t buf_nr;		/* input */
-	uint64_t start_lba;
-	uint64_t end_lba;
-	uint32_t pid;
-} struct_blk_user_trace_setup;
-
-struct_blkpg_ioctl_arg mpers_target_var;
diff --git a/mpers-mx32/struct_blkpg_ioctl_arg.h b/mpers-mx32/struct_blkpg_ioctl_arg.h
deleted file mode 100644
index c5166ba..0000000
--- a/mpers-mx32/struct_blkpg_ioctl_arg.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t op;
-int32_t flags;
-int32_t datalen;
-mpers_ptr_t data;
-} ATTRIBUTE_PACKED mx32_struct_blkpg_ioctl_arg;
-#define MPERS_mx32_struct_blkpg_ioctl_arg mx32_struct_blkpg_ioctl_arg
diff --git a/mpers-mx32/struct_blkpg_partition.c b/mpers-mx32/struct_blkpg_partition.c
deleted file mode 100644
index 04a04ff..0000000
--- a/mpers-mx32/struct_blkpg_partition.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/ioctl.h>
-#include <linux/fs.h>
-
-typedef struct {
-	int op;
-	int flags;
-	int datalen;
-	void *data;
-} struct_blkpg_ioctl_arg;
-
-#define BLKPG_DEVNAMELTH	64
-#define BLKPG_VOLNAMELTH	64
-typedef struct {
-	int64_t start;			/* starting offset in bytes */
-	int64_t length;			/* length in bytes */
-	int pno;			/* partition number */
-	char devname[BLKPG_DEVNAMELTH];	/* partition name, like sda5 or c0d1p2,
-					   to be used in kernel messages */
-	char volname[BLKPG_VOLNAMELTH];	/* volume label */
-} struct_blkpg_partition;
-
-#define BLKTRACE_BDEV_SIZE      32
-typedef struct blk_user_trace_setup {
-	char name[BLKTRACE_BDEV_SIZE];	/* output */
-	uint16_t act_mask;		/* input */
-	uint32_t buf_size;		/* input */
-	uint32_t buf_nr;		/* input */
-	uint64_t start_lba;
-	uint64_t end_lba;
-	uint32_t pid;
-} struct_blk_user_trace_setup;
-
-struct_blkpg_partition mpers_target_var;
diff --git a/mpers-mx32/struct_blkpg_partition.h b/mpers-mx32/struct_blkpg_partition.h
deleted file mode 100644
index 494d8b3..0000000
--- a/mpers-mx32/struct_blkpg_partition.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t start;
-int64_t length;
-int32_t pno;
-char devname[64];
-char volname[64];
-unsigned char mpers_end_filler_1[4];
-} ATTRIBUTE_PACKED mx32_struct_blkpg_partition;
-#define MPERS_mx32_struct_blkpg_partition mx32_struct_blkpg_partition
diff --git a/mpers-mx32/struct_btrfs_ioctl_dev_replace_args.c b/mpers-mx32/struct_btrfs_ioctl_dev_replace_args.c
deleted file mode 100644
index 6caef1a..0000000
--- a/mpers-mx32/struct_btrfs_ioctl_dev_replace_args.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_BTRFS_H
-
-
-# include <linux/btrfs.h>
-
-typedef struct btrfs_ioctl_dev_replace_args
-	struct_btrfs_ioctl_dev_replace_args;
-typedef struct btrfs_ioctl_send_args
-	struct_btrfs_ioctl_send_args;
-typedef struct btrfs_ioctl_received_subvol_args
-	struct_btrfs_ioctl_received_subvol_args;
-typedef struct btrfs_ioctl_vol_args_v2
-	struct_btrfs_ioctl_vol_args_v2;
-
-#endif /* HAVE_LINUX_BTRFS_H */
-
-struct_btrfs_ioctl_dev_replace_args mpers_target_var;
diff --git a/mpers-mx32/struct_btrfs_ioctl_dev_replace_args.h b/mpers-mx32/struct_btrfs_ioctl_dev_replace_args.h
deleted file mode 100644
index b9775fe..0000000
--- a/mpers-mx32/struct_btrfs_ioctl_dev_replace_args.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint64_t cmd;
-uint64_t result;
-union {
-struct {
-uint64_t srcdevid;
-uint64_t cont_reading_from_srcdev_mode;
-unsigned char srcdev_name[1025];
-unsigned char tgtdev_name[1025];
-unsigned char mpers_end_filler_1[6];
-} ATTRIBUTE_PACKED start;
-struct {
-uint64_t replace_state;
-uint64_t progress_1000;
-uint64_t time_started;
-uint64_t time_stopped;
-uint64_t num_write_errors;
-uint64_t num_uncorrectable_read_errors;
-} ATTRIBUTE_PACKED status;
-} ;
-uint64_t spare[64];
-} ATTRIBUTE_PACKED mx32_struct_btrfs_ioctl_dev_replace_args;
-#define MPERS_mx32_struct_btrfs_ioctl_dev_replace_args mx32_struct_btrfs_ioctl_dev_replace_args
diff --git a/mpers-mx32/struct_btrfs_ioctl_received_subvol_args.c b/mpers-mx32/struct_btrfs_ioctl_received_subvol_args.c
deleted file mode 100644
index 4f54da8..0000000
--- a/mpers-mx32/struct_btrfs_ioctl_received_subvol_args.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_BTRFS_H
-
-
-# include <linux/btrfs.h>
-
-typedef struct btrfs_ioctl_dev_replace_args
-	struct_btrfs_ioctl_dev_replace_args;
-typedef struct btrfs_ioctl_send_args
-	struct_btrfs_ioctl_send_args;
-typedef struct btrfs_ioctl_received_subvol_args
-	struct_btrfs_ioctl_received_subvol_args;
-typedef struct btrfs_ioctl_vol_args_v2
-	struct_btrfs_ioctl_vol_args_v2;
-
-#endif /* HAVE_LINUX_BTRFS_H */
-
-struct_btrfs_ioctl_received_subvol_args mpers_target_var;
diff --git a/mpers-mx32/struct_btrfs_ioctl_received_subvol_args.h b/mpers-mx32/struct_btrfs_ioctl_received_subvol_args.h
deleted file mode 100644
index ec51a9b..0000000
--- a/mpers-mx32/struct_btrfs_ioctl_received_subvol_args.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-char uuid[16];
-uint64_t stransid;
-uint64_t rtransid;
-struct {
-uint64_t sec;
-uint32_t nsec;
-unsigned char mpers_end_filler_1[4];
-} ATTRIBUTE_PACKED stime;
-struct {
-uint64_t sec;
-uint32_t nsec;
-unsigned char mpers_end_filler_1[4];
-} ATTRIBUTE_PACKED rtime;
-uint64_t flags;
-uint64_t reserved[16];
-} ATTRIBUTE_PACKED mx32_struct_btrfs_ioctl_received_subvol_args;
-#define MPERS_mx32_struct_btrfs_ioctl_received_subvol_args mx32_struct_btrfs_ioctl_received_subvol_args
diff --git a/mpers-mx32/struct_btrfs_ioctl_send_args.c b/mpers-mx32/struct_btrfs_ioctl_send_args.c
deleted file mode 100644
index 0e1d924..0000000
--- a/mpers-mx32/struct_btrfs_ioctl_send_args.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_BTRFS_H
-
-
-# include <linux/btrfs.h>
-
-typedef struct btrfs_ioctl_dev_replace_args
-	struct_btrfs_ioctl_dev_replace_args;
-typedef struct btrfs_ioctl_send_args
-	struct_btrfs_ioctl_send_args;
-typedef struct btrfs_ioctl_received_subvol_args
-	struct_btrfs_ioctl_received_subvol_args;
-typedef struct btrfs_ioctl_vol_args_v2
-	struct_btrfs_ioctl_vol_args_v2;
-
-#endif /* HAVE_LINUX_BTRFS_H */
-
-struct_btrfs_ioctl_send_args mpers_target_var;
diff --git a/mpers-mx32/struct_btrfs_ioctl_send_args.h b/mpers-mx32/struct_btrfs_ioctl_send_args.h
deleted file mode 100644
index 877a42c..0000000
--- a/mpers-mx32/struct_btrfs_ioctl_send_args.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t send_fd;
-uint64_t clone_sources_count;
-mpers_ptr_t clone_sources;
-unsigned char mpers_filler_1[4];
-uint64_t parent_root;
-uint64_t flags;
-uint64_t reserved[4];
-} ATTRIBUTE_PACKED mx32_struct_btrfs_ioctl_send_args;
-#define MPERS_mx32_struct_btrfs_ioctl_send_args mx32_struct_btrfs_ioctl_send_args
diff --git a/mpers-mx32/struct_btrfs_ioctl_vol_args_v2.c b/mpers-mx32/struct_btrfs_ioctl_vol_args_v2.c
deleted file mode 100644
index 977a309..0000000
--- a/mpers-mx32/struct_btrfs_ioctl_vol_args_v2.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_BTRFS_H
-
-
-# include <linux/btrfs.h>
-
-typedef struct btrfs_ioctl_dev_replace_args
-	struct_btrfs_ioctl_dev_replace_args;
-typedef struct btrfs_ioctl_send_args
-	struct_btrfs_ioctl_send_args;
-typedef struct btrfs_ioctl_received_subvol_args
-	struct_btrfs_ioctl_received_subvol_args;
-typedef struct btrfs_ioctl_vol_args_v2
-	struct_btrfs_ioctl_vol_args_v2;
-
-#endif /* HAVE_LINUX_BTRFS_H */
-
-struct_btrfs_ioctl_vol_args_v2 mpers_target_var;
diff --git a/mpers-mx32/struct_btrfs_ioctl_vol_args_v2.h b/mpers-mx32/struct_btrfs_ioctl_vol_args_v2.h
deleted file mode 100644
index aca6029..0000000
--- a/mpers-mx32/struct_btrfs_ioctl_vol_args_v2.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t fd;
-uint64_t transid;
-uint64_t flags;
-union {
-struct {
-uint64_t size;
-mpers_ptr_t qgroup_inherit;
-unsigned char mpers_end_filler_1[4];
-} ATTRIBUTE_PACKED ;
-uint64_t unused[4];
-} ;
-char name[4040];
-} ATTRIBUTE_PACKED mx32_struct_btrfs_ioctl_vol_args_v2;
-#define MPERS_mx32_struct_btrfs_ioctl_vol_args_v2 mx32_struct_btrfs_ioctl_vol_args_v2
diff --git a/mpers-mx32/struct_ff_effect.c b/mpers-mx32/struct_ff_effect.c
deleted file mode 100644
index 6daa032..0000000
--- a/mpers-mx32/struct_ff_effect.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2015 Etienne Gemsa <etienne.gemsa@lse.epita.fr>
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_LINUX_INPUT_H
-
-
-# include <linux/ioctl.h>
-# include <linux/input.h>
-
-typedef struct ff_effect struct_ff_effect;
-
-#endif /* HAVE_LINUX_INPUT_H */
-
-struct_ff_effect mpers_target_var;
diff --git a/mpers-mx32/struct_ff_effect.h b/mpers-mx32/struct_ff_effect.h
deleted file mode 100644
index 179d66a..0000000
--- a/mpers-mx32/struct_ff_effect.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint16_t type;
-int16_t id;
-uint16_t direction;
-struct {
-uint16_t button;
-uint16_t interval;
-} ATTRIBUTE_PACKED trigger;
-struct {
-uint16_t length;
-uint16_t delay;
-} ATTRIBUTE_PACKED replay;
-unsigned char mpers_filler_1[2];
-union {
-struct {
-int16_t level;
-struct {
-uint16_t attack_length;
-uint16_t attack_level;
-uint16_t fade_length;
-uint16_t fade_level;
-} ATTRIBUTE_PACKED envelope;
-} ATTRIBUTE_PACKED constant;
-struct {
-int16_t start_level;
-int16_t end_level;
-struct {
-uint16_t attack_length;
-uint16_t attack_level;
-uint16_t fade_length;
-uint16_t fade_level;
-} ATTRIBUTE_PACKED envelope;
-} ATTRIBUTE_PACKED ramp;
-struct {
-uint16_t waveform;
-uint16_t period;
-int16_t magnitude;
-int16_t offset;
-uint16_t phase;
-struct {
-uint16_t attack_length;
-uint16_t attack_level;
-uint16_t fade_length;
-uint16_t fade_level;
-} ATTRIBUTE_PACKED envelope;
-unsigned char mpers_filler_2[2];
-uint32_t custom_len;
-mpers_ptr_t custom_data;
-} ATTRIBUTE_PACKED periodic;
-struct {
-uint16_t right_saturation;
-uint16_t left_saturation;
-int16_t right_coeff;
-int16_t left_coeff;
-uint16_t deadband;
-int16_t center;
-} ATTRIBUTE_PACKED condition[2];
-struct {
-uint16_t strong_magnitude;
-uint16_t weak_magnitude;
-} ATTRIBUTE_PACKED rumble;
-} u;
-} ATTRIBUTE_PACKED mx32_struct_ff_effect;
-#define MPERS_mx32_struct_ff_effect mx32_struct_ff_effect
diff --git a/mpers-mx32/struct_flock.c b/mpers-mx32/struct_flock.c
deleted file mode 100644
index 5aa82c9..0000000
--- a/mpers-mx32/struct_flock.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "flock.h"
-typedef struct_kernel_flock struct_flock;
-typedef struct_kernel_flock64 struct_flock64;
-
-struct_flock mpers_target_var;
diff --git a/mpers-mx32/struct_flock.h b/mpers-mx32/struct_flock.h
deleted file mode 100644
index c51f10b..0000000
--- a/mpers-mx32/struct_flock.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int16_t l_type;
-int16_t l_whence;
-unsigned char mpers_filler_1[4];
-int64_t l_start;
-int64_t l_len;
-int32_t l_pid;
-unsigned char mpers_end_filler_2[4];
-} ATTRIBUTE_PACKED mx32_struct_flock;
-#define MPERS_mx32_struct_flock mx32_struct_flock
diff --git a/mpers-mx32/struct_flock64.c b/mpers-mx32/struct_flock64.c
deleted file mode 100644
index 3535de1..0000000
--- a/mpers-mx32/struct_flock64.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "flock.h"
-typedef struct_kernel_flock struct_flock;
-typedef struct_kernel_flock64 struct_flock64;
-
-struct_flock64 mpers_target_var;
diff --git a/mpers-mx32/struct_flock64.h b/mpers-mx32/struct_flock64.h
deleted file mode 100644
index d28a6d4..0000000
--- a/mpers-mx32/struct_flock64.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int16_t l_type;
-int16_t l_whence;
-unsigned char mpers_filler_1[4];
-int64_t l_start;
-int64_t l_len;
-int32_t l_pid;
-unsigned char mpers_end_filler_2[4];
-} ATTRIBUTE_PACKED mx32_struct_flock64;
-#define MPERS_mx32_struct_flock64 mx32_struct_flock64
diff --git a/mpers-mx32/struct_hd_geometry.c b/mpers-mx32/struct_hd_geometry.c
deleted file mode 100644
index 9a78951..0000000
--- a/mpers-mx32/struct_hd_geometry.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/hdreg.h>
-
-typedef struct hd_geometry struct_hd_geometry;
-
-struct_hd_geometry mpers_target_var;
diff --git a/mpers-mx32/struct_hd_geometry.h b/mpers-mx32/struct_hd_geometry.h
deleted file mode 100644
index 039d161..0000000
--- a/mpers-mx32/struct_hd_geometry.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-unsigned char heads;
-unsigned char sectors;
-uint16_t cylinders;
-uint32_t start;
-} ATTRIBUTE_PACKED mx32_struct_hd_geometry;
-#define MPERS_mx32_struct_hd_geometry mx32_struct_hd_geometry
diff --git a/mpers-mx32/struct_ifconf.c b/mpers-mx32/struct_ifconf.c
deleted file mode 100644
index 10d0006..0000000
--- a/mpers-mx32/struct_ifconf.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#include <sys/socket.h>
-#if defined ALPHA || defined SH || defined SH64
-# include <linux/ioctl.h>
-#endif
-#include <linux/sockios.h>
-#include <arpa/inet.h>
-#include <net/if.h>
-
-
-typedef struct ifconf struct_ifconf;
-typedef struct ifreq struct_ifreq;
-
-struct_ifconf mpers_target_var;
diff --git a/mpers-mx32/struct_ifconf.h b/mpers-mx32/struct_ifconf.h
deleted file mode 100644
index a10baa8..0000000
--- a/mpers-mx32/struct_ifconf.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t ifc_len;
-union {
-mpers_ptr_t ifcu_buf;
-mpers_ptr_t ifcu_req;
-} ifc_ifcu;
-} ATTRIBUTE_PACKED mx32_struct_ifconf;
-#define MPERS_mx32_struct_ifconf mx32_struct_ifconf
diff --git a/mpers-mx32/struct_ifreq.c b/mpers-mx32/struct_ifreq.c
deleted file mode 100644
index 31f73ea..0000000
--- a/mpers-mx32/struct_ifreq.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#include <sys/socket.h>
-#if defined ALPHA || defined SH || defined SH64
-# include <linux/ioctl.h>
-#endif
-#include <linux/sockios.h>
-#include <arpa/inet.h>
-#include <net/if.h>
-
-
-typedef struct ifconf struct_ifconf;
-typedef struct ifreq struct_ifreq;
-
-struct_ifreq mpers_target_var;
diff --git a/mpers-mx32/struct_ifreq.h b/mpers-mx32/struct_ifreq.h
deleted file mode 100644
index 6aa7184..0000000
--- a/mpers-mx32/struct_ifreq.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-union {
-char ifrn_name[16];
-} ifr_ifrn;
-union {
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_addr;
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_dstaddr;
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_broadaddr;
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_netmask;
-struct {
-uint16_t sa_family;
-char sa_data[14];
-} ATTRIBUTE_PACKED ifru_hwaddr;
-int16_t ifru_flags;
-int32_t ifru_ivalue;
-int32_t ifru_mtu;
-struct {
-uint32_t mem_start;
-uint32_t mem_end;
-uint16_t base_addr;
-unsigned char irq;
-unsigned char dma;
-unsigned char port;
-unsigned char mpers_end_filler_1[3];
-} ATTRIBUTE_PACKED ifru_map;
-char ifru_slave[16];
-char ifru_newname[16];
-mpers_ptr_t ifru_data;
-} ifr_ifru;
-} ATTRIBUTE_PACKED mx32_struct_ifreq;
-#define MPERS_mx32_struct_ifreq mx32_struct_ifreq
diff --git a/mpers-mx32/struct_loop_info.c b/mpers-mx32/struct_loop_info.c
deleted file mode 100644
index a7116a1..0000000
--- a/mpers-mx32/struct_loop_info.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2012 The Chromium OS Authors.
- * Copyright (c) 2012-2017 The strace developers.
- * Written by Mike Frysinger <vapier@gentoo.org>.
- *
- * 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 <linux/ioctl.h>
-#include <linux/loop.h>
-
-typedef struct loop_info struct_loop_info;
-
-
-struct_loop_info mpers_target_var;
diff --git a/mpers-mx32/struct_loop_info.h b/mpers-mx32/struct_loop_info.h
deleted file mode 100644
index 78d7e66..0000000
--- a/mpers-mx32/struct_loop_info.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t lo_number;
-uint32_t lo_device;
-uint32_t lo_inode;
-uint32_t lo_rdevice;
-int32_t lo_offset;
-int32_t lo_encrypt_type;
-int32_t lo_encrypt_key_size;
-int32_t lo_flags;
-char lo_name[64];
-unsigned char lo_encrypt_key[32];
-uint32_t lo_init[2];
-char reserved[4];
-} ATTRIBUTE_PACKED mx32_struct_loop_info;
-#define MPERS_mx32_struct_loop_info mx32_struct_loop_info
diff --git a/mpers-mx32/struct_mmsghdr.c b/mpers-mx32/struct_mmsghdr.c
deleted file mode 100644
index 73bc165..0000000
--- a/mpers-mx32/struct_mmsghdr.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "msghdr.h"
-typedef struct mmsghdr struct_mmsghdr;
-
-struct_mmsghdr mpers_target_var;
diff --git a/mpers-mx32/struct_mmsghdr.h b/mpers-mx32/struct_mmsghdr.h
deleted file mode 100644
index 1995869..0000000
--- a/mpers-mx32/struct_mmsghdr.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-mpers_ptr_t msg_name;
-uint32_t msg_namelen;
-mpers_ptr_t msg_iov;
-uint32_t msg_iovlen;
-mpers_ptr_t msg_control;
-uint32_t msg_controllen;
-int32_t msg_flags;
-} ATTRIBUTE_PACKED msg_hdr;
-uint32_t msg_len;
-} ATTRIBUTE_PACKED mx32_struct_mmsghdr;
-#define MPERS_mx32_struct_mmsghdr mx32_struct_mmsghdr
diff --git a/mpers-mx32/struct_msghdr.c b/mpers-mx32/struct_msghdr.c
deleted file mode 100644
index 0100d76..0000000
--- a/mpers-mx32/struct_msghdr.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "msghdr.h"
-typedef struct msghdr struct_msghdr;
-
-struct_msghdr mpers_target_var;
diff --git a/mpers-mx32/struct_msghdr.h b/mpers-mx32/struct_msghdr.h
deleted file mode 100644
index d7a5330..0000000
--- a/mpers-mx32/struct_msghdr.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-mpers_ptr_t msg_name;
-uint32_t msg_namelen;
-mpers_ptr_t msg_iov;
-uint32_t msg_iovlen;
-mpers_ptr_t msg_control;
-uint32_t msg_controllen;
-int32_t msg_flags;
-} ATTRIBUTE_PACKED mx32_struct_msghdr;
-#define MPERS_mx32_struct_msghdr mx32_struct_msghdr
diff --git a/mpers-mx32/struct_mtd_oob_buf.c b/mpers-mx32/struct_mtd_oob_buf.c
deleted file mode 100644
index 48fc9ab..0000000
--- a/mpers-mx32/struct_mtd_oob_buf.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2012 Mike Frysinger <vapier@gentoo.org>
- * Copyright (c) 2012-2017 The strace developers.
- *
- * 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 <linux/ioctl.h>
-
-/* The mtd api changes quickly, so we have to keep a local copy */
-#include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
-# include "mtd-abi.h"
-#else
-# include <mtd/mtd-abi.h>
-#endif
-
-typedef struct mtd_oob_buf struct_mtd_oob_buf;
-
-struct_mtd_oob_buf mpers_target_var;
diff --git a/mpers-mx32/struct_mtd_oob_buf.h b/mpers-mx32/struct_mtd_oob_buf.h
deleted file mode 100644
index 45ee6e9..0000000
--- a/mpers-mx32/struct_mtd_oob_buf.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t start;
-uint32_t length;
-mpers_ptr_t ptr;
-} ATTRIBUTE_PACKED mx32_struct_mtd_oob_buf;
-#define MPERS_mx32_struct_mtd_oob_buf mx32_struct_mtd_oob_buf
diff --git a/mpers-mx32/struct_rt_sigframe.c b/mpers-mx32/struct_rt_sigframe.c
deleted file mode 100644
index e5a0b48..0000000
--- a/mpers-mx32/struct_rt_sigframe.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "rt_sigframe.h"
-
-struct_rt_sigframe mpers_target_var;
diff --git a/mpers-mx32/struct_rt_sigframe.h b/mpers-mx32/struct_rt_sigframe.h
deleted file mode 100644
index 5bbd4c4..0000000
--- a/mpers-mx32/struct_rt_sigframe.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint64_t pretcode;
-struct {
-uint32_t uc_flags;
-mpers_ptr_t uc_link;
-struct {
-mpers_ptr_t ss_sp;
-int32_t ss_flags;
-uint32_t ss_size;
-} ATTRIBUTE_PACKED uc_stack;
-unsigned char mpers_filler_1[4];
-struct {
-int64_t gregs[23];
-mpers_ptr_t fpregs;
-unsigned char mpers_filler_2[4];
-uint64_t __reserved1[8];
-} ATTRIBUTE_PACKED uc_mcontext;
-struct {
-uint32_t __val[32];
-} ATTRIBUTE_PACKED uc_sigmask;
-struct {
-uint16_t cwd;
-uint16_t swd;
-uint16_t ftw;
-uint16_t fop;
-uint64_t rip;
-uint64_t rdp;
-uint32_t mxcsr;
-uint32_t mxcr_mask;
-struct {
-uint16_t significand[4];
-uint16_t exponent;
-uint16_t padding[3];
-} ATTRIBUTE_PACKED _st[8];
-struct {
-uint32_t element[4];
-} ATTRIBUTE_PACKED _xmm[16];
-uint32_t padding[24];
-} ATTRIBUTE_PACKED __fpregs_mem;
-} ATTRIBUTE_PACKED uc;
-} ATTRIBUTE_PACKED mx32_struct_rt_sigframe;
-#define MPERS_mx32_struct_rt_sigframe mx32_struct_rt_sigframe
diff --git a/mpers-mx32/struct_rtc_pll_info.c b/mpers-mx32/struct_rtc_pll_info.c
deleted file mode 100644
index 1ae0b09..0000000
--- a/mpers-mx32/struct_rtc_pll_info.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2004 Ulrich Drepper <drepper@redhat.com>
- * Copyright (c) 2004-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/ioctl.h>
-#include <linux/rtc.h>
-
-typedef struct rtc_pll_info struct_rtc_pll_info;
-
-struct_rtc_pll_info mpers_target_var;
diff --git a/mpers-mx32/struct_rtc_pll_info.h b/mpers-mx32/struct_rtc_pll_info.h
deleted file mode 100644
index 5e27645..0000000
--- a/mpers-mx32/struct_rtc_pll_info.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t pll_ctrl;
-int32_t pll_value;
-int32_t pll_max;
-int32_t pll_min;
-int32_t pll_posmult;
-int32_t pll_negmult;
-int32_t pll_clock;
-} ATTRIBUTE_PACKED mx32_struct_rtc_pll_info;
-#define MPERS_mx32_struct_rtc_pll_info mx32_struct_rtc_pll_info
diff --git a/mpers-mx32/struct_sg_io_hdr.c b/mpers-mx32/struct_sg_io_hdr.c
deleted file mode 100644
index 3858182..0000000
--- a/mpers-mx32/struct_sg_io_hdr.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2007 Vladimir Nadvornik <nadvornik@suse.cz>
- * Copyright (c) 2007-2017 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015 Bart Van Assche <bart.vanassche@sandisk.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_SCSI_SG_H
-
-
-# include <scsi/sg.h>
-
-typedef struct sg_io_hdr struct_sg_io_hdr;
-
-#endif /* HAVE_SCSI_SG_H */
-
-struct_sg_io_hdr mpers_target_var;
diff --git a/mpers-mx32/struct_sg_io_hdr.h b/mpers-mx32/struct_sg_io_hdr.h
deleted file mode 100644
index afb981e..0000000
--- a/mpers-mx32/struct_sg_io_hdr.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t interface_id;
-int32_t dxfer_direction;
-unsigned char cmd_len;
-unsigned char mx_sb_len;
-uint16_t iovec_count;
-uint32_t dxfer_len;
-mpers_ptr_t dxferp;
-mpers_ptr_t cmdp;
-mpers_ptr_t sbp;
-uint32_t timeout;
-uint32_t flags;
-int32_t pack_id;
-mpers_ptr_t usr_ptr;
-unsigned char status;
-unsigned char masked_status;
-unsigned char msg_status;
-unsigned char sb_len_wr;
-uint16_t host_status;
-uint16_t driver_status;
-int32_t resid;
-uint32_t duration;
-uint32_t info;
-} ATTRIBUTE_PACKED mx32_struct_sg_io_hdr;
-#define MPERS_mx32_struct_sg_io_hdr mx32_struct_sg_io_hdr
diff --git a/mpers-mx32/struct_sg_req_info.c b/mpers-mx32/struct_sg_req_info.c
deleted file mode 100644
index 26bddb3..0000000
--- a/mpers-mx32/struct_sg_req_info.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Decode struct sg_req_info.
- *
- * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#ifdef HAVE_SCSI_SG_H
-
-
-# include <scsi/sg.h>
-
-typedef struct sg_req_info struct_sg_req_info;
-
-#endif /* HAVE_SCSI_SG_H */
-
-struct_sg_req_info mpers_target_var;
diff --git a/mpers-mx32/struct_sg_req_info.h b/mpers-mx32/struct_sg_req_info.h
deleted file mode 100644
index 78846a4..0000000
--- a/mpers-mx32/struct_sg_req_info.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-char req_state;
-char orphan;
-char sg_io_owned;
-char problem;
-int32_t pack_id;
-mpers_ptr_t usr_ptr;
-uint32_t duration;
-int32_t unused;
-} ATTRIBUTE_PACKED mx32_struct_sg_req_info;
-#define MPERS_mx32_struct_sg_req_info mx32_struct_sg_req_info
diff --git a/mpers-mx32/struct_sigevent.c b/mpers-mx32/struct_sigevent.c
deleted file mode 100644
index e5294a2..0000000
--- a/mpers-mx32/struct_sigevent.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2003, 2004 Ulrich Drepper <drepper@redhat.com>
- * Copyright (c) 2005-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-#include "sigevent.h"
-struct_sigevent mpers_target_var;
diff --git a/mpers-mx32/struct_sigevent.h b/mpers-mx32/struct_sigevent.h
deleted file mode 100644
index 09bbb8a..0000000
--- a/mpers-mx32/struct_sigevent.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-union {
-int32_t sival_int;
-uint32_t sival_ptr;
-} sigev_value;
-int32_t sigev_signo;
-int32_t sigev_notify;
-union {
-int32_t tid;
-struct {
-uint32_t function;
-uint32_t attribute;
-} ATTRIBUTE_PACKED sigev_thread;
-} sigev_un;
-} ATTRIBUTE_PACKED mx32_struct_sigevent;
-#define MPERS_mx32_struct_sigevent mx32_struct_sigevent
diff --git a/mpers-mx32/struct_stat.c b/mpers-mx32/struct_stat.c
deleted file mode 100644
index e10cfd9..0000000
--- a/mpers-mx32/struct_stat.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "asm_stat.h"
-
-#if defined MPERS_IS_m32
-# undef HAVE_STRUCT_STAT
-# undef HAVE_STRUCT_STAT_ST_MTIME_NSEC
-# ifdef HAVE_M32_STRUCT_STAT
-#  define HAVE_STRUCT_STAT 1
-#  ifdef HAVE_M32_STRUCT_STAT_ST_MTIME_NSEC
-#   define HAVE_STRUCT_STAT_ST_MTIME_NSEC 1
-#  endif /* HAVE_M32_STRUCT_STAT_ST_MTIME_NSEC */
-# endif /* HAVE_M32_STRUCT_STAT */
-#elif defined MPERS_IS_mx32
-# undef HAVE_STRUCT_STAT
-# undef HAVE_STRUCT_STAT_ST_MTIME_NSEC
-# ifdef HAVE_MX32_STRUCT_STAT
-#  define HAVE_STRUCT_STAT 1
-#  ifdef HAVE_MX32_STRUCT_STAT_ST_MTIME_NSEC
-#   define HAVE_STRUCT_STAT_ST_MTIME_NSEC 1
-#  endif /* HAVE_MX32_STRUCT_STAT_ST_MTIME_NSEC */
-# endif /* HAVE_MX32_STRUCT_STAT */
-#else /* !MPERS_IS_m32 && !MPERS_IS_mx32 */
-# define HAVE_STRUCT_STAT 1
-#endif
-
-#ifndef HAVE_STRUCT_STAT
-struct stat {};
-#endif
-
-typedef struct stat struct_stat;
-
-struct_stat mpers_target_var;
diff --git a/mpers-mx32/struct_stat.h b/mpers-mx32/struct_stat.h
deleted file mode 100644
index b06adb3..0000000
--- a/mpers-mx32/struct_stat.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint64_t st_dev;
-uint64_t st_ino;
-uint64_t st_nlink;
-uint32_t st_mode;
-uint32_t st_uid;
-uint32_t st_gid;
-uint32_t pad0__;
-uint64_t st_rdev;
-int64_t st_size;
-int64_t st_blksize;
-int64_t st_blocks;
-uint64_t st_atime;
-uint64_t st_atime_nsec;
-uint64_t st_mtime;
-uint64_t st_mtime_nsec;
-uint64_t st_ctime;
-uint64_t st_ctime_nsec;
-int64_t pad1__[3];
-} ATTRIBUTE_PACKED mx32_struct_stat;
-#define MPERS_mx32_struct_stat mx32_struct_stat
diff --git a/mpers-mx32/struct_stat64.c b/mpers-mx32/struct_stat64.c
deleted file mode 100644
index 0f0480b..0000000
--- a/mpers-mx32/struct_stat64.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include "asm_stat.h"
-
-#if defined MPERS_IS_m32
-# undef HAVE_STRUCT_STAT64
-# undef HAVE_STRUCT_STAT64_ST_MTIME_NSEC
-# ifdef HAVE_M32_STRUCT_STAT64
-#  define HAVE_STRUCT_STAT64 1
-#  ifdef HAVE_M32_STRUCT_STAT64_ST_MTIME_NSEC
-#   define HAVE_STRUCT_STAT64_ST_MTIME_NSEC 1
-#  endif /* HAVE_M32_STRUCT_STAT64_ST_MTIME_NSEC */
-# endif /* HAVE_M32_STRUCT_STAT64 */
-#elif defined MPERS_IS_mx32
-# undef HAVE_STRUCT_STAT64
-# undef HAVE_STRUCT_STAT64_ST_MTIME_NSEC
-# ifdef HAVE_MX32_STRUCT_STAT64
-#  define HAVE_STRUCT_STAT64 1
-#  ifdef HAVE_MX32_STRUCT_STAT64_ST_MTIME_NSEC
-#   define HAVE_STRUCT_STAT64_ST_MTIME_NSEC 1
-#  endif /* HAVE_MX32_STRUCT_STAT64_ST_MTIME_NSEC */
-# endif /* HAVE_MX32_STRUCT_STAT64 */
-#endif /* MPERS_IS_m32 || MPERS_IS_mx32 */
-
-#ifndef HAVE_STRUCT_STAT64
-struct stat64 {};
-#endif
-
-typedef struct stat64 struct_stat64;
-
-struct_stat64 mpers_target_var;
diff --git a/mpers-mx32/struct_stat64.h b/mpers-mx32/struct_stat64.h
deleted file mode 100644
index 645de64..0000000
--- a/mpers-mx32/struct_stat64.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-} ATTRIBUTE_PACKED mx32_struct_stat64;
-#define MPERS_mx32_struct_stat64 mx32_struct_stat64
diff --git a/mpers-mx32/struct_statfs.c b/mpers-mx32/struct_statfs.c
deleted file mode 100644
index 0c05890..0000000
--- a/mpers-mx32/struct_statfs.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/types.h>
-#include <asm/statfs.h>
-typedef struct statfs struct_statfs;
-typedef struct statfs64 struct_statfs64;
-
-struct_statfs mpers_target_var;
diff --git a/mpers-mx32/struct_statfs.h b/mpers-mx32/struct_statfs.h
deleted file mode 100644
index 45f2ddd..0000000
--- a/mpers-mx32/struct_statfs.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t f_type;
-int32_t f_bsize;
-int32_t f_blocks;
-int32_t f_bfree;
-int32_t f_bavail;
-int32_t f_files;
-int32_t f_ffree;
-struct {
-int32_t val[2];
-} ATTRIBUTE_PACKED f_fsid;
-int32_t f_namelen;
-int32_t f_frsize;
-int32_t f_flags;
-int32_t f_spare[4];
-} ATTRIBUTE_PACKED mx32_struct_statfs;
-#define MPERS_mx32_struct_statfs mx32_struct_statfs
diff --git a/mpers-mx32/struct_statfs64.c b/mpers-mx32/struct_statfs64.c
deleted file mode 100644
index 2b287cb..0000000
--- a/mpers-mx32/struct_statfs64.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <linux/types.h>
-#include <asm/statfs.h>
-typedef struct statfs struct_statfs;
-typedef struct statfs64 struct_statfs64;
-
-struct_statfs64 mpers_target_var;
diff --git a/mpers-mx32/struct_statfs64.h b/mpers-mx32/struct_statfs64.h
deleted file mode 100644
index 338d4f4..0000000
--- a/mpers-mx32/struct_statfs64.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t f_type;
-int32_t f_bsize;
-uint64_t f_blocks;
-uint64_t f_bfree;
-uint64_t f_bavail;
-uint64_t f_files;
-uint64_t f_ffree;
-struct {
-int32_t val[2];
-} ATTRIBUTE_PACKED f_fsid;
-int32_t f_namelen;
-int32_t f_frsize;
-int32_t f_flags;
-int32_t f_spare[4];
-unsigned char mpers_end_filler_1[4];
-} ATTRIBUTE_PACKED mx32_struct_statfs64;
-#define MPERS_mx32_struct_statfs64 mx32_struct_statfs64
diff --git a/mpers-mx32/struct_timex.c b/mpers-mx32/struct_timex.c
deleted file mode 100644
index bf8298f..0000000
--- a/mpers-mx32/struct_timex.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <sys/timex.h>
-typedef struct timex struct_timex;
-
-struct_timex mpers_target_var;
diff --git a/mpers-mx32/struct_timex.h b/mpers-mx32/struct_timex.h
deleted file mode 100644
index c620296..0000000
--- a/mpers-mx32/struct_timex.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t modes;
-unsigned char mpers_filler_1[4];
-int64_t offset;
-int64_t freq;
-int64_t maxerror;
-int64_t esterror;
-int32_t status;
-unsigned char mpers_filler_2[4];
-int64_t constant;
-int64_t precision;
-int64_t tolerance;
-struct {
-int64_t tv_sec;
-int64_t tv_usec;
-} ATTRIBUTE_PACKED time;
-int64_t tick;
-int64_t ppsfreq;
-int64_t jitter;
-int32_t shift;
-unsigned char mpers_filler_3[4];
-int64_t stabil;
-int64_t jitcnt;
-int64_t calcnt;
-int64_t errcnt;
-int64_t stbcnt;
-int32_t tai;
-unsigned char mpers_end_filler_4[44];
-} ATTRIBUTE_PACKED mx32_struct_timex;
-#define MPERS_mx32_struct_timex mx32_struct_timex
diff --git a/mpers-mx32/struct_ustat.c b/mpers-mx32/struct_ustat.c
deleted file mode 100644
index af87064..0000000
--- a/mpers-mx32/struct_ustat.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-#ifdef HAVE_USTAT_H
-# include <ustat.h>
-typedef struct ustat struct_ustat;
-#endif /* HAVE_USTAT_H */
-
-struct_ustat mpers_target_var;
diff --git a/mpers-mx32/struct_ustat.h b/mpers-mx32/struct_ustat.h
deleted file mode 100644
index 30e675d..0000000
--- a/mpers-mx32/struct_ustat.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int32_t f_tfree;
-unsigned char mpers_filler_1[4];
-uint64_t f_tinode;
-char f_fname[6];
-char f_fpack[6];
-unsigned char mpers_end_filler_2[4];
-} ATTRIBUTE_PACKED mx32_struct_ustat;
-#define MPERS_mx32_struct_ustat mx32_struct_ustat
diff --git a/mpers-mx32/struct_v4l2_buffer.c b/mpers-mx32/struct_v4l2_buffer.c
deleted file mode 100644
index dd68e07..0000000
--- a/mpers-mx32/struct_v4l2_buffer.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_buffer mpers_target_var;
diff --git a/mpers-mx32/struct_v4l2_buffer.h b/mpers-mx32/struct_v4l2_buffer.h
deleted file mode 100644
index 0a71b32..0000000
--- a/mpers-mx32/struct_v4l2_buffer.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t index;
-uint32_t type;
-uint32_t bytesused;
-uint32_t flags;
-uint32_t field;
-unsigned char mpers_filler_1[4];
-struct {
-int64_t tv_sec;
-int64_t tv_usec;
-} ATTRIBUTE_PACKED timestamp;
-struct {
-uint32_t type;
-uint32_t flags;
-unsigned char frames;
-unsigned char seconds;
-unsigned char minutes;
-unsigned char hours;
-unsigned char userbits[4];
-} ATTRIBUTE_PACKED timecode;
-uint32_t sequence;
-uint32_t memory;
-union {
-uint32_t offset;
-uint32_t userptr;
-mpers_ptr_t planes;
-int32_t fd;
-} m;
-uint32_t length;
-uint32_t reserved2;
-uint32_t reserved;
-} ATTRIBUTE_PACKED mx32_struct_v4l2_buffer;
-#define MPERS_mx32_struct_v4l2_buffer mx32_struct_v4l2_buffer
diff --git a/mpers-mx32/struct_v4l2_clip.c b/mpers-mx32/struct_v4l2_clip.c
deleted file mode 100644
index cd89a04..0000000
--- a/mpers-mx32/struct_v4l2_clip.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_clip mpers_target_var;
diff --git a/mpers-mx32/struct_v4l2_clip.h b/mpers-mx32/struct_v4l2_clip.h
deleted file mode 100644
index 10a4b64..0000000
--- a/mpers-mx32/struct_v4l2_clip.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-struct {
-int32_t left;
-int32_t top;
-int32_t width;
-int32_t height;
-} ATTRIBUTE_PACKED c;
-mpers_ptr_t next;
-} ATTRIBUTE_PACKED mx32_struct_v4l2_clip;
-#define MPERS_mx32_struct_v4l2_clip mx32_struct_v4l2_clip
diff --git a/mpers-mx32/struct_v4l2_create_buffers.c b/mpers-mx32/struct_v4l2_create_buffers.c
deleted file mode 100644
index 0fc1469..0000000
--- a/mpers-mx32/struct_v4l2_create_buffers.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_create_buffers mpers_target_var;
diff --git a/mpers-mx32/struct_v4l2_create_buffers.h b/mpers-mx32/struct_v4l2_create_buffers.h
deleted file mode 100644
index 7c0b20e..0000000
--- a/mpers-mx32/struct_v4l2_create_buffers.h
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t index;
-uint32_t count;
-uint32_t memory;
-struct {
-uint32_t type;
-union {
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t bytesperline;
-uint32_t sizeimage;
-uint32_t colorspace;
-uint32_t priv;
-} ATTRIBUTE_PACKED pix;
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t colorspace;
-struct {
-uint32_t sizeimage;
-uint16_t bytesperline;
-uint16_t reserved[7];
-} ATTRIBUTE_PACKED plane_fmt[8];
-unsigned char num_planes;
-unsigned char reserved[11];
-} ATTRIBUTE_PACKED pix_mp;
-struct {
-struct {
-int32_t left;
-int32_t top;
-int32_t width;
-int32_t height;
-} ATTRIBUTE_PACKED w;
-uint32_t field;
-uint32_t chromakey;
-mpers_ptr_t clips;
-uint32_t clipcount;
-mpers_ptr_t bitmap;
-unsigned char global_alpha;
-unsigned char mpers_end_filler_1[3];
-} ATTRIBUTE_PACKED win;
-struct {
-uint32_t sampling_rate;
-uint32_t offset;
-uint32_t samples_per_line;
-uint32_t sample_format;
-int32_t start[2];
-uint32_t count[2];
-uint32_t flags;
-uint32_t reserved[2];
-} ATTRIBUTE_PACKED vbi;
-struct {
-uint16_t service_set;
-uint16_t service_lines[2][24];
-unsigned char mpers_filler_2[2];
-uint32_t io_size;
-uint32_t reserved[2];
-} ATTRIBUTE_PACKED sliced;
-unsigned char raw_data[200];
-} fmt;
-} ATTRIBUTE_PACKED format;
-uint32_t reserved[8];
-} ATTRIBUTE_PACKED mx32_struct_v4l2_create_buffers;
-#define MPERS_mx32_struct_v4l2_create_buffers mx32_struct_v4l2_create_buffers
diff --git a/mpers-mx32/struct_v4l2_ext_control.c b/mpers-mx32/struct_v4l2_ext_control.c
deleted file mode 100644
index 2696feb..0000000
--- a/mpers-mx32/struct_v4l2_ext_control.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_ext_control mpers_target_var;
diff --git a/mpers-mx32/struct_v4l2_ext_control.h b/mpers-mx32/struct_v4l2_ext_control.h
deleted file mode 100644
index 8316c9a..0000000
--- a/mpers-mx32/struct_v4l2_ext_control.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t id;
-uint32_t size;
-uint32_t reserved2[1];
-union {
-int32_t value;
-int64_t value64;
-mpers_ptr_t string;
-} ;
-} ATTRIBUTE_PACKED mx32_struct_v4l2_ext_control;
-#define MPERS_mx32_struct_v4l2_ext_control mx32_struct_v4l2_ext_control
diff --git a/mpers-mx32/struct_v4l2_ext_controls.c b/mpers-mx32/struct_v4l2_ext_controls.c
deleted file mode 100644
index d89399e..0000000
--- a/mpers-mx32/struct_v4l2_ext_controls.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_ext_controls mpers_target_var;
diff --git a/mpers-mx32/struct_v4l2_ext_controls.h b/mpers-mx32/struct_v4l2_ext_controls.h
deleted file mode 100644
index 7d6a22e..0000000
--- a/mpers-mx32/struct_v4l2_ext_controls.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t ctrl_class;
-uint32_t count;
-uint32_t error_idx;
-uint32_t reserved[2];
-mpers_ptr_t controls;
-} ATTRIBUTE_PACKED mx32_struct_v4l2_ext_controls;
-#define MPERS_mx32_struct_v4l2_ext_controls mx32_struct_v4l2_ext_controls
diff --git a/mpers-mx32/struct_v4l2_format.c b/mpers-mx32/struct_v4l2_format.c
deleted file mode 100644
index 8791f9d..0000000
--- a/mpers-mx32/struct_v4l2_format.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_format mpers_target_var;
diff --git a/mpers-mx32/struct_v4l2_format.h b/mpers-mx32/struct_v4l2_format.h
deleted file mode 100644
index 673e95a..0000000
--- a/mpers-mx32/struct_v4l2_format.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t type;
-union {
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t bytesperline;
-uint32_t sizeimage;
-uint32_t colorspace;
-uint32_t priv;
-} ATTRIBUTE_PACKED pix;
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t colorspace;
-struct {
-uint32_t sizeimage;
-uint16_t bytesperline;
-uint16_t reserved[7];
-} ATTRIBUTE_PACKED plane_fmt[8];
-unsigned char num_planes;
-unsigned char reserved[11];
-} ATTRIBUTE_PACKED pix_mp;
-struct {
-struct {
-int32_t left;
-int32_t top;
-int32_t width;
-int32_t height;
-} ATTRIBUTE_PACKED w;
-uint32_t field;
-uint32_t chromakey;
-mpers_ptr_t clips;
-uint32_t clipcount;
-mpers_ptr_t bitmap;
-unsigned char global_alpha;
-unsigned char mpers_end_filler_1[3];
-} ATTRIBUTE_PACKED win;
-struct {
-uint32_t sampling_rate;
-uint32_t offset;
-uint32_t samples_per_line;
-uint32_t sample_format;
-int32_t start[2];
-uint32_t count[2];
-uint32_t flags;
-uint32_t reserved[2];
-} ATTRIBUTE_PACKED vbi;
-struct {
-uint16_t service_set;
-uint16_t service_lines[2][24];
-unsigned char mpers_filler_2[2];
-uint32_t io_size;
-uint32_t reserved[2];
-} ATTRIBUTE_PACKED sliced;
-unsigned char raw_data[200];
-} fmt;
-} ATTRIBUTE_PACKED mx32_struct_v4l2_format;
-#define MPERS_mx32_struct_v4l2_format mx32_struct_v4l2_format
diff --git a/mpers-mx32/struct_v4l2_framebuffer.c b/mpers-mx32/struct_v4l2_framebuffer.c
deleted file mode 100644
index 4884034..0000000
--- a/mpers-mx32/struct_v4l2_framebuffer.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_framebuffer mpers_target_var;
diff --git a/mpers-mx32/struct_v4l2_framebuffer.h b/mpers-mx32/struct_v4l2_framebuffer.h
deleted file mode 100644
index 780777e..0000000
--- a/mpers-mx32/struct_v4l2_framebuffer.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t capability;
-uint32_t flags;
-mpers_ptr_t base;
-struct {
-uint32_t width;
-uint32_t height;
-uint32_t pixelformat;
-uint32_t field;
-uint32_t bytesperline;
-uint32_t sizeimage;
-uint32_t colorspace;
-uint32_t priv;
-} ATTRIBUTE_PACKED fmt;
-} ATTRIBUTE_PACKED mx32_struct_v4l2_framebuffer;
-#define MPERS_mx32_struct_v4l2_framebuffer mx32_struct_v4l2_framebuffer
diff --git a/mpers-mx32/struct_v4l2_input.c b/mpers-mx32/struct_v4l2_input.c
deleted file mode 100644
index 850ef00..0000000
--- a/mpers-mx32/struct_v4l2_input.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_input mpers_target_var;
diff --git a/mpers-mx32/struct_v4l2_input.h b/mpers-mx32/struct_v4l2_input.h
deleted file mode 100644
index d5d3121..0000000
--- a/mpers-mx32/struct_v4l2_input.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t index;
-unsigned char name[32];
-uint32_t type;
-uint32_t audioset;
-uint32_t tuner;
-uint64_t std;
-uint32_t status;
-uint32_t capabilities;
-uint32_t reserved[3];
-unsigned char mpers_end_filler_1[4];
-} ATTRIBUTE_PACKED mx32_struct_v4l2_input;
-#define MPERS_mx32_struct_v4l2_input mx32_struct_v4l2_input
diff --git a/mpers-mx32/struct_v4l2_standard.c b/mpers-mx32/struct_v4l2_standard.c
deleted file mode 100644
index 49d08d6..0000000
--- a/mpers-mx32/struct_v4l2_standard.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be>
- * Copyright (c) 2014 William Manley <will@williammanley.net>
- * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-#include <stdint.h>
-#include <linux/ioctl.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-typedef struct v4l2_buffer struct_v4l2_buffer;
-typedef struct v4l2_clip struct_v4l2_clip;
-typedef struct v4l2_create_buffers struct_v4l2_create_buffers;
-typedef struct v4l2_ext_control struct_v4l2_ext_control;
-typedef struct v4l2_ext_controls struct_v4l2_ext_controls;
-typedef struct v4l2_format struct_v4l2_format;
-typedef struct v4l2_framebuffer struct_v4l2_framebuffer;
-typedef struct v4l2_input struct_v4l2_input;
-typedef struct v4l2_standard struct_v4l2_standard;
-
-struct_v4l2_standard mpers_target_var;
diff --git a/mpers-mx32/struct_v4l2_standard.h b/mpers-mx32/struct_v4l2_standard.h
deleted file mode 100644
index abfe5ad..0000000
--- a/mpers-mx32/struct_v4l2_standard.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-uint32_t index;
-unsigned char mpers_filler_1[4];
-uint64_t id;
-unsigned char name[24];
-struct {
-uint32_t numerator;
-uint32_t denominator;
-} ATTRIBUTE_PACKED frameperiod;
-uint32_t framelines;
-uint32_t reserved[4];
-unsigned char mpers_end_filler_2[4];
-} ATTRIBUTE_PACKED mx32_struct_v4l2_standard;
-#define MPERS_mx32_struct_v4l2_standard mx32_struct_v4l2_standard
diff --git a/mpers-mx32/sysinfo_t.c b/mpers-mx32/sysinfo_t.c
deleted file mode 100644
index c34a80f..0000000
--- a/mpers-mx32/sysinfo_t.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2012 H.J. Lu <hongjiu.lu@intel.com>
- * Copyright (c) 2012 Denys Vlasenko <vda.linux@googlemail.com>
- * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
- * Copyright (c) 2014-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-#include <sys/sysinfo.h>
-typedef struct sysinfo sysinfo_t;
-sysinfo_t mpers_target_var;
diff --git a/mpers-mx32/sysinfo_t.h b/mpers-mx32/sysinfo_t.h
deleted file mode 100644
index 1560406..0000000
--- a/mpers-mx32/sysinfo_t.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t uptime;
-uint64_t loads[3];
-uint64_t totalram;
-uint64_t freeram;
-uint64_t sharedram;
-uint64_t bufferram;
-uint64_t totalswap;
-uint64_t freeswap;
-uint16_t procs;
-uint16_t pad;
-unsigned char mpers_filler_1[4];
-uint64_t totalhigh;
-uint64_t freehigh;
-uint32_t mem_unit;
-char _f[0];
-unsigned char mpers_end_filler_2[4];
-} ATTRIBUTE_PACKED mx32_sysinfo_t;
-#define MPERS_mx32_sysinfo_t mx32_sysinfo_t
diff --git a/mpers-mx32/time_t.c b/mpers-mx32/time_t.c
deleted file mode 100644
index 834d93d..0000000
--- a/mpers-mx32/time_t.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-time_t mpers_target_var;
diff --git a/mpers-mx32/time_t.h b/mpers-mx32/time_t.h
deleted file mode 100644
index ac7ad26..0000000
--- a/mpers-mx32/time_t.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-int64_t mx32_time_t;
-#define MPERS_mx32_time_t mx32_time_t
diff --git a/mpers-mx32/timespec_t.c b/mpers-mx32/timespec_t.c
deleted file mode 100644
index ac6ccab..0000000
--- a/mpers-mx32/timespec_t.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-typedef struct timespec timespec_t;
-
-timespec_t mpers_target_var;
diff --git a/mpers-mx32/timespec_t.h b/mpers-mx32/timespec_t.h
deleted file mode 100644
index 6bb8363..0000000
--- a/mpers-mx32/timespec_t.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t tv_sec;
-int64_t tv_nsec;
-} ATTRIBUTE_PACKED mx32_timespec_t;
-#define MPERS_mx32_timespec_t mx32_timespec_t
diff --git a/mpers-mx32/timeval_t.c b/mpers-mx32/timeval_t.c
deleted file mode 100644
index 36574eb..0000000
--- a/mpers-mx32/timeval_t.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-
-
-typedef struct timeval timeval_t;
-
-timeval_t mpers_target_var;
diff --git a/mpers-mx32/timeval_t.h b/mpers-mx32/timeval_t.h
deleted file mode 100644
index d0e4845..0000000
--- a/mpers-mx32/timeval_t.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t tv_sec;
-int64_t tv_usec;
-} ATTRIBUTE_PACKED mx32_timeval_t;
-#define MPERS_mx32_timeval_t mx32_timeval_t
diff --git a/mpers-mx32/tms_t.c b/mpers-mx32/tms_t.c
deleted file mode 100644
index b11758c..0000000
--- a/mpers-mx32/tms_t.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
- * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
- * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
- * Copyright (c) 2012 H.J. Lu <hongjiu.lu@intel.com>
- * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-#include <sys/times.h>
-typedef struct tms tms_t;
-tms_t mpers_target_var;
diff --git a/mpers-mx32/tms_t.h b/mpers-mx32/tms_t.h
deleted file mode 100644
index c1a9ff7..0000000
--- a/mpers-mx32/tms_t.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t tms_utime;
-int64_t tms_stime;
-int64_t tms_cutime;
-int64_t tms_cstime;
-} ATTRIBUTE_PACKED mx32_tms_t;
-#define MPERS_mx32_tms_t mx32_tms_t
diff --git a/mpers-mx32/utimbuf_t.c b/mpers-mx32/utimbuf_t.c
deleted file mode 100644
index bb8a34a..0000000
--- a/mpers-mx32/utimbuf_t.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "defs.h"
-
-
-#include <utime.h>
-
-typedef struct utimbuf utimbuf_t;
-
-utimbuf_t mpers_target_var;
diff --git a/mpers-mx32/utimbuf_t.h b/mpers-mx32/utimbuf_t.h
deleted file mode 100644
index 6c48cc8..0000000
--- a/mpers-mx32/utimbuf_t.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <inttypes.h>
-typedef uint32_t mpers_ptr_t;
-typedef
-struct {
-int64_t actime;
-int64_t modtime;
-} ATTRIBUTE_PACKED mx32_utimbuf_t;
-#define MPERS_mx32_utimbuf_t mx32_utimbuf_t
diff --git a/mpers.am b/mpers.am
index 8771776..d9ceb37 100644
--- a/mpers.am
+++ b/mpers.am
@@ -1,2 +1,2 @@
 # Generated by ./generate_mpers_am.sh; do not edit.
-mpers_source_files = block.c btrfs.c dirent.c evdev.c fetch_seccomp_fprog.c fetch_struct_flock.c fetch_struct_mmsghdr.c fetch_struct_msghdr.c fetch_struct_stat.c fetch_struct_stat64.c fetch_struct_statfs.c hdio.c ipc_msgctl.c ipc_shmctl.c loop.c mtd.c print_mq_attr.c print_msgbuf.c print_sg_req_info.c print_sigevent.c print_time.c print_timespec.c print_timeval.c print_timex.c printrusage.c printsiginfo.c rt_sigreturn.c rtc.c sg_io_v3.c sigaltstack.c sock.c sysinfo.c times.c ustat.c utime.c v4l2.c 
+mpers_source_files = block.c btrfs.c dirent.c evdev.c fetch_bpf_fprog.c fetch_struct_flock.c fetch_struct_keyctl_kdf_params.c fetch_struct_mmsghdr.c fetch_struct_msghdr.c fetch_struct_stat.c fetch_struct_stat64.c fetch_struct_statfs.c hdio.c ipc_msgctl.c ipc_shmctl.c loop.c mtd.c print_group_req.c print_mq_attr.c print_msgbuf.c print_sg_req_info.c print_sigevent.c print_time.c print_timespec.c print_timeval.c print_timex.c printrusage.c printsiginfo.c rt_sigreturn.c rtc.c sg_io_v3.c sigaltstack.c sock.c sysinfo.c times.c ustat.c utime.c v4l2.c 
diff --git a/mpers.awk b/mpers.awk
index fe54763..6545052 100644
--- a/mpers.awk
+++ b/mpers.awk
@@ -27,14 +27,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-function compare_indices(i1, v1, i2, v2) {
+function compare_indices(i1, v1, i2, v2, \
+			 c1, c2)
+{
 	c1 = strtonum(sprintf("%s", i1))
 	c2 = strtonum(sprintf("%s", i2))
 	if (c1 < c2)
 		return -1
 	return (c1 != c2)
 }
-function array_get(array_idx, array_member, array_return)
+function array_get(array_idx, array_member, \
+		   array_return)
 {
 	array_return = array[array_idx][array_member]
 	if ("" == array_return) {
@@ -52,7 +55,8 @@
 	array[array_idx]["seq"] = index_seq
 	return index_seq
 }
-function enter(array_idx)
+function enter(array_idx,
+	       item)
 {
 	if (array_idx in called) {
 		printf("%s: index loop detected:", FILENAME) > "/dev/stderr"
@@ -68,7 +72,8 @@
 	delete called[array_idx]
 	return to_return
 }
-function update_upper_bound(idx, val, count)
+function update_upper_bound(idx, val, \
+			    count)
 {
 	count = array[idx]["count"]
 	if (count == "")
@@ -76,8 +81,9 @@
 	array[idx]["count"] = count * val
 	array[idx]["upper_bound"] = array[idx]["upper_bound"] "[" val "]"
 }
-function what_is(what_idx, type_idx, special, item, \
-		 location, prev_location, prev_returned_size)
+function what_is(what_idx, \
+		 item, loc_diff, location, prev_location, prev_returned_size, \
+		 special, to_return, type_idx)
 {
 	enter(what_idx)
 	special = array_get(what_idx, "special")
diff --git a/mpers_type.h b/mpers_type.h
index 64201c7..8752f08 100644
--- a/mpers_type.h
+++ b/mpers_type.h
@@ -49,6 +49,7 @@
 # else
 #  define MPERS_DEFS "native_defs.h"
 # endif
+typedef unsigned long mpers_ptr_t;
 #endif
 
 #endif /* !STRACE_MPERS_TYPE_H */
diff --git a/msghdr.c b/msghdr.c
index d263866..dd9c430 100644
--- a/msghdr.c
+++ b/msghdr.c
@@ -4,6 +4,7 @@
  * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
  * Copyright (c) 1996-2000 Wichert Akkerman <wichert@cistron.nl>
  * Copyright (c) 2005-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,6 +31,7 @@
  */
 
 #include "defs.h"
+#include "print_fields.h"
 #include "msghdr.h"
 #include <limits.h>
 #include <arpa/inet.h>
@@ -84,8 +86,10 @@
 {
 	const struct ucred *uc = cmsg_data;
 
-	tprintf("{pid=%u, uid=%u, gid=%u}",
-		(unsigned) uc->pid, (unsigned) uc->uid, (unsigned) uc->gid);
+	PRINT_FIELD_U("{", *uc, pid);
+	PRINT_FIELD_UID(", ", *uc, uid);
+	PRINT_FIELD_UID(", ", *uc, gid);
+	tprints("}");
 }
 
 static void
@@ -122,12 +126,10 @@
 {
 	const struct in_pktinfo *info = cmsg_data;
 
-	tprints("{ipi_ifindex=");
-	print_ifindex(info->ipi_ifindex);
-	tprintf(", ipi_spec_dst=inet_addr(\"%s\")",
-		inet_ntoa(info->ipi_spec_dst));
-	tprintf(", ipi_addr=inet_addr(\"%s\")}",
-		inet_ntoa(info->ipi_addr));
+	PRINT_FIELD_IFINDEX("{", *info, ipi_ifindex);
+	PRINT_FIELD_INET4_ADDR(", ", *info, ipi_spec_dst);
+	PRINT_FIELD_INET4_ADDR(", ", *info, ipi_addr);
+	tprints("}");
 }
 
 static void
@@ -185,11 +187,13 @@
 {
 	const struct sock_ee *const err = cmsg_data;
 
-	tprintf("{ee_errno=%u, ee_origin=%u, ee_type=%u, ee_code=%u"
-		", ee_info=%u, ee_data=%u, offender=",
-		err->ee_errno, err->ee_origin, err->ee_type,
-		err->ee_code, err->ee_info, err->ee_data);
-	print_sockaddr(tcp, &err->offender, sizeof(err->offender));
+	PRINT_FIELD_U("{", *err, ee_errno);
+	PRINT_FIELD_U(", ", *err, ee_origin);
+	PRINT_FIELD_U(", ", *err, ee_type);
+	PRINT_FIELD_U(", ", *err, ee_code);
+	PRINT_FIELD_U(", ", *err, ee_info);
+	PRINT_FIELD_U(", ", *err, ee_data);
+	PRINT_FIELD_SOCKADDR(", ", *err, offender);
 	tprints("}");
 }
 
@@ -201,7 +205,7 @@
 		data_len > sizeof(struct sockaddr_storage)
 		? sizeof(struct sockaddr_storage) : data_len;
 
-	print_sockaddr(tcp, cmsg_data, addr_len);
+	print_sockaddr(cmsg_data, addr_len);
 }
 
 typedef void (* const cmsg_printer)(struct tcb *, const void *, unsigned int);
@@ -376,17 +380,15 @@
 	tprintf("%d", msg->msg_namelen);
 
 	tprints(", msg_iov=");
-
 	tprint_iov_upto(tcp, msg->msg_iovlen,
 			ptr_to_kulong(msg->msg_iov), decode, data_size);
-	tprintf(", msg_iovlen=%" PRI_klu, (kernel_ulong_t) msg->msg_iovlen);
+	PRINT_FIELD_U(", ", *msg, msg_iovlen);
 
 	decode_msg_control(tcp, ptr_to_kulong(msg->msg_control),
 			   msg->msg_controllen);
-	tprintf(", msg_controllen=%" PRI_klu, (kernel_ulong_t) msg->msg_controllen);
+	PRINT_FIELD_U(", ", *msg, msg_controllen);
 
-	tprints(", msg_flags=");
-	printflags(msg_flags, msg->msg_flags, "MSG_???");
+	PRINT_FIELD_FLAGS(", ", *msg, msg_flags, msg_flags, "MSG_???");
 	tprints("}");
 }
 
diff --git a/mtd.c b/mtd.c
index b046859..8e5fe46 100644
--- a/mtd.c
+++ b/mtd.c
@@ -360,5 +360,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/mx32_funcs.h b/mx32_funcs.h
deleted file mode 100644
index 451d1e2..0000000
--- a/mx32_funcs.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#undef sys_readdir
-#define sys_readdir mx32_sys_readdir
-#undef sys_getdents
-#define sys_getdents mx32_sys_getdents
-#undef sys_msgctl
-#define sys_msgctl mx32_sys_msgctl
-#undef sys_shmctl
-#define sys_shmctl mx32_sys_shmctl
-#undef sys_time
-#define sys_time mx32_sys_time
-#undef sys_rt_sigreturn
-#define sys_rt_sigreturn mx32_sys_rt_sigreturn
-#undef sys_sigaltstack
-#define sys_sigaltstack mx32_sys_sigaltstack
-#undef sys_sysinfo
-#define sys_sysinfo mx32_sys_sysinfo
-#undef sys_times
-#define sys_times mx32_sys_times
-#undef sys_ustat
-#define sys_ustat mx32_sys_ustat
-#undef sys_utime
-#define sys_utime mx32_sys_utime
-#include "sys_func.h"
diff --git a/mx32_printer_decls.h b/mx32_printer_decls.h
deleted file mode 100644
index 9ef7403..0000000
--- a/mx32_printer_decls.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_seccomp_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
-extern int mx32_block_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int mx32_btrfs_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int mx32_evdev_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern _Bool mx32_fetch_seccomp_fprog(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern _Bool mx32_fetch_struct_flock(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern _Bool mx32_fetch_struct_flock64(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern int mx32_fetch_struct_mmsghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern unsigned int mx32_sizeof_struct_mmsghdr(void);
-extern int mx32_fetch_struct_msghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-extern _Bool mx32_fetch_struct_stat(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
-extern _Bool mx32_fetch_struct_stat64(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
-extern _Bool mx32_fetch_struct_statfs(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_statfs *const p);
-extern _Bool mx32_fetch_struct_statfs64(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t size, struct strace_statfs *const p);
-extern int mx32_hdio_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int mx32_loop_ioctl(struct tcb *tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int mx32_mtd_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern void mx32_printmqattr(struct tcb *const tcp, const kernel_ulong_t addr, const _Bool decode_flags);
-extern void mx32_tprint_msgbuf(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t count);
-extern int mx32_decode_sg_req_info(struct tcb *const tcp, const kernel_ulong_t arg);
-extern void mx32_print_sigevent(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void mx32_print_timespec(struct tcb *const tcp, const kernel_ulong_t addr);
-extern const char * mx32_sprint_timespec(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void mx32_print_timespec_utime_pair(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void mx32_print_itimerspec(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void mx32_print_struct_timeval(const void *arg);
-extern void mx32_print_timeval(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void mx32_print_timeval_utimes(struct tcb *const tcp, const kernel_ulong_t addr);
-extern const char * mx32_sprint_timeval(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void mx32_print_itimerval(struct tcb *const tcp, const kernel_ulong_t addr);
-extern int mx32_print_timex(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void mx32_printrusage(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void mx32_printsiginfo_at(struct tcb *const tcp, const kernel_ulong_t addr);
-extern void mx32_print_siginfo_array(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t len);
-extern int mx32_rtc_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int mx32_decode_sg_io_v3(struct tcb *const tcp, const kernel_ulong_t arg);
-extern int mx32_sock_ioctl(struct tcb *tcp, const unsigned int code, const kernel_ulong_t arg);
-extern int mx32_v4l2_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
diff --git a/mx32_printer_defs.h b/mx32_printer_defs.h
deleted file mode 100644
index 033e7fe..0000000
--- a/mx32_printer_defs.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_seccomp_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
-.block_ioctl = mx32_block_ioctl,
-.btrfs_ioctl = mx32_btrfs_ioctl,
-.evdev_ioctl = mx32_evdev_ioctl,
-.fetch_seccomp_fprog = mx32_fetch_seccomp_fprog,
-.fetch_struct_flock = mx32_fetch_struct_flock,
-.fetch_struct_flock64 = mx32_fetch_struct_flock64,
-.fetch_struct_mmsghdr = mx32_fetch_struct_mmsghdr,
-.sizeof_struct_mmsghdr = mx32_sizeof_struct_mmsghdr,
-.fetch_struct_msghdr = mx32_fetch_struct_msghdr,
-.fetch_struct_stat = mx32_fetch_struct_stat,
-.fetch_struct_stat64 = mx32_fetch_struct_stat64,
-.fetch_struct_statfs = mx32_fetch_struct_statfs,
-.fetch_struct_statfs64 = mx32_fetch_struct_statfs64,
-.hdio_ioctl = mx32_hdio_ioctl,
-.loop_ioctl = mx32_loop_ioctl,
-.mtd_ioctl = mx32_mtd_ioctl,
-.printmqattr = mx32_printmqattr,
-.tprint_msgbuf = mx32_tprint_msgbuf,
-.decode_sg_req_info = mx32_decode_sg_req_info,
-.print_sigevent = mx32_print_sigevent,
-.print_timespec = mx32_print_timespec,
-.sprint_timespec = mx32_sprint_timespec,
-.print_timespec_utime_pair = mx32_print_timespec_utime_pair,
-.print_itimerspec = mx32_print_itimerspec,
-.print_struct_timeval = mx32_print_struct_timeval,
-.print_timeval = mx32_print_timeval,
-.print_timeval_utimes = mx32_print_timeval_utimes,
-.sprint_timeval = mx32_sprint_timeval,
-.print_itimerval = mx32_print_itimerval,
-.print_timex = mx32_print_timex,
-.printrusage = mx32_printrusage,
-.printsiginfo_at = mx32_printsiginfo_at,
-.print_siginfo_array = mx32_print_siginfo_array,
-.rtc_ioctl = mx32_rtc_ioctl,
-.decode_sg_io_v3 = mx32_decode_sg_io_v3,
-.sock_ioctl = mx32_sock_ioctl,
-.v4l2_ioctl = mx32_v4l2_ioctl,
diff --git a/mx32_type_defs.h b/mx32_type_defs.h
deleted file mode 100644
index a328250..0000000
--- a/mx32_type_defs.h
+++ /dev/null
@@ -1,160 +0,0 @@
-#ifdef MPERS_mx32_struct_blk_user_trace_setup
-# define struct_blk_user_trace_setup MPERS_mx32_struct_blk_user_trace_setup
-#endif
-#ifdef MPERS_mx32_struct_blkpg_ioctl_arg
-# define struct_blkpg_ioctl_arg MPERS_mx32_struct_blkpg_ioctl_arg
-#endif
-#ifdef MPERS_mx32_struct_blkpg_partition
-# define struct_blkpg_partition MPERS_mx32_struct_blkpg_partition
-#endif
-#ifdef MPERS_mx32_struct_btrfs_ioctl_dev_replace_args
-# define struct_btrfs_ioctl_dev_replace_args MPERS_mx32_struct_btrfs_ioctl_dev_replace_args
-#endif
-#ifdef MPERS_mx32_struct_btrfs_ioctl_send_args
-# define struct_btrfs_ioctl_send_args MPERS_mx32_struct_btrfs_ioctl_send_args
-#endif
-#ifdef MPERS_mx32_struct_btrfs_ioctl_received_subvol_args
-# define struct_btrfs_ioctl_received_subvol_args MPERS_mx32_struct_btrfs_ioctl_received_subvol_args
-#endif
-#ifdef MPERS_mx32_struct_btrfs_ioctl_vol_args_v2
-# define struct_btrfs_ioctl_vol_args_v2 MPERS_mx32_struct_btrfs_ioctl_vol_args_v2
-#endif
-#ifdef MPERS_mx32_kernel_dirent
-# define kernel_dirent MPERS_mx32_kernel_dirent
-#endif
-#ifdef MPERS_mx32_struct_ff_effect
-# define struct_ff_effect MPERS_mx32_struct_ff_effect
-#endif
-#ifdef MPERS_mx32_seccomp_fprog_t
-# define seccomp_fprog_t MPERS_mx32_seccomp_fprog_t
-#endif
-#ifdef MPERS_mx32_struct_flock
-# define struct_flock MPERS_mx32_struct_flock
-#endif
-#ifdef MPERS_mx32_struct_flock64
-# define struct_flock64 MPERS_mx32_struct_flock64
-#endif
-#ifdef MPERS_mx32_struct_mmsghdr
-# define struct_mmsghdr MPERS_mx32_struct_mmsghdr
-#endif
-#ifdef MPERS_mx32_struct_msghdr
-# define struct_msghdr MPERS_mx32_struct_msghdr
-#endif
-#ifdef MPERS_mx32_struct_stat
-# define struct_stat MPERS_mx32_struct_stat
-#endif
-#ifdef MPERS_mx32_struct_stat64
-# define struct_stat64 MPERS_mx32_struct_stat64
-#endif
-#ifdef MPERS_mx32_struct_statfs
-# define struct_statfs MPERS_mx32_struct_statfs
-#endif
-#ifdef MPERS_mx32_struct_statfs64
-# define struct_statfs64 MPERS_mx32_struct_statfs64
-#endif
-#ifdef MPERS_mx32_struct_hd_geometry
-# define struct_hd_geometry MPERS_mx32_struct_hd_geometry
-#endif
-#ifdef MPERS_mx32_msqid_ds_t
-# define msqid_ds_t MPERS_mx32_msqid_ds_t
-#endif
-#ifdef MPERS_mx32_shmid_ds_t
-# define shmid_ds_t MPERS_mx32_shmid_ds_t
-#endif
-#ifdef MPERS_mx32_struct_loop_info
-# define struct_loop_info MPERS_mx32_struct_loop_info
-#endif
-#ifdef MPERS_mx32_struct_mtd_oob_buf
-# define struct_mtd_oob_buf MPERS_mx32_struct_mtd_oob_buf
-#endif
-#ifdef MPERS_mx32_mq_attr_t
-# define mq_attr_t MPERS_mx32_mq_attr_t
-#endif
-#ifdef MPERS_mx32_msgbuf_t
-# define msgbuf_t MPERS_mx32_msgbuf_t
-#endif
-#ifdef MPERS_mx32_struct_sg_req_info
-# define struct_sg_req_info MPERS_mx32_struct_sg_req_info
-#endif
-#ifdef MPERS_mx32_struct_sigevent
-# define struct_sigevent MPERS_mx32_struct_sigevent
-#endif
-#ifdef MPERS_mx32_time_t
-# define time_t MPERS_mx32_time_t
-#endif
-#ifdef MPERS_mx32_timespec_t
-# define timespec_t MPERS_mx32_timespec_t
-#endif
-#ifdef MPERS_mx32_timeval_t
-# define timeval_t MPERS_mx32_timeval_t
-#endif
-#ifdef MPERS_mx32_struct_timex
-# define struct_timex MPERS_mx32_struct_timex
-#endif
-#ifdef MPERS_mx32_rusage_t
-# define rusage_t MPERS_mx32_rusage_t
-#endif
-#ifdef MPERS_mx32_siginfo_t
-# define siginfo_t MPERS_mx32_siginfo_t
-#endif
-#ifdef MPERS_mx32_struct_rt_sigframe
-# define struct_rt_sigframe MPERS_mx32_struct_rt_sigframe
-#endif
-#ifdef MPERS_mx32_struct_rtc_pll_info
-# define struct_rtc_pll_info MPERS_mx32_struct_rtc_pll_info
-#endif
-#ifdef MPERS_mx32_struct_sg_io_hdr
-# define struct_sg_io_hdr MPERS_mx32_struct_sg_io_hdr
-#endif
-#ifdef MPERS_mx32_stack_t
-# define stack_t MPERS_mx32_stack_t
-#endif
-#ifdef MPERS_mx32_struct_ifconf
-# define struct_ifconf MPERS_mx32_struct_ifconf
-#endif
-#ifdef MPERS_mx32_struct_ifreq
-# define struct_ifreq MPERS_mx32_struct_ifreq
-#endif
-#ifdef MPERS_mx32_sysinfo_t
-# define sysinfo_t MPERS_mx32_sysinfo_t
-#endif
-#ifdef MPERS_mx32_tms_t
-# define tms_t MPERS_mx32_tms_t
-#endif
-#ifdef MPERS_mx32_struct_ustat
-# define struct_ustat MPERS_mx32_struct_ustat
-#endif
-#ifdef MPERS_mx32_utimbuf_t
-# define utimbuf_t MPERS_mx32_utimbuf_t
-#endif
-#ifdef MPERS_mx32_struct_v4l2_buffer
-# define struct_v4l2_buffer MPERS_mx32_struct_v4l2_buffer
-#endif
-#ifdef MPERS_mx32_struct_v4l2_clip
-# define struct_v4l2_clip MPERS_mx32_struct_v4l2_clip
-#endif
-#ifdef MPERS_mx32_struct_v4l2_create_buffers
-# define struct_v4l2_create_buffers MPERS_mx32_struct_v4l2_create_buffers
-#endif
-#ifdef MPERS_mx32_struct_v4l2_ext_control
-# define struct_v4l2_ext_control MPERS_mx32_struct_v4l2_ext_control
-#endif
-#ifdef MPERS_mx32_struct_v4l2_ext_controls
-# define struct_v4l2_ext_controls MPERS_mx32_struct_v4l2_ext_controls
-#endif
-#ifdef MPERS_mx32_struct_v4l2_format
-# define struct_v4l2_format MPERS_mx32_struct_v4l2_format
-#endif
-#ifdef MPERS_mx32_struct_v4l2_framebuffer
-# define struct_v4l2_framebuffer MPERS_mx32_struct_v4l2_framebuffer
-#endif
-#ifdef MPERS_mx32_struct_v4l2_input
-# define struct_v4l2_input MPERS_mx32_struct_v4l2_input
-#endif
-#ifdef MPERS_mx32_struct_v4l2_standard
-# define struct_v4l2_standard MPERS_mx32_struct_v4l2_standard
-#endif
-#undef MPERS_PRINTER_NAME
-#define MPERS_PRINTER_NAME(printer_name) printer_name
-#include "mx32_printer_decls.h"
-#include MPERS_mx32_IOCTL_MACROS
diff --git a/native_printer_decls.h b/native_printer_decls.h
index 19badf1..5e8dd16 100644
--- a/native_printer_decls.h
+++ b/native_printer_decls.h
@@ -1,10 +1,12 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_seccomp_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
+/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_bpf_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_keyctl_kdf_params.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_group_req.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
 extern int block_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
 extern int btrfs_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
 extern int evdev_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
-extern _Bool fetch_seccomp_fprog(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
+extern unsigned int get_sock_fprog_size(void);
+extern _Bool fetch_bpf_fprog(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
 extern _Bool fetch_struct_flock(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
 extern _Bool fetch_struct_flock64(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
+extern int fetch_keyctl_kdf_params(struct tcb *const tcp, kernel_ulong_t addr, struct strace_keyctl_kdf_params *p);
 extern int fetch_struct_mmsghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
 extern unsigned int sizeof_struct_mmsghdr(void);
 extern int fetch_struct_msghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
@@ -15,6 +17,7 @@
 extern int hdio_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
 extern int loop_ioctl(struct tcb *tcp, const unsigned int code, const kernel_ulong_t arg);
 extern int mtd_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
+extern void print_group_req(struct tcb *const tcp, const kernel_ulong_t addr, const int len);
 extern void printmqattr(struct tcb *const tcp, const kernel_ulong_t addr, const _Bool decode_flags);
 extern void tprint_msgbuf(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t count);
 extern int decode_sg_req_info(struct tcb *const tcp, const kernel_ulong_t arg);
diff --git a/native_printer_defs.h b/native_printer_defs.h
index ef43c93..91acbca 100644
--- a/native_printer_defs.h
+++ b/native_printer_defs.h
@@ -1,10 +1,12 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_seccomp_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
+/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_bpf_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_keyctl_kdf_params.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_group_req.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
 .block_ioctl = block_ioctl,
 .btrfs_ioctl = btrfs_ioctl,
 .evdev_ioctl = evdev_ioctl,
-.fetch_seccomp_fprog = fetch_seccomp_fprog,
+.get_sock_fprog_size = get_sock_fprog_size,
+.fetch_bpf_fprog = fetch_bpf_fprog,
 .fetch_struct_flock = fetch_struct_flock,
 .fetch_struct_flock64 = fetch_struct_flock64,
+.fetch_keyctl_kdf_params = fetch_keyctl_kdf_params,
 .fetch_struct_mmsghdr = fetch_struct_mmsghdr,
 .sizeof_struct_mmsghdr = sizeof_struct_mmsghdr,
 .fetch_struct_msghdr = fetch_struct_msghdr,
@@ -15,6 +17,7 @@
 .hdio_ioctl = hdio_ioctl,
 .loop_ioctl = loop_ioctl,
 .mtd_ioctl = mtd_ioctl,
+.print_group_req = print_group_req,
 .printmqattr = printmqattr,
 .tprint_msgbuf = tprint_msgbuf,
 .decode_sg_req_info = decode_sg_req_info,
diff --git a/negated_errno.h b/negated_errno.h
new file mode 100644
index 0000000..9ec851b
--- /dev/null
+++ b/negated_errno.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_NEGATED_ERRNO_H
+#define STRACE_NEGATED_ERRNO_H
+
+/*
+ * Check the syscall return value register value for whether it is
+ * a negated errno code indicating an error, or a success return value.
+ */
+static inline bool
+is_negated_errno(kernel_ulong_t val)
+{
+	/* Linux kernel defines MAX_ERRNO to 4095. */
+	kernel_ulong_t max = -(kernel_long_t) 4095;
+
+#ifndef current_klongsize
+	if (current_klongsize < sizeof(val)) {
+		val = (uint32_t) val;
+		max = (uint32_t) max;
+	}
+#endif /* !current_klongsize */
+
+	return val >= max;
+}
+
+#endif /* !STRACE_NEGATED_ERRNO_H */
diff --git a/net.c b/net.c
index 8dc47fc..34a394d 100644
--- a/net.c
+++ b/net.c
@@ -30,6 +30,8 @@
  */
 
 #include "defs.h"
+#include "print_fields.h"
+
 #include <sys/stat.h>
 #include <sys/socket.h>
 #include <sys/uio.h>
@@ -87,22 +89,6 @@
 # include "xlat/bt_protocols.h"
 #endif
 
-void
-print_ifindex(unsigned int ifindex)
-{
-#ifdef HAVE_IF_INDEXTONAME
-	char buf[IFNAMSIZ + 1];
-
-	if (if_indextoname(ifindex, buf)) {
-		tprints("if_nametoindex(");
-		print_quoted_string(buf, sizeof(buf), QUOTE_0_TERMINATED);
-		tprints(")");
-		return;
-	}
-#endif
-	tprintf("%u", ifindex);
-}
-
 static void
 decode_sockbuf(struct tcb *const tcp, const int fd, const kernel_ulong_t addr,
 	       const kernel_ulong_t addrlen)
@@ -166,26 +152,6 @@
 	return RVAL_DECODED | RVAL_FD;
 }
 
-SYS_FUNC(bind)
-{
-	printfd(tcp, tcp->u_arg[0]);
-	tprints(", ");
-	const int addrlen = tcp->u_arg[2];
-	decode_sockaddr(tcp, tcp->u_arg[1], addrlen);
-	tprintf(", %d", addrlen);
-
-	return RVAL_DECODED;
-}
-
-SYS_FUNC(listen)
-{
-	printfd(tcp, tcp->u_arg[0]);
-	tprints(", ");
-	tprintf("%" PRI_klu, tcp->u_arg[1]);
-
-	return RVAL_DECODED;
-}
-
 static bool
 fetch_socklen(struct tcb *const tcp, int *const plen,
 	      const kernel_ulong_t sockaddr, const kernel_ulong_t socklen)
@@ -347,17 +313,6 @@
 	return 0;
 }
 
-#include "xlat/shutdown_modes.h"
-
-SYS_FUNC(shutdown)
-{
-	printfd(tcp, tcp->u_arg[0]);
-	tprints(", ");
-	printxval(shutdown_modes, tcp->u_arg[1], "SHUT_???");
-
-	return RVAL_DECODED;
-}
-
 SYS_FUNC(getsockname)
 {
 	return decode_sockname(tcp);
@@ -487,36 +442,73 @@
 }
 
 static void
-print_linger(struct tcb *const tcp, const kernel_ulong_t addr, const int len)
+print_set_linger(struct tcb *const tcp, const kernel_ulong_t addr,
+		 const int len)
 {
 	struct linger linger;
 
-	if (len != sizeof(linger) ||
-	    umove(tcp, addr, &linger) < 0) {
+	if (len < (int) sizeof(linger)) {
+		printaddr(addr);
+	} else if (!umove_or_printaddr(tcp, addr, &linger)) {
+		PRINT_FIELD_D("{", linger, l_onoff);
+		PRINT_FIELD_D(", ", linger, l_linger);
+		tprints("}");
+	}
+}
+
+static void
+print_get_linger(struct tcb *const tcp, const kernel_ulong_t addr,
+		 unsigned int len)
+{
+	struct linger linger;
+
+	if (len < sizeof(linger)) {
+		if (len != sizeof(linger.l_onoff)) {
+			printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+			return;
+		}
+	} else {
+		len = sizeof(linger);
+	}
+
+	if (umoven(tcp, addr, len, &linger) < 0) {
 		printaddr(addr);
 		return;
 	}
 
-	tprintf("{onoff=%d, linger=%d}",
-		linger.l_onoff,
-		linger.l_linger);
+	PRINT_FIELD_D("{", linger, l_onoff);
+	if (len == sizeof(linger))
+		PRINT_FIELD_D(", ", linger, l_linger);
+	tprints("}");
 }
 
 #ifdef SO_PEERCRED
 static void
-print_ucred(struct tcb *const tcp, const kernel_ulong_t addr, const int len)
+print_ucred(struct tcb *const tcp, const kernel_ulong_t addr, unsigned int len)
 {
 	struct ucred uc;
 
-	if (len != sizeof(uc) ||
-	    umove(tcp, addr, &uc) < 0) {
-		printaddr(addr);
+	if (len < sizeof(uc)) {
+		if (len != sizeof(uc.pid)
+		    && len != offsetofend(struct ucred, uid)) {
+			printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+			return;
+		}
 	} else {
-		tprintf("{pid=%u, uid=%u, gid=%u}",
-			(unsigned) uc.pid,
-			(unsigned) uc.uid,
-			(unsigned) uc.gid);
+		len = sizeof(uc);
 	}
+
+	if (umoven(tcp, addr, len, &uc) < 0) {
+		printaddr(addr);
+		return;
+	}
+
+	PRINT_FIELD_D("{", uc, pid);
+	if (len > sizeof(uc.pid))
+		PRINT_FIELD_UID(", ", uc, uid);
+	if (len == sizeof(uc))
+		PRINT_FIELD_UID(", ", uc, gid);
+	tprints("}");
 }
 #endif /* SO_PEERCRED */
 
@@ -531,9 +523,9 @@
 	    umove(tcp, addr, &stats) < 0) {
 		printaddr(addr);
 	} else {
-		tprintf("{packets=%u, drops=%u}",
-			stats.tp_packets,
-			stats.tp_drops);
+		PRINT_FIELD_U("{", stats, tp_packets);
+		PRINT_FIELD_U("{", stats, tp_drops);
+		tprints("}");
 	}
 }
 #endif /* PACKET_STATISTICS */
@@ -570,13 +562,21 @@
 	case SOL_SOCKET:
 		switch (name) {
 		case SO_LINGER:
-			print_linger(tcp, addr, len);
-			goto done;
+			print_get_linger(tcp, addr, len);
+			return;
 #ifdef SO_PEERCRED
 		case SO_PEERCRED:
 			print_ucred(tcp, addr, len);
-			goto done;
+			return;
 #endif
+#ifdef SO_ATTACH_FILTER
+		case SO_ATTACH_FILTER:
+			if (len && (unsigned short) len == (unsigned int) len)
+				print_sock_fprog(tcp, addr, len);
+			else
+				printaddr(addr);
+			return;
+#endif /* SO_ATTACH_FILTER */
 		}
 		break;
 
@@ -585,7 +585,7 @@
 #ifdef PACKET_STATISTICS
 		case PACKET_STATISTICS:
 			print_tpacket_stats(tcp, addr, len);
-			goto done;
+			return;
 #endif
 		}
 		break;
@@ -594,7 +594,7 @@
 		switch (name) {
 		case ICMP_FILTER:
 			print_icmp_filter(tcp, addr, len);
-			goto done;
+			return;
 		}
 		break;
 	}
@@ -610,25 +610,39 @@
 	} else {
 		printaddr(addr);
 	}
-done:
-	tprintf(", [%d]", len);
 }
 
 SYS_FUNC(getsockopt)
 {
+	int ulen, rlen;
+
 	if (entering(tcp)) {
 		print_sockopt_fd_level_name(tcp, tcp->u_arg[0],
 					    tcp->u_arg[1], tcp->u_arg[2], true);
-	} else {
-		int len;
 
-		if (syserror(tcp) || umove(tcp, tcp->u_arg[4], &len) < 0) {
+		if (verbose(tcp) && tcp->u_arg[4]
+		    && umove(tcp, tcp->u_arg[4], &ulen) == 0) {
+			set_tcb_priv_ulong(tcp, ulen);
+			return 0;
+		} else {
 			printaddr(tcp->u_arg[3]);
 			tprints(", ");
 			printaddr(tcp->u_arg[4]);
+			return RVAL_DECODED;
+		}
+	} else {
+		ulen = get_tcb_priv_ulong(tcp);
+
+		if (syserror(tcp) || umove(tcp, tcp->u_arg[4], &rlen) < 0) {
+			printaddr(tcp->u_arg[3]);
+			tprintf(", [%d]", ulen);
 		} else {
 			print_getsockopt(tcp, tcp->u_arg[1], tcp->u_arg[2],
-					 tcp->u_arg[3], len);
+					 tcp->u_arg[3], rlen);
+			if (ulen != rlen)
+				tprintf(", [%d->%d]", ulen, rlen);
+			else
+				tprintf(", [%d]", rlen);
 		}
 	}
 	return 0;
@@ -637,67 +651,37 @@
 #ifdef IP_ADD_MEMBERSHIP
 static void
 print_mreq(struct tcb *const tcp, const kernel_ulong_t addr,
-	   const unsigned int len)
+	   const int len)
 {
 	struct ip_mreq mreq;
 
-	if (len < sizeof(mreq)) {
-		printstrn(tcp, addr, len);
-		return;
+	if (len < (int) sizeof(mreq)) {
+		printaddr(addr);
+	} else if (!umove_or_printaddr(tcp, addr, &mreq)) {
+		PRINT_FIELD_INET4_ADDR("{", mreq, imr_multiaddr);
+		PRINT_FIELD_INET4_ADDR(", ", mreq, imr_interface);
+		tprints("}");
 	}
-	if (umove_or_printaddr(tcp, addr, &mreq))
-		return;
-
-	tprintf("{imr_multiaddr=inet_addr(\"%s\")",
-		inet_ntoa(mreq.imr_multiaddr));
-	tprintf(", imr_interface=inet_addr(\"%s\")}",
-		inet_ntoa(mreq.imr_interface));
 }
 #endif /* IP_ADD_MEMBERSHIP */
 
 #ifdef IPV6_ADD_MEMBERSHIP
 static void
 print_mreq6(struct tcb *const tcp, const kernel_ulong_t addr,
-	    const unsigned int len)
+	    const int len)
 {
 	struct ipv6_mreq mreq;
 
-	if (len < sizeof(mreq)) {
-		printstrn(tcp, addr, len);
-		return;
+	if (len < (int) sizeof(mreq)) {
+		printaddr(addr);
+	} else if (!umove_or_printaddr(tcp, addr, &mreq)) {
+		PRINT_FIELD_INET_ADDR("{", mreq, ipv6mr_multiaddr, AF_INET6);
+		PRINT_FIELD_IFINDEX(", ", mreq, ipv6mr_interface);
+		tprints("}");
 	}
-	if (umove_or_printaddr(tcp, addr, &mreq))
-		return;
-
-	tprints("{");
-	print_inet_addr(AF_INET6, &mreq.ipv6mr_multiaddr,
-			sizeof(mreq.ipv6mr_multiaddr), "ipv6mr_multiaddr");
-
-	tprints(", ipv6mr_interface=");
-	print_ifindex(mreq.ipv6mr_interface);
-	tprints("}");
 }
 #endif /* IPV6_ADD_MEMBERSHIP */
 
-#ifdef MCAST_JOIN_GROUP
-static void
-print_group_req(struct tcb *const tcp, const kernel_ulong_t addr, const int len)
-{
-	struct group_req greq;
-
-	if (len != sizeof(greq) ||
-	    umove(tcp, addr, &greq) < 0) {
-		printaddr(addr);
-		return;
-	}
-
-	tprintf("{gr_interface=%u, gr_group=", greq.gr_interface);
-	print_sockaddr(tcp, &greq.gr_group, sizeof(greq.gr_group));
-	tprints("}");
-
-}
-#endif /* MCAST_JOIN_GROUP */
-
 #ifdef PACKET_RX_RING
 static void
 print_tpacket_req(struct tcb *const tcp, const kernel_ulong_t addr, const int len)
@@ -708,12 +692,11 @@
 	    umove(tcp, addr, &req) < 0) {
 		printaddr(addr);
 	} else {
-		tprintf("{block_size=%u, block_nr=%u, "
-			"frame_size=%u, frame_nr=%u}",
-			req.tp_block_size,
-			req.tp_block_nr,
-			req.tp_frame_size,
-			req.tp_frame_nr);
+		PRINT_FIELD_U("{", req, tp_block_size);
+		PRINT_FIELD_U(", ", req, tp_block_nr);
+		PRINT_FIELD_U(", ", req, tp_frame_size);
+		PRINT_FIELD_U(", ", req, tp_frame_nr);
+		tprints("}");
 	}
 }
 #endif /* PACKET_RX_RING */
@@ -732,9 +715,11 @@
 	} else {
 		unsigned int i;
 
-		tprintf("{mr_ifindex=%u, mr_type=", mreq.mr_ifindex);
-		printxval(packet_mreq_type, mreq.mr_type, "PACKET_MR_???");
-		tprintf(", mr_alen=%u, mr_address=", mreq.mr_alen);
+		PRINT_FIELD_IFINDEX("{", mreq, mr_ifindex);
+		PRINT_FIELD_XVAL(", ", mreq, mr_type, packet_mreq_type,
+				 "PACKET_MR_???");
+		PRINT_FIELD_U(", ", mreq, mr_alen);
+		tprints(", mr_address=");
 		if (mreq.mr_alen > ARRAY_SIZE(mreq.mr_address))
 			mreq.mr_alen = ARRAY_SIZE(mreq.mr_address);
 		for (i = 0; i < mreq.mr_alen; ++i)
@@ -754,8 +739,19 @@
 	case SOL_SOCKET:
 		switch (name) {
 		case SO_LINGER:
-			print_linger(tcp, addr, len);
-			goto done;
+			print_set_linger(tcp, addr, len);
+			return;
+#ifdef SO_ATTACH_FILTER
+		case SO_ATTACH_FILTER:
+# ifdef SO_ATTACH_REUSEPORT_CBPF
+		case SO_ATTACH_REUSEPORT_CBPF:
+# endif
+			if ((unsigned int) len == get_sock_fprog_size())
+				decode_sock_fprog(tcp, addr);
+			else
+				printaddr(addr);
+			return;
+#endif /* SO_ATTACH_FILTER */
 		}
 		break;
 
@@ -765,13 +761,13 @@
 		case IP_ADD_MEMBERSHIP:
 		case IP_DROP_MEMBERSHIP:
 			print_mreq(tcp, addr, len);
-			goto done;
+			return;
 #endif /* IP_ADD_MEMBERSHIP */
 #ifdef MCAST_JOIN_GROUP
 		case MCAST_JOIN_GROUP:
 		case MCAST_LEAVE_GROUP:
 			print_group_req(tcp, addr, len);
-			goto done;
+			return;
 #endif /* MCAST_JOIN_GROUP */
 		}
 		break;
@@ -788,8 +784,14 @@
 		case IPV6_LEAVE_ANYCAST:
 # endif
 			print_mreq6(tcp, addr, len);
-			goto done;
+			return;
 #endif /* IPV6_ADD_MEMBERSHIP */
+#ifdef MCAST_JOIN_GROUP
+		case MCAST_JOIN_GROUP:
+		case MCAST_LEAVE_GROUP:
+			print_group_req(tcp, addr, len);
+			return;
+#endif /* MCAST_JOIN_GROUP */
 		}
 		break;
 
@@ -801,13 +803,13 @@
 		case PACKET_TX_RING:
 # endif
 			print_tpacket_req(tcp, addr, len);
-			goto done;
+			return;
 #endif /* PACKET_RX_RING */
 #ifdef PACKET_ADD_MEMBERSHIP
 		case PACKET_ADD_MEMBERSHIP:
 		case PACKET_DROP_MEMBERSHIP:
 			print_packet_mreq(tcp, addr, len);
-			goto done;
+			return;
 #endif /* PACKET_ADD_MEMBERSHIP */
 		}
 		break;
@@ -816,7 +818,7 @@
 		switch (name) {
 		case ICMP_FILTER:
 			print_icmp_filter(tcp, addr, len);
-			goto done;
+			return;
 		}
 		break;
 	}
@@ -832,8 +834,6 @@
 	} else {
 		printaddr(addr);
 	}
-done:
-	tprintf(", %d", len);
 }
 
 SYS_FUNC(setsockopt)
@@ -842,6 +842,7 @@
 				    tcp->u_arg[1], tcp->u_arg[2], false);
 	print_setsockopt(tcp, tcp->u_arg[1], tcp->u_arg[2],
 			 tcp->u_arg[3], tcp->u_arg[4]);
+	tprintf(", %d", (int) tcp->u_arg[4]);
 
 	return RVAL_DECODED;
 }
diff --git a/netlink.c b/netlink.c
index f74c3a0..ab40b14 100644
--- a/netlink.c
+++ b/netlink.c
@@ -29,21 +29,24 @@
 
 #include "defs.h"
 #include "netlink.h"
+#include "nlattr.h"
 #include <linux/audit.h>
 #include <linux/rtnetlink.h>
 #include <linux/xfrm.h>
+#include "xlat/netlink_ack_flags.h"
 #include "xlat/netlink_flags.h"
 #include "xlat/netlink_get_flags.h"
 #include "xlat/netlink_new_flags.h"
 #include "xlat/netlink_protocols.h"
 #include "xlat/netlink_types.h"
 #include "xlat/nl_audit_types.h"
+#include "xlat/nl_crypto_types.h"
 #include "xlat/nl_netfilter_msg_types.h"
 #include "xlat/nl_netfilter_subsys_ids.h"
-#include "xlat/nl_route_types.h"
 #include "xlat/nl_selinux_types.h"
 #include "xlat/nl_sock_diag_types.h"
 #include "xlat/nl_xfrm_types.h"
+#include "xlat/nlmsgerr_attrs.h"
 
 /*
  * Fetch a struct nlmsghdr from the given address.
@@ -53,7 +56,7 @@
 	       const kernel_ulong_t addr, const kernel_ulong_t len)
 {
 	if (len < sizeof(struct nlmsghdr)) {
-		printstrn(tcp, addr, len);
+		printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
 		return false;
 	}
 
@@ -63,25 +66,20 @@
 	return true;
 }
 
-enum {
-	NL_FAMILY_ERROR = -1,
-	NL_FAMILY_DEFAULT = -2
-};
-
 static int
 get_fd_nl_family(struct tcb *const tcp, const int fd)
 {
 	const unsigned long inode = getfdinode(tcp, fd);
 	if (!inode)
-		return NL_FAMILY_ERROR;
+		return -1;
 
 	const char *const details = get_sockaddr_by_inode(tcp, fd, inode);
 	if (!details)
-		return NL_FAMILY_ERROR;
+		return -1;
 
 	const char *const nl_details = STR_STRIP_PREFIX(details, "NETLINK:[");
 	if (nl_details == details)
-		return NL_FAMILY_ERROR;
+		return -1;
 
 	const struct xlat *xlats = netlink_protocols;
 	for (; xlats->str; ++xlats) {
@@ -93,7 +91,7 @@
 	if (*nl_details >= '0' && *nl_details <= '9')
 		return atoi(nl_details);
 
-	return NL_FAMILY_ERROR;
+	return -1;
 }
 
 static void
@@ -150,6 +148,7 @@
 	const char *const dflt;
 } nlmsg_types[] = {
 	[NETLINK_AUDIT] = { NULL, nl_audit_types, "AUDIT_???" },
+	[NETLINK_CRYPTO] = { NULL, nl_crypto_types, "CRYPTO_MSG_???" },
 	[NETLINK_GENERIC] = {
 		decode_nlmsg_type_generic,
 		NULL,
@@ -168,7 +167,7 @@
 
 /*
  * As all valid netlink families are positive integers, use unsigned int
- * for family here to filter out NL_FAMILY_ERROR and NL_FAMILY_DEFAULT.
+ * for family here to filter out -1.
  */
 static void
 decode_nlmsg_type(const uint16_t type, const unsigned int family)
@@ -177,7 +176,11 @@
 	const struct xlat *xlat = netlink_types;
 	const char *dflt = "NLMSG_???";
 
-	if (type != NLMSG_DONE && family < ARRAY_SIZE(nlmsg_types)) {
+	/*
+	 * type < NLMSG_MIN_TYPE are reserved control messages
+	 * that need no family-specific decoding.
+	 */
+	if (type >= NLMSG_MIN_TYPE && family < ARRAY_SIZE(nlmsg_types)) {
 		if (nlmsg_types[family].decoder)
 			decoder = nlmsg_types[family].decoder;
 		if (nlmsg_types[family].xlat)
@@ -194,10 +197,23 @@
 {
 	const struct xlat *table = NULL;
 
-	if (type == NLMSG_DONE)
+	if (type < NLMSG_MIN_TYPE) {
+		if (type == NLMSG_ERROR)
+			table = netlink_ack_flags;
 		goto end;
+	}
 
 	switch (family) {
+	case NETLINK_CRYPTO:
+		switch (type) {
+		case CRYPTO_MSG_NEWALG:
+			table = netlink_new_flags;
+			break;
+		case CRYPTO_MSG_GETALG:
+			table = netlink_get_flags;
+			break;
+		}
+		break;
 	case NETLINK_SOCK_DIAG:
 		table = netlink_get_flags;
 		break;
@@ -240,38 +256,60 @@
 	printflags_ex(flags, "NLM_F_???", netlink_flags, table, NULL);
 }
 
-static int
+static void
 print_nlmsghdr(struct tcb *tcp,
 	       const int fd,
-	       int family,
+	       const int family,
 	       const struct nlmsghdr *const nlmsghdr)
 {
 	/* print the whole structure regardless of its nlmsg_len */
 
 	tprintf("{len=%u, type=", nlmsghdr->nlmsg_len);
 
-	const int hdr_family = (nlmsghdr->nlmsg_type < NLMSG_MIN_TYPE
-				&& nlmsghdr->nlmsg_type != NLMSG_DONE)
-			       ? NL_FAMILY_DEFAULT
-			       : (family != NL_FAMILY_DEFAULT
-				  ? family : get_fd_nl_family(tcp, fd));
-
-	decode_nlmsg_type(nlmsghdr->nlmsg_type, hdr_family);
+	decode_nlmsg_type(nlmsghdr->nlmsg_type, family);
 
 	tprints(", flags=");
 	decode_nlmsg_flags(nlmsghdr->nlmsg_flags,
-			   nlmsghdr->nlmsg_type, hdr_family);
+			   nlmsghdr->nlmsg_type, family);
 
 	tprintf(", seq=%u, pid=%u}", nlmsghdr->nlmsg_seq,
 		nlmsghdr->nlmsg_pid);
-
-	return family != NL_FAMILY_DEFAULT ? family : hdr_family;
 }
 
+static bool
+print_cookie(struct tcb *const tcp, void *const elem_buf,
+	     const size_t elem_size, void *const opaque_data)
+{
+	tprintf("%" PRIu8, *(uint8_t *) elem_buf);
+
+	return true;
+}
+
+static bool
+decode_nlmsgerr_attr_cookie(struct tcb *const tcp,
+			    const kernel_ulong_t addr,
+			    const unsigned int len,
+			    const void *const opaque_data)
+{
+	uint8_t cookie;
+	const size_t nmemb = len / sizeof(cookie);
+
+	print_array(tcp, addr, nmemb, &cookie, sizeof(cookie),
+		    umoven_or_printaddr, print_cookie, 0);
+
+	return true;
+}
+
+static const nla_decoder_t nlmsgerr_nla_decoders[] = {
+	[NLMSGERR_ATTR_MSG]	= decode_nla_str,
+	[NLMSGERR_ATTR_OFFS]	= decode_nla_u32,
+	[NLMSGERR_ATTR_COOKIE]	= decode_nlmsgerr_attr_cookie
+};
+
 static void
 decode_nlmsghdr_with_payload(struct tcb *const tcp,
 			     const int fd,
-			     int family,
+			     const int family,
 			     const struct nlmsghdr *const nlmsghdr,
 			     const kernel_ulong_t addr,
 			     const kernel_ulong_t len);
@@ -281,12 +319,13 @@
 		const int fd,
 		const int family,
 		kernel_ulong_t addr,
-		kernel_ulong_t len)
+		unsigned int len,
+		const bool capped)
 {
 	struct nlmsgerr err;
 
 	if (len < sizeof(err.error)) {
-		printstrn(tcp, addr, len);
+		printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
 		return;
 	}
 
@@ -306,8 +345,22 @@
 	if (len) {
 		tprints(", msg=");
 		if (fetch_nlmsghdr(tcp, &err.msg, addr, len)) {
+			unsigned int payload =
+				capped ? sizeof(err.msg) : err.msg.nlmsg_len;
+			if (payload > len)
+				payload = len;
+
 			decode_nlmsghdr_with_payload(tcp, fd, family,
-						     &err.msg, addr, len);
+						     &err.msg, addr, payload);
+			if (len > payload) {
+				tprints(", ");
+				decode_nlattr(tcp, addr + payload,
+					      len - payload, nlmsgerr_attrs,
+					      "NLMSGERR_ATTR_???",
+					      nlmsgerr_nla_decoders,
+					      ARRAY_SIZE(nlmsgerr_nla_decoders),
+					      NULL);
+			}
 		}
 	}
 
@@ -315,6 +368,11 @@
 }
 
 static const netlink_decoder_t netlink_decoders[] = {
+#ifdef HAVE_LINUX_CRYPTOUSER_H
+	[NETLINK_CRYPTO] = decode_netlink_crypto,
+#endif
+	[NETLINK_ROUTE] = decode_netlink_route,
+	[NETLINK_SELINUX] = decode_netlink_selinux,
 	[NETLINK_SOCK_DIAG] = decode_netlink_sock_diag
 };
 
@@ -324,14 +382,26 @@
 	       const int family,
 	       const struct nlmsghdr *const nlmsghdr,
 	       const kernel_ulong_t addr,
-	       const kernel_ulong_t len)
+	       const unsigned int len)
 {
 	if (nlmsghdr->nlmsg_type == NLMSG_ERROR) {
-		decode_nlmsgerr(tcp, fd, family, addr, len);
+		decode_nlmsgerr(tcp, fd, family, addr, len,
+				nlmsghdr->nlmsg_flags & NLM_F_CAPPED);
 		return;
 	}
 
-	if ((unsigned int) family < ARRAY_SIZE(netlink_decoders)
+	/*
+	 * While most of NLMSG_DONE messages indeed have payloads
+	 * containing just a single integer, there are few exceptions,
+	 * so pass payloads of NLMSG_DONE messages to family-specific
+	 * netlink payload decoders.
+	 *
+	 * Other types of reserved control messages need no family-specific
+	 * netlink payload decoding.
+	 */
+	if ((nlmsghdr->nlmsg_type >= NLMSG_MIN_TYPE
+	    || nlmsghdr->nlmsg_type == NLMSG_DONE)
+	    && (unsigned int) family < ARRAY_SIZE(netlink_decoders)
 	    && netlink_decoders[family]
 	    && netlink_decoders[family](tcp, nlmsghdr, addr, len)) {
 		return;
@@ -345,13 +415,13 @@
 		return;
 	}
 
-	printstrn(tcp, addr, len);
+	printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
 }
 
 static void
 decode_nlmsghdr_with_payload(struct tcb *const tcp,
 			     const int fd,
-			     int family,
+			     const int family,
 			     const struct nlmsghdr *const nlmsghdr,
 			     const kernel_ulong_t addr,
 			     const kernel_ulong_t len)
@@ -362,7 +432,7 @@
 	if (nlmsg_len > NLMSG_HDRLEN)
 		tprints("{");
 
-	family = print_nlmsghdr(tcp, fd, family, nlmsghdr);
+	print_nlmsghdr(tcp, fd, family, nlmsghdr);
 
 	if (nlmsg_len > NLMSG_HDRLEN) {
 		tprints(", ");
@@ -378,6 +448,13 @@
 	       kernel_ulong_t addr,
 	       kernel_ulong_t len)
 {
+	const int family = get_fd_nl_family(tcp, fd);
+
+	if (family == NETLINK_KOBJECT_UEVENT) {
+		printstrn(tcp, addr, len);
+		return;
+	}
+
 	struct nlmsghdr nlmsghdr;
 	bool print_array = false;
 	unsigned int elt;
@@ -404,7 +481,7 @@
 			print_array = true;
 		}
 
-		decode_nlmsghdr_with_payload(tcp, fd, NL_FAMILY_DEFAULT,
+		decode_nlmsghdr_with_payload(tcp, fd, family,
 					     &nlmsghdr, addr, len);
 
 		if (!next_addr)
diff --git a/netlink.h b/netlink.h
index 5943229..31b7876 100644
--- a/netlink.h
+++ b/netlink.h
@@ -36,6 +36,10 @@
 # define NETLINK_SOCK_DIAG 4
 #endif
 
+#ifndef NLM_F_CAPPED
+# define NLM_F_CAPPED	0x100
+#endif
+
 #undef NLMSG_HDRLEN
 #define NLMSG_HDRLEN ((unsigned int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
 
diff --git a/netlink_crypto.c b/netlink_crypto.c
new file mode 100644
index 0000000..6debc1b
--- /dev/null
+++ b/netlink_crypto.c
@@ -0,0 +1,244 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#ifdef HAVE_LINUX_CRYPTOUSER_H
+
+# include "netlink.h"
+# include "nlattr.h"
+# include "print_fields.h"
+
+# include <linux/cryptouser.h>
+
+# include "xlat/crypto_nl_attrs.h"
+
+static bool
+decode_crypto_report_generic(struct tcb *const tcp,
+			     const kernel_ulong_t addr,
+			     const unsigned int len,
+			     const void *const opaque_data)
+{
+	tprints("{type=");
+	printstr_ex(tcp, addr, len, QUOTE_0_TERMINATED);
+	tprints("}");
+
+	return true;
+}
+
+static bool
+decode_crypto_report_hash(struct tcb *const tcp,
+			  const kernel_ulong_t addr,
+			  const unsigned int len,
+			  const void *const opaque_data)
+{
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_HASH
+	struct crypto_report_hash rhash;
+
+	if (len < sizeof(rhash))
+		printstrn(tcp, addr, len);
+	else if (!umove_or_printaddr(tcp, addr, &rhash)) {
+		PRINT_FIELD_CSTRING("{", rhash, type);
+		PRINT_FIELD_U(", ", rhash, blocksize);
+		PRINT_FIELD_U(", ", rhash, digestsize);
+		tprints("}");
+	}
+# else
+	printstrn(tcp, addr, len);
+# endif
+
+	return true;
+}
+
+static bool
+decode_crypto_report_blkcipher(struct tcb *const tcp,
+			       const kernel_ulong_t addr,
+			       const unsigned int len,
+			       const void *const opaque_data)
+{
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_BLKCIPHER
+	struct crypto_report_blkcipher rblkcipher;
+
+	if (len < sizeof(rblkcipher))
+		printstrn(tcp, addr, len);
+	else if (!umove_or_printaddr(tcp, addr, &rblkcipher)) {
+		PRINT_FIELD_CSTRING("{", rblkcipher, type);
+		PRINT_FIELD_CSTRING(", ", rblkcipher, geniv);
+		PRINT_FIELD_U(", ", rblkcipher, blocksize);
+		PRINT_FIELD_U(", ", rblkcipher, min_keysize);
+		PRINT_FIELD_U(", ", rblkcipher, max_keysize);
+		PRINT_FIELD_U(", ", rblkcipher, ivsize);
+		tprints("}");
+	}
+# else
+	printstrn(tcp, addr, len);
+# endif
+
+	return true;
+}
+
+static bool
+decode_crypto_report_aead(struct tcb *const tcp,
+			  const kernel_ulong_t addr,
+			  const unsigned int len,
+			  const void *const opaque_data)
+{
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_AEAD
+	struct crypto_report_aead raead;
+
+	if (len < sizeof(raead))
+		printstrn(tcp, addr, len);
+	else if (!umove_or_printaddr(tcp, addr, &raead)) {
+		PRINT_FIELD_CSTRING("{", raead, type);
+		PRINT_FIELD_CSTRING(", ", raead, geniv);
+		PRINT_FIELD_U(", ", raead, blocksize);
+		PRINT_FIELD_U(", ", raead, maxauthsize);
+		PRINT_FIELD_U(", ", raead, ivsize);
+		tprints("}");
+	}
+# else
+	printstrn(tcp, addr, len);
+# endif
+
+	return true;
+}
+
+static bool
+decode_crypto_report_rng(struct tcb *const tcp,
+			 const kernel_ulong_t addr,
+			 const unsigned int len,
+			 const void *const opaque_data)
+{
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_RNG
+	struct crypto_report_rng rrng;
+
+	if (len < sizeof(rrng))
+		printstrn(tcp, addr, len);
+	else if (!umove_or_printaddr(tcp, addr, &rrng)) {
+		PRINT_FIELD_CSTRING("{", rrng, type);
+		PRINT_FIELD_U(", ", rrng, seedsize);
+		tprints("}");
+	}
+# else
+	printstrn(tcp, addr, len);
+# endif
+
+	return true;
+}
+
+static bool
+decode_crypto_report_cipher(struct tcb *const tcp,
+			    const kernel_ulong_t addr,
+			    const unsigned int len,
+			    const void *const opaque_data)
+{
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_CIPHER
+	struct crypto_report_cipher rcipher;
+
+	if (len < sizeof(rcipher))
+		printstrn(tcp, addr, len);
+	else if (!umove_or_printaddr(tcp, addr, &rcipher)) {
+		PRINT_FIELD_CSTRING("{", rcipher, type);
+		PRINT_FIELD_U(", ", rcipher, blocksize);
+		PRINT_FIELD_U(", ", rcipher, min_keysize);
+		PRINT_FIELD_U(", ", rcipher, max_keysize);
+		tprints("}");
+	}
+# else
+	printstrn(tcp, addr, len);
+# endif
+
+	return true;
+}
+
+static const nla_decoder_t crypto_user_alg_nla_decoders[] = {
+	[CRYPTOCFGA_PRIORITY_VAL]	= decode_nla_u32,
+	[CRYPTOCFGA_REPORT_LARVAL]	= decode_crypto_report_generic,
+	[CRYPTOCFGA_REPORT_HASH]	= decode_crypto_report_hash,
+	[CRYPTOCFGA_REPORT_BLKCIPHER]	= decode_crypto_report_blkcipher,
+	[CRYPTOCFGA_REPORT_AEAD]	= decode_crypto_report_aead,
+	[CRYPTOCFGA_REPORT_COMPRESS]	= decode_crypto_report_generic,
+	[CRYPTOCFGA_REPORT_RNG]		= decode_crypto_report_rng,
+	[CRYPTOCFGA_REPORT_CIPHER]	= decode_crypto_report_cipher,
+	[CRYPTOCFGA_REPORT_AKCIPHER]	= decode_crypto_report_generic,
+	[CRYPTOCFGA_REPORT_KPP]		= decode_crypto_report_generic,
+	[CRYPTOCFGA_REPORT_ACOMP]	= decode_crypto_report_generic
+};
+
+static void
+decode_crypto_user_alg(struct tcb *const tcp,
+		       const kernel_ulong_t addr,
+		       const unsigned int len)
+{
+	struct crypto_user_alg alg;
+
+	if (len < sizeof(alg))
+		printstrn(tcp, addr, len);
+	else if (!umove_or_printaddr(tcp, addr, &alg)) {
+		PRINT_FIELD_CSTRING("{", alg, cru_name);
+		PRINT_FIELD_CSTRING(", ", alg, cru_driver_name);
+		PRINT_FIELD_CSTRING(", ", alg, cru_module_name);
+		PRINT_FIELD_X(", ", alg, cru_type);
+		PRINT_FIELD_X(", ", alg, cru_mask);
+		PRINT_FIELD_U(", ", alg, cru_refcnt);
+		PRINT_FIELD_X(", ", alg, cru_flags);
+		tprints("}");
+
+		const size_t offset = NLMSG_ALIGN(sizeof(alg));
+		if (len > offset) {
+			tprints(", ");
+			decode_nlattr(tcp, addr + offset, len - offset,
+				      crypto_nl_attrs, "CRYPTOCFGA_???",
+				      crypto_user_alg_nla_decoders,
+				      ARRAY_SIZE(crypto_user_alg_nla_decoders),
+				      NULL);
+		}
+	}
+}
+
+bool
+decode_netlink_crypto(struct tcb *const tcp,
+		      const struct nlmsghdr *const nlmsghdr,
+		      const kernel_ulong_t addr,
+		      const unsigned int len)
+{
+	switch (nlmsghdr->nlmsg_type) {
+	case CRYPTO_MSG_NEWALG:
+	case CRYPTO_MSG_DELALG:
+	case CRYPTO_MSG_UPDATEALG:
+	case CRYPTO_MSG_GETALG:
+		decode_crypto_user_alg(tcp, addr, len);
+		break;
+	default:
+		return false;
+	}
+
+	return true;
+}
+
+#endif /* HAVE_LINUX_CRYPTOUSER_H */
diff --git a/netlink_inet_diag.c b/netlink_inet_diag.c
new file mode 100644
index 0000000..700cbd3
--- /dev/null
+++ b/netlink_inet_diag.c
@@ -0,0 +1,431 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink.h"
+#include "netlink_sock_diag.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include <arpa/inet.h>
+
+#include <linux/sock_diag.h>
+#include <linux/inet_diag.h>
+
+#include "xlat/inet_diag_attrs.h"
+#include "xlat/inet_diag_bytecodes.h"
+#include "xlat/inet_diag_extended_flags.h"
+#include "xlat/inet_diag_req_attrs.h"
+
+#include "xlat/tcp_states.h"
+#include "xlat/tcp_state_flags.h"
+
+void
+print_inet_diag_sockid(const struct inet_diag_sockid *id, const uint8_t family)
+{
+	PRINT_FIELD_NET_PORT("{", *id, idiag_sport);
+	PRINT_FIELD_NET_PORT(", ", *id, idiag_dport);
+	PRINT_FIELD_INET_ADDR(", ", *id, idiag_src, family);
+	PRINT_FIELD_INET_ADDR(", ", *id, idiag_dst, family);
+	PRINT_FIELD_IFINDEX(", ", *id, idiag_if);
+	PRINT_FIELD_COOKIE(", ", *id, idiag_cookie);
+	tprints("}");
+}
+
+static void
+decode_inet_diag_hostcond(struct tcb *const tcp,
+			  const kernel_ulong_t addr,
+			  const unsigned int len)
+{
+	struct inet_diag_hostcond cond;
+
+	if (len < sizeof(cond)) {
+		printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+		return;
+	}
+	if (umove_or_printaddr(tcp, addr, &cond))
+		return;
+
+	PRINT_FIELD_XVAL("{", cond, family, addrfams, "AF_???");
+	PRINT_FIELD_U(", ", cond, prefix_len);
+	PRINT_FIELD_U(", ", cond, port);
+
+	if (len > sizeof(cond)) {
+		tprints(", ");
+		decode_inet_addr(tcp, addr + sizeof(cond),
+				 len - sizeof(cond), cond.family, "addr");
+	}
+	tprints("}");
+}
+
+static void
+print_inet_diag_bc_op(const struct inet_diag_bc_op *const op)
+{
+	PRINT_FIELD_XVAL("{", *op, code, inet_diag_bytecodes,
+			 "INET_DIAG_BC_???");
+	PRINT_FIELD_U(", ", *op, yes);
+	PRINT_FIELD_U(", ", *op, no);
+	tprints("}");
+}
+
+static void
+decode_inet_diag_markcond(struct tcb *const tcp,
+			  const kernel_ulong_t addr,
+			  const unsigned int len)
+{
+	struct inet_diag_markcond markcond;
+
+	if (len < sizeof(markcond))
+		printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+	else if (!umove_or_printaddr(tcp, addr, &markcond)) {
+		PRINT_FIELD_U("{", markcond, mark);
+		PRINT_FIELD_U(", ", markcond, mask);
+		tprints("}");
+	}
+}
+
+static void
+decode_bytecode_data(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const unsigned char code)
+{
+	switch (code) {
+	case INET_DIAG_BC_S_COND:
+	case INET_DIAG_BC_D_COND:
+		decode_inet_diag_hostcond(tcp, addr, len);
+		break;
+	case INET_DIAG_BC_DEV_COND: {
+		uint32_t ifindex;
+
+		if (len < sizeof(ifindex))
+			printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+		else if (!umove_or_printaddr(tcp, addr, &ifindex))
+			print_ifindex(ifindex);
+		break;
+	}
+	case INET_DIAG_BC_S_GE:
+	case INET_DIAG_BC_S_LE:
+	case INET_DIAG_BC_D_GE:
+	case INET_DIAG_BC_D_LE: {
+		struct inet_diag_bc_op op;
+
+		if (len < sizeof(op))
+			printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+		else if (!umove_or_printaddr(tcp, addr, &op))
+			print_inet_diag_bc_op(&op);
+		break;
+	}
+	case INET_DIAG_BC_MARK_COND:
+		decode_inet_diag_markcond(tcp, addr, len);
+		break;
+	case INET_DIAG_BC_AUTO:
+	case INET_DIAG_BC_JMP:
+	case INET_DIAG_BC_NOP:
+	default:
+		printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+		break;
+	}
+}
+
+static bool
+decode_inet_diag_bc_op(struct tcb *const tcp,
+		       const kernel_ulong_t addr,
+		       const unsigned int len,
+		       const void *const opaque_data)
+{
+	struct inet_diag_bc_op op;
+
+	if (len < sizeof(op))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &op))
+		return true;
+
+	if (len > sizeof(op))
+		tprints("{");
+
+	print_inet_diag_bc_op(&op);
+
+	if (len > sizeof(op)) {
+		tprints(", ");
+		decode_bytecode_data(tcp, addr + sizeof(op),
+				     len - sizeof(op), op.code);
+		tprints("}");
+	}
+
+	return true;
+}
+
+static const nla_decoder_t inet_diag_req_nla_decoders[] = {
+	[INET_DIAG_REQ_BYTECODE] = decode_inet_diag_bc_op
+};
+
+static void
+decode_inet_diag_req_compat(struct tcb *const tcp,
+			    const struct nlmsghdr *const nlmsghdr,
+			    const uint8_t family,
+			    const kernel_ulong_t addr,
+			    const unsigned int len)
+{
+	struct inet_diag_req req = { .idiag_family = family };
+	size_t offset = sizeof(req.idiag_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", req, idiag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(req)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(req) - offset,
+					 (void *) &req + offset)) {
+			PRINT_FIELD_U("", req, idiag_src_len);
+			PRINT_FIELD_U(", ", req, idiag_dst_len);
+			PRINT_FIELD_FLAGS(", ", req, idiag_ext,
+					  inet_diag_extended_flags,
+					  "1<<INET_DIAG_\?\?\?-1");
+			PRINT_FIELD_INET_DIAG_SOCKID(", ", req, id,
+						     req.idiag_family);
+			PRINT_FIELD_FLAGS(", ", req, idiag_states,
+					  tcp_state_flags, "1<<TCP_???");
+			PRINT_FIELD_U(", ", req, idiag_dbs);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(req));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      inet_diag_req_attrs, "INET_DIAG_REQ_???",
+			      inet_diag_req_nla_decoders,
+			      ARRAY_SIZE(inet_diag_req_nla_decoders), NULL);
+	}
+}
+
+static void
+decode_inet_diag_req_v2(struct tcb *const tcp,
+			const struct nlmsghdr *const nlmsghdr,
+			const uint8_t family,
+			const kernel_ulong_t addr,
+			const unsigned int len)
+{
+	struct inet_diag_req_v2 req = { .sdiag_family = family };
+	size_t offset = sizeof(req.sdiag_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", req, sdiag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(req)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(req) - offset,
+					 (void *) &req + offset)) {
+			PRINT_FIELD_XVAL("", req, sdiag_protocol,
+					 inet_protocols, "IPPROTO_???");
+			PRINT_FIELD_FLAGS(", ", req, idiag_ext,
+					  inet_diag_extended_flags,
+					  "1<<INET_DIAG_\?\?\?-1");
+			PRINT_FIELD_FLAGS(", ", req, idiag_states,
+					  tcp_state_flags, "1<<TCP_???");
+			PRINT_FIELD_INET_DIAG_SOCKID(", ", req, id,
+						     req.sdiag_family);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(req));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      inet_diag_req_attrs, "INET_DIAG_REQ_???",
+			      inet_diag_req_nla_decoders,
+			      ARRAY_SIZE(inet_diag_req_nla_decoders), NULL);
+	}
+}
+
+DECL_NETLINK_DIAG_DECODER(decode_inet_diag_req)
+{
+	if (nlmsghdr->nlmsg_type == TCPDIAG_GETSOCK
+	    || nlmsghdr->nlmsg_type == DCCPDIAG_GETSOCK)
+		return decode_inet_diag_req_compat(tcp, nlmsghdr,
+						   family, addr, len);
+	else
+		return decode_inet_diag_req_v2(tcp, nlmsghdr,
+					       family, addr, len);
+}
+
+static bool
+decode_inet_diag_meminfo(struct tcb *const tcp,
+			 const kernel_ulong_t addr,
+			 const unsigned int len,
+			 const void *const opaque_data)
+{
+	struct inet_diag_meminfo minfo;
+
+	if (len < sizeof(minfo))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &minfo))
+		return true;
+
+	PRINT_FIELD_U("{", minfo, idiag_rmem);
+	PRINT_FIELD_U(", ", minfo, idiag_wmem);
+	PRINT_FIELD_U(", ", minfo, idiag_fmem);
+	PRINT_FIELD_U(", ", minfo, idiag_tmem);
+	tprints("}");
+
+	return true;
+}
+
+static bool
+decode_tcpvegas_info(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	struct tcpvegas_info vegas;
+
+	if (len < sizeof(vegas))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &vegas))
+		return true;
+
+	PRINT_FIELD_U("{", vegas, tcpv_enabled);
+	PRINT_FIELD_U(", ", vegas, tcpv_rttcnt);
+	PRINT_FIELD_U(", ", vegas, tcpv_rtt);
+	PRINT_FIELD_U(", ", vegas, tcpv_minrtt);
+	tprints("}");
+
+	return true;
+}
+
+static bool
+decode_tcp_dctcp_info(struct tcb *const tcp,
+		      const kernel_ulong_t addr,
+		      const unsigned int len,
+		      const void *const opaque_data)
+{
+	struct tcp_dctcp_info dctcp;
+
+	if (len < sizeof(dctcp))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &dctcp))
+		return true;
+
+	PRINT_FIELD_U("{", dctcp, dctcp_enabled);
+	PRINT_FIELD_U(", ", dctcp, dctcp_ce_state);
+	PRINT_FIELD_U(", ", dctcp, dctcp_alpha);
+	PRINT_FIELD_U(", ", dctcp, dctcp_ab_ecn);
+	PRINT_FIELD_U(", ", dctcp, dctcp_ab_tot);
+	tprints("}");
+
+	return true;
+}
+
+static bool
+decode_tcp_bbr_info(struct tcb *const tcp,
+		    const kernel_ulong_t addr,
+		    const unsigned int len,
+		    const void *const opaque_data)
+{
+	struct tcp_bbr_info bbr;
+
+	if (len < sizeof(bbr))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &bbr))
+		return true;
+
+	PRINT_FIELD_X("{", bbr, bbr_bw_lo);
+	PRINT_FIELD_X(", ", bbr, bbr_bw_hi);
+	PRINT_FIELD_U(", ", bbr, bbr_min_rtt);
+	PRINT_FIELD_U(", ", bbr, bbr_pacing_gain);
+	PRINT_FIELD_U(", ", bbr, bbr_cwnd_gain);
+	tprints("}");
+
+	return true;
+}
+
+static const nla_decoder_t inet_diag_msg_nla_decoders[] = {
+	[INET_DIAG_MEMINFO]	= decode_inet_diag_meminfo,
+	[INET_DIAG_INFO]	= NULL,			/* unimplemented */
+	[INET_DIAG_VEGASINFO]	= decode_tcpvegas_info,
+	[INET_DIAG_CONG]	= decode_nla_str,
+	[INET_DIAG_TOS]		= decode_nla_u8,
+	[INET_DIAG_TCLASS]	= decode_nla_u8,
+	[INET_DIAG_SKMEMINFO]	= decode_nla_meminfo,
+	[INET_DIAG_SHUTDOWN]	= decode_nla_u8,
+	[INET_DIAG_DCTCPINFO]	= decode_tcp_dctcp_info,
+	[INET_DIAG_PROTOCOL]	= decode_nla_u8,
+	[INET_DIAG_SKV6ONLY]	= decode_nla_u8,
+	[INET_DIAG_LOCALS]	= NULL,			/* unimplemented */
+	[INET_DIAG_PEERS]	= NULL,			/* unimplemented */
+	[INET_DIAG_PAD]		= NULL,
+	[INET_DIAG_MARK]	= decode_nla_u32,
+	[INET_DIAG_BBRINFO]	= decode_tcp_bbr_info
+};
+
+DECL_NETLINK_DIAG_DECODER(decode_inet_diag_msg)
+{
+	struct inet_diag_msg msg = { .idiag_family = family };
+	size_t offset = sizeof(msg.idiag_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", msg, idiag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(msg)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(msg) - offset,
+					 (void *) &msg + offset)) {
+			PRINT_FIELD_XVAL("", msg, idiag_state,
+					 tcp_states, "TCP_???");
+			PRINT_FIELD_U(", ", msg, idiag_timer);
+			PRINT_FIELD_U(", ", msg, idiag_retrans);
+			PRINT_FIELD_INET_DIAG_SOCKID(", ", msg, id,
+						     msg.idiag_family);
+			PRINT_FIELD_U(", ", msg, idiag_expires);
+			PRINT_FIELD_U(", ", msg, idiag_rqueue);
+			PRINT_FIELD_U(", ", msg, idiag_wqueue);
+			PRINT_FIELD_U(", ", msg, idiag_uid);
+			PRINT_FIELD_U(", ", msg, idiag_inode);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(msg));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      inet_diag_attrs, "INET_DIAG_???",
+			      inet_diag_msg_nla_decoders,
+			      ARRAY_SIZE(inet_diag_msg_nla_decoders), NULL);
+	}
+}
diff --git a/netlink_netlink_diag.c b/netlink_netlink_diag.c
new file mode 100644
index 0000000..65d4195
--- /dev/null
+++ b/netlink_netlink_diag.c
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink.h"
+#include "netlink_sock_diag.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include <linux/sock_diag.h>
+#include <linux/netlink_diag.h>
+
+#include "xlat/netlink_diag_attrs.h"
+#include "xlat/netlink_diag_show.h"
+#include "xlat/netlink_socket_flags.h"
+#include "xlat/netlink_states.h"
+
+DECL_NETLINK_DIAG_DECODER(decode_netlink_diag_req)
+{
+	struct netlink_diag_req req = { .sdiag_family = family };
+	const size_t offset = sizeof(req.sdiag_family);
+
+	PRINT_FIELD_XVAL("{", req, sdiag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(req)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(req) - offset,
+					 (void *) &req + offset)) {
+			if (NDIAG_PROTO_ALL == req.sdiag_protocol)
+				tprintf("%s=%s",
+					"sdiag_protocol", "NDIAG_PROTO_ALL");
+			else
+				PRINT_FIELD_XVAL("", req, sdiag_protocol,
+						 netlink_protocols,
+						 "NETLINK_???");
+			PRINT_FIELD_U(", ", req, ndiag_ino);
+			PRINT_FIELD_FLAGS(", ", req, ndiag_show,
+					  netlink_diag_show, "NDIAG_SHOW_???");
+			PRINT_FIELD_COOKIE(", ", req, ndiag_cookie);
+		}
+	} else
+		tprints("...");
+	tprints("}");
+}
+
+static bool
+print_group(struct tcb *const tcp,
+	    void *const elem_buf,
+	    const size_t elem_size,
+	    void *const opaque_data)
+{
+	if (elem_size < sizeof(kernel_ulong_t))
+		tprintf("%#0*x", (int) elem_size * 2 + 2,
+			*(unsigned int *) elem_buf);
+	else
+		tprintf("%#0*" PRI_klx, (int) elem_size * 2 + 2,
+			*(kernel_ulong_t *) elem_buf);
+
+	return true;
+}
+
+static bool
+decode_netlink_diag_groups(struct tcb *const tcp,
+			   const kernel_ulong_t addr,
+			   const unsigned int len,
+			   const void *const opaque_data)
+{
+	kernel_ulong_t buf;
+	const size_t nmemb = len / current_wordsize;
+
+	if (!nmemb)
+		return false;
+
+	print_array(tcp, addr, nmemb, &buf, current_wordsize,
+		    umoven_or_printaddr, print_group, 0);
+
+	return true;
+}
+
+static bool
+decode_netlink_diag_ring(struct tcb *const tcp,
+			 const kernel_ulong_t addr,
+			 const unsigned int len,
+			 const void *const opaque_data)
+{
+	struct netlink_diag_ring ndr;
+
+	if (len < sizeof(ndr))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &ndr))
+		return true;
+
+	PRINT_FIELD_U("{", ndr, ndr_block_size);
+	PRINT_FIELD_U(", ", ndr, ndr_block_nr);
+	PRINT_FIELD_U(", ", ndr, ndr_frame_size);
+	PRINT_FIELD_U(", ", ndr, ndr_frame_nr);
+	tprints("}");
+
+	return true;
+}
+
+static bool
+decode_netlink_diag_flags(struct tcb *const tcp,
+			  const kernel_ulong_t addr,
+			  const unsigned int len,
+			  const void *const opaque_data)
+{
+	uint32_t flags;
+
+	if (len < sizeof(flags))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &flags))
+		return true;
+
+	printflags(netlink_socket_flags, flags, "NDIAG_FLAG_???");
+
+	return true;
+}
+
+static const nla_decoder_t netlink_diag_msg_nla_decoders[] = {
+	[NETLINK_DIAG_MEMINFO]	= decode_nla_meminfo,
+	[NETLINK_DIAG_GROUPS]	= decode_netlink_diag_groups,
+	[NETLINK_DIAG_RX_RING]	= decode_netlink_diag_ring,
+	[NETLINK_DIAG_TX_RING]	= decode_netlink_diag_ring,
+	[NETLINK_DIAG_FLAGS]	= decode_netlink_diag_flags
+};
+
+DECL_NETLINK_DIAG_DECODER(decode_netlink_diag_msg)
+{
+	struct netlink_diag_msg msg = { .ndiag_family = family };
+	size_t offset = sizeof(msg.ndiag_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", msg, ndiag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(msg)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(msg) - offset,
+					 (void *) &msg + offset)) {
+			PRINT_FIELD_XVAL("", msg, ndiag_type,
+					 socktypes, "SOCK_???");
+			PRINT_FIELD_XVAL(", ", msg, ndiag_protocol,
+					 netlink_protocols, "NETLINK_???");
+			PRINT_FIELD_XVAL(", ", msg, ndiag_state,
+					 netlink_states, "NETLINK_???");
+			PRINT_FIELD_U(", ", msg, ndiag_portid);
+			PRINT_FIELD_U(", ", msg, ndiag_dst_portid);
+			PRINT_FIELD_U(", ", msg, ndiag_dst_group);
+			PRINT_FIELD_U(", ", msg, ndiag_ino);
+			PRINT_FIELD_COOKIE(", ", msg, ndiag_cookie);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(msg));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      netlink_diag_attrs, "NETLINK_DIAG_???",
+			      netlink_diag_msg_nla_decoders,
+			      ARRAY_SIZE(netlink_diag_msg_nla_decoders), NULL);
+	}
+}
diff --git a/netlink_packet_diag.c b/netlink_packet_diag.c
new file mode 100644
index 0000000..8a69d4c
--- /dev/null
+++ b/netlink_packet_diag.c
@@ -0,0 +1,210 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink.h"
+#include "netlink_sock_diag.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include <linux/filter.h>
+#include <linux/sock_diag.h>
+#include <linux/packet_diag.h>
+
+#include "xlat/packet_diag_attrs.h"
+#include "xlat/packet_diag_info_flags.h"
+#include "xlat/packet_diag_show.h"
+
+DECL_NETLINK_DIAG_DECODER(decode_packet_diag_req)
+{
+	struct packet_diag_req req = { .sdiag_family = family };
+	const size_t offset = sizeof(req.sdiag_family);
+
+	PRINT_FIELD_XVAL("{", req, sdiag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(req)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(req) - offset,
+					 (void *) &req + offset)) {
+			PRINT_FIELD_XVAL("", req, sdiag_protocol,
+					 ethernet_protocols, "ETH_P_???");
+			PRINT_FIELD_U(", ", req, pdiag_ino);
+			PRINT_FIELD_FLAGS(", ", req, pdiag_show,
+					  packet_diag_show, "PACKET_SHOW_???");
+			PRINT_FIELD_COOKIE(", ", req, pdiag_cookie);
+		}
+	} else
+		tprints("...");
+	tprints("}");
+}
+
+static bool
+decode_packet_diag_info(struct tcb *const tcp,
+			const kernel_ulong_t addr,
+			const unsigned int len,
+			const void *const opaque_data)
+{
+	struct packet_diag_info pinfo;
+
+	if (len < sizeof(pinfo))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &pinfo))
+		return true;
+
+	PRINT_FIELD_U("{", pinfo, pdi_index);
+	PRINT_FIELD_U(", ", pinfo, pdi_version);
+	PRINT_FIELD_U(", ", pinfo, pdi_reserve);
+	PRINT_FIELD_U(", ", pinfo, pdi_copy_thresh);
+	PRINT_FIELD_U(", ", pinfo, pdi_tstamp);
+	PRINT_FIELD_FLAGS(", ", pinfo, pdi_flags,
+			  packet_diag_info_flags, "PDI_???");
+	tprints("}");
+
+	return true;
+}
+
+static bool
+print_packet_diag_mclist(struct tcb *const tcp, void *const elem_buf,
+			 const size_t elem_size, void *const opaque_data)
+{
+	struct packet_diag_mclist *dml = elem_buf;
+	uint16_t alen = dml->pdmc_alen > sizeof(dml->pdmc_addr) ?
+		sizeof(dml->pdmc_addr) : dml->pdmc_alen;
+
+	PRINT_FIELD_IFINDEX("{", *dml, pdmc_index);
+	PRINT_FIELD_U(", ", *dml, pdmc_count);
+	PRINT_FIELD_U(", ", *dml, pdmc_type);
+	PRINT_FIELD_U(", ", *dml, pdmc_alen);
+	PRINT_FIELD_STRING(", ", *dml, pdmc_addr, alen, QUOTE_FORCE_HEX);
+	tprints("}");
+
+	return true;
+}
+
+static bool
+decode_packet_diag_mclist(struct tcb *const tcp,
+			  const kernel_ulong_t addr,
+			  const unsigned int len,
+			  const void *const opaque_data)
+{
+	struct packet_diag_mclist dml;
+	const size_t nmemb = len / sizeof(dml);
+
+	if (!nmemb)
+		return false;
+
+	print_array(tcp, addr, nmemb, &dml, sizeof(dml),
+		    umoven_or_printaddr, print_packet_diag_mclist, 0);
+
+	return true;
+}
+
+static bool
+decode_packet_diag_ring(struct tcb *const tcp,
+			const kernel_ulong_t addr,
+			const unsigned int len,
+			const void *const opaque_data)
+{
+	struct packet_diag_ring pdr;
+
+	if (len < sizeof(pdr))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &pdr))
+		return true;
+
+	PRINT_FIELD_U("{", pdr, pdr_block_size);
+	PRINT_FIELD_U(", ", pdr, pdr_block_nr);
+	PRINT_FIELD_U(", ", pdr, pdr_frame_size);
+	PRINT_FIELD_U(", ", pdr, pdr_frame_nr);
+	PRINT_FIELD_U(", ", pdr, pdr_retire_tmo);
+	PRINT_FIELD_U(", ", pdr, pdr_sizeof_priv);
+	PRINT_FIELD_U(", ", pdr, pdr_features);
+	tprints("}");
+
+	return true;
+}
+
+static bool
+decode_packet_diag_filter(struct tcb *const tcp,
+			  const kernel_ulong_t addr,
+			  const unsigned int len,
+			  const void *const opaque_data)
+{
+	const unsigned int nmemb = len / sizeof(struct sock_filter);
+	if (!nmemb || (unsigned short) nmemb != nmemb)
+		return false;
+
+	print_sock_fprog(tcp, addr, nmemb);
+
+	return true;
+}
+
+static const nla_decoder_t packet_diag_msg_nla_decoders[] = {
+	[PACKET_DIAG_INFO]	= decode_packet_diag_info,
+	[PACKET_DIAG_MCLIST]	= decode_packet_diag_mclist,
+	[PACKET_DIAG_RX_RING]	= decode_packet_diag_ring,
+	[PACKET_DIAG_TX_RING]	= decode_packet_diag_ring,
+	[PACKET_DIAG_FANOUT]	= decode_nla_u32,
+	[PACKET_DIAG_UID]	= decode_nla_u32,
+	[PACKET_DIAG_MEMINFO]	= decode_nla_meminfo,
+	[PACKET_DIAG_FILTER]	= decode_packet_diag_filter
+};
+
+DECL_NETLINK_DIAG_DECODER(decode_packet_diag_msg)
+{
+	struct packet_diag_msg msg = { .pdiag_family = family };
+	size_t offset = sizeof(msg.pdiag_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", msg, pdiag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(msg)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(msg) - offset,
+					 (void *) &msg + offset)) {
+			PRINT_FIELD_XVAL("", msg, pdiag_type,
+					 socktypes, "SOCK_???");
+			PRINT_FIELD_U(", ", msg, pdiag_num);
+			PRINT_FIELD_U(", ", msg, pdiag_ino);
+			PRINT_FIELD_COOKIE(", ", msg, pdiag_cookie);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(msg));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      packet_diag_attrs, "PACKET_DIAG_???",
+			      packet_diag_msg_nla_decoders,
+			      ARRAY_SIZE(packet_diag_msg_nla_decoders), NULL);
+	}
+}
diff --git a/netlink_route.c b/netlink_route.c
new file mode 100644
index 0000000..7afc9c9
--- /dev/null
+++ b/netlink_route.c
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink.h"
+#include "netlink_route.h"
+
+#include <linux/rtnetlink.h>
+
+#include "xlat/nl_route_types.h"
+
+static void
+decode_family(struct tcb *const tcp, const uint8_t family,
+	      const kernel_ulong_t addr, const unsigned int len)
+{
+	tprints("{family=");
+	printxval(addrfams, family, "AF_???");
+	if (len > sizeof(family)) {
+		tprints(", ");
+		printstr_ex(tcp, addr + sizeof(family),
+			    len - sizeof(family), QUOTE_FORCE_HEX);
+	}
+	tprints("}");
+}
+
+typedef DECL_NETLINK_ROUTE_DECODER((*netlink_route_decoder_t));
+
+static const netlink_route_decoder_t route_decoders[] = {
+	[RTM_DELLINK - RTM_BASE] = decode_ifinfomsg,
+	[RTM_GETLINK - RTM_BASE] = decode_ifinfomsg,
+	[RTM_NEWLINK - RTM_BASE] = decode_ifinfomsg,
+	[RTM_SETLINK - RTM_BASE] = decode_ifinfomsg,
+
+	[RTM_DELADDR - RTM_BASE] = decode_ifaddrmsg,
+	[RTM_GETADDR - RTM_BASE] = decode_ifaddrmsg,
+	[RTM_GETANYCAST - RTM_BASE] = decode_ifaddrmsg,
+	[RTM_GETMULTICAST - RTM_BASE] = decode_ifaddrmsg,
+	[RTM_NEWADDR - RTM_BASE] = decode_ifaddrmsg,
+
+	[RTM_DELROUTE - RTM_BASE] = decode_rtmsg,
+	[RTM_GETROUTE - RTM_BASE] = decode_rtmsg,
+	[RTM_NEWROUTE - RTM_BASE] = decode_rtmsg,
+
+	[RTM_DELRULE - RTM_BASE] = decode_fib_rule_hdr,
+	[RTM_GETRULE - RTM_BASE] = decode_fib_rule_hdr,
+	[RTM_NEWRULE - RTM_BASE] = decode_fib_rule_hdr,
+
+	[RTM_DELNEIGH - RTM_BASE] = decode_ndmsg,
+	[RTM_GETNEIGH - RTM_BASE] = decode_rtm_getneigh,
+	[RTM_NEWNEIGH - RTM_BASE] = decode_ndmsg,
+
+	[RTM_GETNEIGHTBL - RTM_BASE] = decode_ndtmsg,
+	[RTM_NEWNEIGHTBL - RTM_BASE] = decode_ndtmsg,
+	[RTM_SETNEIGHTBL - RTM_BASE] = decode_ndtmsg,
+
+	[RTM_DELQDISC - RTM_BASE] = decode_tcmsg,
+	[RTM_GETQDISC - RTM_BASE] = decode_tcmsg,
+	[RTM_NEWQDISC - RTM_BASE] = decode_tcmsg,
+	[RTM_DELTCLASS - RTM_BASE] = decode_tcmsg,
+	[RTM_GETTCLASS - RTM_BASE] = decode_tcmsg,
+	[RTM_NEWTCLASS - RTM_BASE] = decode_tcmsg,
+	[RTM_DELTFILTER - RTM_BASE] = decode_tcmsg,
+	[RTM_GETTFILTER - RTM_BASE] = decode_tcmsg,
+	[RTM_NEWTFILTER - RTM_BASE] = decode_tcmsg,
+
+	[RTM_DELACTION - RTM_BASE] = decode_tcamsg,
+	[RTM_GETACTION - RTM_BASE] = decode_tcamsg,
+	[RTM_NEWACTION - RTM_BASE] = decode_tcamsg,
+
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+	[RTM_DELADDRLABEL - RTM_BASE] = decode_ifaddrlblmsg,
+	[RTM_GETADDRLABEL - RTM_BASE] = decode_ifaddrlblmsg,
+	[RTM_NEWADDRLABEL - RTM_BASE] = decode_ifaddrlblmsg,
+#endif
+
+#ifdef HAVE_STRUCT_DCBMSG
+	[RTM_GETDCB - RTM_BASE] = decode_dcbmsg,
+	[RTM_SETDCB - RTM_BASE] = decode_dcbmsg,
+#endif
+
+#ifdef HAVE_STRUCT_NETCONFMSG
+	[RTM_DELNETCONF - RTM_BASE] = decode_netconfmsg,
+	[RTM_GETNETCONF - RTM_BASE] = decode_netconfmsg,
+	[RTM_NEWNETCONF - RTM_BASE] = decode_netconfmsg,
+#endif
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+	[RTM_DELMDB - RTM_BASE] = decode_br_port_msg,
+	[RTM_GETMDB - RTM_BASE] = decode_br_port_msg,
+	[RTM_NEWMDB - RTM_BASE] = decode_br_port_msg,
+#endif
+
+	[RTM_DELNSID - RTM_BASE] = decode_rtgenmsg,
+	[RTM_GETNSID - RTM_BASE] = decode_rtgenmsg,
+	[RTM_NEWNSID - RTM_BASE] = decode_rtgenmsg
+};
+
+bool
+decode_netlink_route(struct tcb *const tcp,
+		     const struct nlmsghdr *const nlmsghdr,
+		     const kernel_ulong_t addr,
+		     const unsigned int len)
+{
+	uint8_t family;
+
+	if (nlmsghdr->nlmsg_type == NLMSG_DONE)
+		return false;
+
+	if (!umove_or_printaddr(tcp, addr, &family)) {
+		const unsigned int index = nlmsghdr->nlmsg_type - RTM_BASE;
+
+		if (index < ARRAY_SIZE(route_decoders)
+		    && route_decoders[index]) {
+			route_decoders[index](tcp, nlmsghdr, family, addr, len);
+		} else {
+			decode_family(tcp, family, addr, len);
+		}
+	}
+
+	return true;
+}
diff --git a/netlink_route.h b/netlink_route.h
new file mode 100644
index 0000000..5f97250
--- /dev/null
+++ b/netlink_route.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_NETLINK_ROUTE_H
+#define STRACE_NETLINK_ROUTE_H
+
+#define DECL_NETLINK_ROUTE_DECODER(route_decode_name)	\
+void							\
+route_decode_name(struct tcb *tcp,			\
+		  const struct nlmsghdr *nlmsghdr,	\
+		  uint8_t family,			\
+		  kernel_ulong_t addr,			\
+		  unsigned int len)			\
+/* End of DECL_NETLINK_ROUTE_DECODER definition. */
+
+extern DECL_NETLINK_ROUTE_DECODER(decode_br_port_msg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_dcbmsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_fib_rule_hdr);
+extern DECL_NETLINK_ROUTE_DECODER(decode_ifaddrlblmsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_ifaddrmsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_ndmsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_ndtmsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_netconfmsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_rtgenmsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_rtm_getneigh);
+extern DECL_NETLINK_ROUTE_DECODER(decode_rtmsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_tcamsg);
+extern DECL_NETLINK_ROUTE_DECODER(decode_tcmsg);
+
+#endif /* !STRACE_NETLINK_ROUTE_H */
diff --git a/netlink_selinux.c b/netlink_selinux.c
new file mode 100644
index 0000000..0bba3cf
--- /dev/null
+++ b/netlink_selinux.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink.h"
+#include "print_fields.h"
+
+#include <linux/selinux_netlink.h>
+
+bool
+decode_netlink_selinux(struct tcb *const tcp,
+		       const struct nlmsghdr *const nlmsghdr,
+		       const kernel_ulong_t addr,
+		       const unsigned int len)
+{
+	switch (nlmsghdr->nlmsg_type) {
+	case SELNL_MSG_SETENFORCE: {
+		struct selnl_msg_setenforce msg;
+
+		if (len < sizeof(msg))
+			printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+		else if (!umove_or_printaddr(tcp, addr, &msg)) {
+			PRINT_FIELD_D("{", msg, val);
+			tprints("}");
+		}
+		break;
+	}
+	case SELNL_MSG_POLICYLOAD: {
+		struct selnl_msg_policyload msg;
+
+		if (len < sizeof(msg))
+			printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+		else if (!umove_or_printaddr(tcp, addr, &msg)) {
+			PRINT_FIELD_U("{", msg, seqno);
+			tprints("}");
+		}
+		break;
+	}
+	default:
+		return false;
+	}
+
+	return true;
+}
diff --git a/netlink_smc_diag.c b/netlink_smc_diag.c
new file mode 100644
index 0000000..53ae27b
--- /dev/null
+++ b/netlink_smc_diag.c
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include <sys/socket.h>
+
+#ifdef AF_SMC
+
+# include "netlink.h"
+# include "netlink_sock_diag.h"
+# include "nlattr.h"
+# include "print_fields.h"
+
+# include <arpa/inet.h>
+# include <linux/smc_diag.h>
+
+# include "xlat/smc_diag_attrs.h"
+# include "xlat/smc_diag_extended_flags.h"
+# include "xlat/smc_link_group_roles.h"
+# include "xlat/smc_states.h"
+
+DECL_NETLINK_DIAG_DECODER(decode_smc_diag_req)
+{
+	struct smc_diag_req req = { .diag_family = family };
+	const size_t offset = sizeof(req.diag_family);
+
+	PRINT_FIELD_XVAL("{", req, diag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(req)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(req) - offset,
+					 (void *) &req + offset)) {
+			PRINT_FIELD_FLAGS("", req, diag_ext,
+					  smc_diag_extended_flags,
+					  "1<<SMC_DIAG_\?\?\?-1");
+			/*
+			 * AF_SMC protocol family socket handler
+			 * keeping the AF_INET sock address.
+			 */
+			PRINT_FIELD_INET_DIAG_SOCKID(", ", req, id, AF_INET);
+		}
+	} else
+		tprints("...");
+	tprints("}");
+}
+
+static void
+print_smc_diag_cursor(const struct smc_diag_cursor *const cursor)
+{
+	PRINT_FIELD_U("{", *cursor, reserved);
+	PRINT_FIELD_U(", ", *cursor, wrap);
+	PRINT_FIELD_U(", ", *cursor, count);
+	tprints("}");
+}
+
+# define PRINT_FIELD_SMC_DIAG_CURSOR(prefix_, where_, field_)		\
+	do {								\
+		tprintf("%s%s=", (prefix_), #field_);			\
+		print_smc_diag_cursor(&(where_).field_);		\
+	} while (0)
+
+static bool
+decode_smc_diag_conninfo(struct tcb *const tcp,
+			 const kernel_ulong_t addr,
+			 const unsigned int len,
+			 const void *const opaque_data)
+{
+	struct smc_diag_conninfo cinfo;
+
+	if (len < sizeof(cinfo))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &cinfo))
+		return true;
+
+	PRINT_FIELD_U("{", cinfo, token);
+	PRINT_FIELD_U(", ", cinfo, sndbuf_size);
+	PRINT_FIELD_U(", ", cinfo, rmbe_size);
+	PRINT_FIELD_U(", ", cinfo, peer_rmbe_size);
+	PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, rx_prod);
+	PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, rx_cons);
+	PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_prod);
+	PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_cons);
+	PRINT_FIELD_0X(", ", cinfo, rx_prod_flags);
+	PRINT_FIELD_0X(", ", cinfo, rx_conn_state_flags);
+	PRINT_FIELD_0X(", ", cinfo, tx_prod_flags);
+	PRINT_FIELD_0X(", ", cinfo, tx_conn_state_flags);
+	PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_prep);
+	PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_sent);
+	PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_fin);
+	tprints("}");
+
+	return true;
+}
+
+static bool
+decode_smc_diag_lgrinfo(struct tcb *const tcp,
+			const kernel_ulong_t addr,
+			const unsigned int len,
+			const void *const opaque_data)
+{
+	struct smc_diag_lgrinfo linfo;
+
+	if (len < sizeof(linfo))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &linfo))
+		return true;
+
+	tprints("{lnk[0]={");
+	PRINT_FIELD_U("", linfo.lnk[0], link_id);
+	PRINT_FIELD_CSTRING(", ", linfo.lnk[0], ibname);
+	PRINT_FIELD_U(", ", linfo.lnk[0], ibport);
+	PRINT_FIELD_CSTRING(", ", linfo.lnk[0], gid);
+	PRINT_FIELD_CSTRING(", ", linfo.lnk[0], peer_gid);
+	PRINT_FIELD_XVAL("}, ", linfo, role, smc_link_group_roles, "SMC_???");
+	tprints("}");
+
+	return true;
+}
+
+static const nla_decoder_t smc_diag_msg_nla_decoders[] = {
+	[SMC_DIAG_CONNINFO]	= decode_smc_diag_conninfo,
+	[SMC_DIAG_LGRINFO]	= decode_smc_diag_lgrinfo,
+	[SMC_DIAG_SHUTDOWN]	= decode_nla_u8
+};
+
+DECL_NETLINK_DIAG_DECODER(decode_smc_diag_msg)
+{
+	struct smc_diag_msg msg = { .diag_family = family };
+	size_t offset = sizeof(msg.diag_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", msg, diag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(msg)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(msg) - offset,
+					 (void *) &msg + offset)) {
+			PRINT_FIELD_XVAL("", msg, diag_state,
+					 smc_states, "SMC_???");
+			PRINT_FIELD_U(", ", msg, diag_fallback);
+			PRINT_FIELD_U(", ", msg, diag_shutdown);
+			/*
+			 * AF_SMC protocol family socket handler
+			 * keeping the AF_INET sock address.
+			 */
+			PRINT_FIELD_INET_DIAG_SOCKID(", ", msg, id, AF_INET);
+			PRINT_FIELD_U(", ", msg, diag_uid);
+			PRINT_FIELD_U(", ", msg, diag_inode);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(msg));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      smc_diag_attrs, "SMC_DIAG_???",
+			      smc_diag_msg_nla_decoders,
+			      ARRAY_SIZE(smc_diag_msg_nla_decoders), NULL);
+	}
+}
+
+#endif /* AF_SMC */
diff --git a/netlink_sock_diag.c b/netlink_sock_diag.c
index 3888934..dd1e03d 100644
--- a/netlink_sock_diag.c
+++ b/netlink_sock_diag.c
@@ -29,816 +29,23 @@
 
 #include "defs.h"
 #include "netlink.h"
-#include "nlattr.h"
-#include "print_fields.h"
-
-#include <arpa/inet.h>
-#include <linux/inet_diag.h>
-#include <linux/netlink_diag.h>
-#include <linux/packet_diag.h>
-#ifdef AF_SMC
-# include <linux/smc_diag.h>
-#endif
-#include <linux/sock_diag.h>
-#include <linux/unix_diag.h>
-
-#include "xlat/inet_diag_attrs.h"
-#include "xlat/inet_diag_extended_flags.h"
-#include "xlat/inet_diag_req_attrs.h"
-
-#include "xlat/tcp_states.h"
-#include "xlat/tcp_state_flags.h"
-
-#include "xlat/netlink_diag_attrs.h"
-#include "xlat/netlink_diag_show.h"
-#include "xlat/netlink_socket_flags.h"
-#include "xlat/netlink_states.h"
-
-#include "xlat/packet_diag_attrs.h"
-#include "xlat/packet_diag_show.h"
-
-#ifdef AF_SMC
-# include "xlat/smc_diag_attrs.h"
-# include "xlat/smc_diag_extended_flags.h"
-# include "xlat/smc_states.h"
-#endif
-
-#include "xlat/unix_diag_attrs.h"
-#include "xlat/unix_diag_show.h"
+#include "netlink_sock_diag.h"
 
 static void
 decode_family(struct tcb *const tcp, const uint8_t family,
-	      const kernel_ulong_t addr, const kernel_ulong_t len)
+	      const kernel_ulong_t addr, const unsigned int len)
 {
 	tprints("{family=");
 	printxval(addrfams, family, "AF_???");
 	if (len > sizeof(family)) {
 		tprints(", ");
-		printstrn(tcp, addr + sizeof(family),
-			  len - sizeof(family));
+		printstr_ex(tcp, addr + sizeof(family),
+			    len - sizeof(family), QUOTE_FORCE_HEX);
 	}
 	tprints("}");
 }
 
-static void
-decode_unix_diag_req(struct tcb *const tcp,
-		     const struct nlmsghdr *const nlmsghdr,
-		     const uint8_t family,
-		     const kernel_ulong_t addr,
-		     const kernel_ulong_t len)
-{
-	struct unix_diag_req req = { .sdiag_family = family };
-	const size_t offset = sizeof(req.sdiag_family);
-
-	PRINT_FIELD_XVAL("{", req, sdiag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(req)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(req) - offset,
-					 (void *) &req + offset)) {
-			PRINT_FIELD_U("", req, sdiag_protocol);
-			PRINT_FIELD_FLAGS(", ", req, udiag_states,
-					  tcp_state_flags, "1<<TCP_???");
-			PRINT_FIELD_U(", ", req, udiag_ino);
-			PRINT_FIELD_FLAGS(", ", req, udiag_show,
-					  unix_diag_show, "UDIAG_SHOW_???");
-			PRINT_FIELD_COOKIE(", ", req, udiag_cookie);
-		}
-	} else
-		tprints("...");
-	tprints("}");
-}
-
-static bool
-print_meminfo(struct tcb *const tcp,
-	      void *const elem_buf,
-	      const size_t elem_size,
-	      void *const opaque_data)
-{
-	tprintf("%" PRIu32, *(uint32_t *) elem_buf);
-
-	return true;
-}
-
-static bool
-decode_meminfo(struct tcb *const tcp,
-	       const kernel_ulong_t addr,
-	       const kernel_ulong_t len,
-	       const void *const opaque_data)
-{
-	uint32_t mem;
-	size_t nmemb = len / sizeof(mem);
-
-	if (!nmemb)
-		return false;
-
-	if (nmemb > SK_MEMINFO_VARS)
-		nmemb = SK_MEMINFO_VARS;
-
-	print_array(tcp, addr, nmemb, &mem, sizeof(mem),
-		    umoven_or_printaddr, print_meminfo, 0);
-
-	return true;
-}
-
-static bool
-decode_unix_diag_vfs(struct tcb *const tcp,
-		     const kernel_ulong_t addr,
-		     const kernel_ulong_t len,
-		     const void *const opaque_data)
-{
-	struct unix_diag_vfs uv;
-
-	if (len < sizeof(uv))
-		return false;
-	if (umove_or_printaddr(tcp, addr, &uv))
-		return true;
-
-	tprints("{udiag_vfs_dev=");
-	print_dev_t(uv.udiag_vfs_dev);
-	PRINT_FIELD_U(", ", uv, udiag_vfs_ino);
-	tprints("}");
-
-	return true;
-}
-
-static bool
-print_inode(struct tcb *const tcp,
-	    void *const elem_buf,
-	    const size_t elem_size,
-	    void *const opaque_data)
-{
-	tprintf("%" PRIu32, *(uint32_t *) elem_buf);
-
-	return true;
-}
-
-static bool
-decode_unix_diag_inode(struct tcb *const tcp,
-		       const kernel_ulong_t addr,
-		       const kernel_ulong_t len,
-		       const void *const opaque_data)
-{
-	uint32_t inode;
-	const size_t nmemb = len / sizeof(inode);
-
-	if (!nmemb)
-		return false;
-
-	print_array(tcp, addr, nmemb, &inode, sizeof(inode),
-		    umoven_or_printaddr, print_inode, 0);
-
-	return true;
-}
-
-static bool
-decode_unix_diag_rqlen(struct tcb *const tcp,
-		       const kernel_ulong_t addr,
-		       const kernel_ulong_t len,
-		       const void *const opaque_data)
-{
-	struct unix_diag_rqlen rql;
-
-	if (len < sizeof(rql))
-		return false;
-	if (umove_or_printaddr(tcp, addr, &rql))
-		return true;
-
-	PRINT_FIELD_U("{", rql, udiag_rqueue);
-	PRINT_FIELD_U(", ", rql, udiag_wqueue);
-	tprints("}");
-
-	return true;
-}
-
-static const nla_decoder_t unix_diag_msg_nla_decoders[] = {
-	[UNIX_DIAG_NAME]	= decode_nla_str,
-	[UNIX_DIAG_VFS]		= decode_unix_diag_vfs,
-	[UNIX_DIAG_PEER]	= decode_nla_u32,
-	[UNIX_DIAG_ICONS]	= decode_unix_diag_inode,
-	[UNIX_DIAG_RQLEN]	= decode_unix_diag_rqlen,
-	[UNIX_DIAG_MEMINFO]	= decode_meminfo,
-	[UNIX_DIAG_SHUTDOWN]	= decode_nla_u8
-};
-
-static void
-decode_unix_diag_msg(struct tcb *const tcp,
-		     const struct nlmsghdr *const nlmsghdr,
-		     const uint8_t family,
-		     const kernel_ulong_t addr,
-		     const kernel_ulong_t len)
-{
-	struct unix_diag_msg msg = { .udiag_family = family };
-	size_t offset = sizeof(msg.udiag_family);
-	bool decode_nla = false;
-
-	PRINT_FIELD_XVAL("{", msg, udiag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(msg)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(msg) - offset,
-					 (void *) &msg + offset)) {
-			PRINT_FIELD_XVAL("", msg, udiag_type,
-					 socktypes, "SOCK_???");
-			PRINT_FIELD_XVAL(", ", msg, udiag_state,
-					 tcp_states, "TCP_???");
-			PRINT_FIELD_U(", ", msg, udiag_ino);
-			PRINT_FIELD_COOKIE(", ", msg, udiag_cookie);
-			decode_nla = true;
-		}
-	} else
-		tprints("...");
-	tprints("}");
-
-	offset = NLMSG_ALIGN(sizeof(msg));
-	if (decode_nla && len > offset) {
-		tprints(", ");
-		decode_nlattr(tcp, addr + offset, len - offset,
-			      unix_diag_attrs, "UNIX_DIAG_???",
-			      unix_diag_msg_nla_decoders,
-			      ARRAY_SIZE(unix_diag_msg_nla_decoders), NULL);
-	}
-}
-
-static void
-decode_netlink_diag_req(struct tcb *const tcp,
-			const struct nlmsghdr *const nlmsghdr,
-			const uint8_t family,
-			const kernel_ulong_t addr,
-			const kernel_ulong_t len)
-{
-	struct netlink_diag_req req = { .sdiag_family = family };
-	const size_t offset = sizeof(req.sdiag_family);
-
-	PRINT_FIELD_XVAL("{", req, sdiag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(req)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(req) - offset,
-					 (void *) &req + offset)) {
-			if (NDIAG_PROTO_ALL == req.sdiag_protocol)
-				tprintf("%s=%s",
-					"sdiag_protocol", "NDIAG_PROTO_ALL");
-			else
-				PRINT_FIELD_XVAL("", req, sdiag_protocol,
-						 netlink_protocols,
-						 "NETLINK_???");
-			PRINT_FIELD_U(", ", req, ndiag_ino);
-			PRINT_FIELD_FLAGS(", ", req, ndiag_show,
-					  netlink_diag_show, "NDIAG_SHOW_???");
-			PRINT_FIELD_COOKIE(", ", req, ndiag_cookie);
-		}
-	} else
-		tprints("...");
-	tprints("}");
-}
-
-static bool
-print_group(struct tcb *const tcp,
-	    void *const elem_buf,
-	    const size_t elem_size,
-	    void *const opaque_data)
-{
-	if (elem_size < sizeof(kernel_ulong_t))
-		tprintf("%#0*x", (int) elem_size * 2 + 2,
-			*(unsigned int *) elem_buf);
-	else
-		tprintf("%#0*" PRI_klx, (int) elem_size * 2 + 2,
-			*(kernel_ulong_t *) elem_buf);
-
-	return true;
-}
-
-static bool
-decode_netlink_diag_groups(struct tcb *const tcp,
-			   const kernel_ulong_t addr,
-			   const kernel_ulong_t len,
-			   const void *const opaque_data)
-{
-	kernel_ulong_t buf;
-	const size_t nmemb = len / current_wordsize;
-
-	if (!nmemb)
-		return false;
-
-	print_array(tcp, addr, nmemb, &buf, current_wordsize,
-		    umoven_or_printaddr, print_group, 0);
-
-	return true;
-}
-
-static bool
-decode_netlink_diag_ring(struct tcb *const tcp,
-			 const kernel_ulong_t addr,
-			 const kernel_ulong_t len,
-			 const void *const opaque_data)
-{
-	struct netlink_diag_ring ndr;
-
-	if (len < sizeof(ndr))
-		return false;
-	if (umove_or_printaddr(tcp, addr, &ndr))
-		return true;
-
-	PRINT_FIELD_U("{", ndr, ndr_block_size);
-	PRINT_FIELD_U(", ", ndr, ndr_block_nr);
-	PRINT_FIELD_U(", ", ndr, ndr_frame_size);
-	PRINT_FIELD_U(", ", ndr, ndr_frame_nr);
-	tprints("}");
-
-	return true;
-}
-
-static bool
-decode_netlink_diag_flags(struct tcb *const tcp,
-			  const kernel_ulong_t addr,
-			  const kernel_ulong_t len,
-			  const void *const opaque_data)
-{
-	uint32_t flags;
-
-	if (len < sizeof(flags))
-		return false;
-	if (umove_or_printaddr(tcp, addr, &flags))
-		return true;
-
-	printflags(netlink_socket_flags, flags, "NDIAG_FLAG_???");
-
-	return true;
-}
-
-static const nla_decoder_t netlink_diag_msg_nla_decoders[] = {
-	[NETLINK_DIAG_MEMINFO]	= decode_meminfo,
-	[NETLINK_DIAG_GROUPS]	= decode_netlink_diag_groups,
-	[NETLINK_DIAG_RX_RING]	= decode_netlink_diag_ring,
-	[NETLINK_DIAG_TX_RING]	= decode_netlink_diag_ring,
-	[NETLINK_DIAG_FLAGS]	= decode_netlink_diag_flags
-};
-
-static void
-decode_netlink_diag_msg(struct tcb *const tcp,
-			const struct nlmsghdr *const nlmsghdr,
-			const uint8_t family,
-			const kernel_ulong_t addr,
-			const kernel_ulong_t len)
-{
-	struct netlink_diag_msg msg = { .ndiag_family = family };
-	size_t offset = sizeof(msg.ndiag_family);
-	bool decode_nla = false;
-
-	PRINT_FIELD_XVAL("{", msg, ndiag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(msg)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(msg) - offset,
-					 (void *) &msg + offset)) {
-			PRINT_FIELD_XVAL("", msg, ndiag_type,
-					 socktypes, "SOCK_???");
-			PRINT_FIELD_XVAL(", ", msg, ndiag_protocol,
-					 netlink_protocols, "NETLINK_???");
-			PRINT_FIELD_XVAL(", ", msg, ndiag_state,
-					 netlink_states, "NETLINK_???");
-			PRINT_FIELD_U(", ", msg, ndiag_portid);
-			PRINT_FIELD_U(", ", msg, ndiag_dst_portid);
-			PRINT_FIELD_U(", ", msg, ndiag_dst_group);
-			PRINT_FIELD_U(", ", msg, ndiag_ino);
-			PRINT_FIELD_COOKIE(", ", msg, ndiag_cookie);
-			decode_nla = true;
-		}
-	} else
-		tprints("...");
-	tprints("}");
-
-	offset = NLA_ALIGN(sizeof(msg));
-	if (decode_nla && len > offset) {
-		tprints(", ");
-		decode_nlattr(tcp, addr + offset, len - offset,
-			      netlink_diag_attrs, "NETLINK_DIAG_???",
-			      netlink_diag_msg_nla_decoders,
-			      ARRAY_SIZE(netlink_diag_msg_nla_decoders), NULL);
-	}
-}
-
-static void
-decode_packet_diag_req(struct tcb *const tcp,
-		       const struct nlmsghdr *const nlmsghdr,
-		       const uint8_t family,
-		       const kernel_ulong_t addr,
-		       const kernel_ulong_t len)
-{
-	struct packet_diag_req req = { .sdiag_family = family };
-	const size_t offset = sizeof(req.sdiag_family);
-
-	PRINT_FIELD_XVAL("{", req, sdiag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(req)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(req) - offset,
-					 (void *) &req + offset)) {
-			PRINT_FIELD_XVAL("", req, sdiag_protocol,
-					 ethernet_protocols, "ETH_P_???");
-			PRINT_FIELD_U(", ", req, pdiag_ino);
-			PRINT_FIELD_FLAGS(", ", req, pdiag_show,
-					  packet_diag_show, "PACKET_SHOW_???");
-			PRINT_FIELD_COOKIE(", ", req, pdiag_cookie);
-		}
-	} else
-		tprints("...");
-	tprints("}");
-}
-
-static void
-decode_packet_diag_msg(struct tcb *const tcp,
-		       const struct nlmsghdr *const nlmsghdr,
-		       const uint8_t family,
-		       const kernel_ulong_t addr,
-		       const kernel_ulong_t len)
-{
-	struct packet_diag_msg msg = { .pdiag_family = family };
-	size_t offset = sizeof(msg.pdiag_family);
-	bool decode_nla = false;
-
-	PRINT_FIELD_XVAL("{", msg, pdiag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(msg)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(msg) - offset,
-					 (void *) &msg + offset)) {
-			PRINT_FIELD_XVAL("", msg, pdiag_type,
-					 socktypes, "SOCK_???");
-			PRINT_FIELD_U(", ", msg, pdiag_num);
-			PRINT_FIELD_U(", ", msg, pdiag_ino);
-			PRINT_FIELD_COOKIE(", ", msg, pdiag_cookie);
-			decode_nla = true;
-		}
-	} else
-		tprints("...");
-	tprints("}");
-
-	offset = NLA_ALIGN(sizeof(msg));
-	if (decode_nla && len > offset) {
-		tprints(", ");
-		decode_nlattr(tcp, addr + offset, len - offset,
-			      packet_diag_attrs, "PACKET_DIAG_???",
-			      NULL, 0, NULL);
-	}
-}
-
-static void
-print_inet_diag_sockid(const struct inet_diag_sockid *id, const uint8_t family)
-{
-	tprintf("{idiag_sport=htons(%u), idiag_dport=htons(%u)",
-		ntohs(id->idiag_sport), ntohs(id->idiag_dport));
-
-	tprints(", ");
-	print_inet_addr(family, id->idiag_src,
-			sizeof(id->idiag_src), "idiag_src");
-	tprints(", ");
-	print_inet_addr(family, id->idiag_dst,
-			sizeof(id->idiag_dst), "idiag_dst");
-
-	tprints(", idiag_if=");
-	print_ifindex(id->idiag_if);
-
-	PRINT_FIELD_COOKIE(", ", *id, idiag_cookie);
-
-	tprints("}");
-}
-
-static void
-decode_inet_diag_req_compat(struct tcb *const tcp,
-			    const struct nlmsghdr *const nlmsghdr,
-			    const uint8_t family,
-			    const kernel_ulong_t addr,
-			    const kernel_ulong_t len)
-{
-	struct inet_diag_req req = { .idiag_family = family };
-	size_t offset = sizeof(req.idiag_family);
-	bool decode_nla = false;
-
-	PRINT_FIELD_XVAL("{", req, idiag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(req)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(req) - offset,
-					 (void *) &req + offset)) {
-			PRINT_FIELD_U("", req, idiag_src_len);
-			PRINT_FIELD_U(", ", req, idiag_dst_len);
-			PRINT_FIELD_FLAGS(", ", req, idiag_ext,
-					  inet_diag_extended_flags,
-					  "1<<INET_DIAG_\?\?\?-1");
-			tprints(", id=");
-			print_inet_diag_sockid(&req.id, req.idiag_family);
-			PRINT_FIELD_FLAGS(", ", req, idiag_states,
-					  tcp_state_flags, "1<<TCP_???");
-			PRINT_FIELD_U(", ", req, idiag_dbs);
-			decode_nla = true;
-		}
-	} else
-		tprints("...");
-	tprints("}");
-
-	offset = NLA_ALIGN(sizeof(req));
-	if (decode_nla && len > offset) {
-		tprints(", ");
-		decode_nlattr(tcp, addr + offset, len - offset,
-			      inet_diag_req_attrs, "INET_DIAG_REQ_???",
-			      NULL, 0, NULL);
-	}
-}
-
-static void
-decode_inet_diag_req_v2(struct tcb *const tcp,
-			const struct nlmsghdr *const nlmsghdr,
-			const uint8_t family,
-			const kernel_ulong_t addr,
-			const kernel_ulong_t len)
-{
-	struct inet_diag_req_v2 req = { .sdiag_family = family };
-	size_t offset = sizeof(req.sdiag_family);
-	bool decode_nla = false;
-
-	PRINT_FIELD_XVAL("{", req, sdiag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(req)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(req) - offset,
-					 (void *) &req + offset)) {
-			PRINT_FIELD_XVAL("", req, sdiag_protocol,
-					 inet_protocols, "IPPROTO_???");
-			PRINT_FIELD_FLAGS(", ", req, idiag_ext,
-					  inet_diag_extended_flags,
-					  "1<<INET_DIAG_\?\?\?-1");
-			PRINT_FIELD_FLAGS(", ", req, idiag_states,
-					  tcp_state_flags, "1<<TCP_???");
-			tprints(", id=");
-			print_inet_diag_sockid(&req.id, req.sdiag_family);
-			decode_nla = true;
-		}
-	} else
-		tprints("...");
-	tprints("}");
-
-	offset = NLA_ALIGN(sizeof(req));
-	if (decode_nla && len > offset) {
-		tprints(", ");
-		decode_nlattr(tcp, addr + offset, len - offset,
-			      inet_diag_req_attrs, "INET_DIAG_REQ_???",
-			      NULL, 0, NULL);
-	}
-}
-
-static void
-decode_inet_diag_req(struct tcb *const tcp,
-		     const struct nlmsghdr *const nlmsghdr,
-		     const uint8_t family,
-		     const kernel_ulong_t addr,
-		     const kernel_ulong_t len)
-{
-	if (nlmsghdr->nlmsg_type == TCPDIAG_GETSOCK
-	    || nlmsghdr->nlmsg_type == DCCPDIAG_GETSOCK)
-		return decode_inet_diag_req_compat(tcp, nlmsghdr,
-						   family, addr, len);
-	else
-		return decode_inet_diag_req_v2(tcp, nlmsghdr,
-					       family, addr, len);
-}
-
-static bool
-decode_inet_diag_meminfo(struct tcb *const tcp,
-			 const kernel_ulong_t addr,
-			 const kernel_ulong_t len,
-			 const void *const opaque_data)
-{
-	struct inet_diag_meminfo minfo;
-
-	if (len < sizeof(minfo))
-		return false;
-	if (umove_or_printaddr(tcp, addr, &minfo))
-		return true;
-
-	PRINT_FIELD_U("{", minfo, idiag_rmem);
-	PRINT_FIELD_U(", ", minfo, idiag_wmem);
-	PRINT_FIELD_U(", ", minfo, idiag_fmem);
-	PRINT_FIELD_U(", ", minfo, idiag_tmem);
-	tprints("}");
-
-	return true;
-}
-
-static bool
-decode_tcpvegas_info(struct tcb *const tcp,
-		     const kernel_ulong_t addr,
-		     const kernel_ulong_t len,
-		     const void *const opaque_data)
-{
-	struct tcpvegas_info vegas;
-
-	if (len < sizeof(vegas))
-		return false;
-	if (umove_or_printaddr(tcp, addr, &vegas))
-		return true;
-
-	PRINT_FIELD_U("{", vegas, tcpv_enabled);
-	PRINT_FIELD_U(", ", vegas, tcpv_rttcnt);
-	PRINT_FIELD_U(", ", vegas, tcpv_rtt);
-	PRINT_FIELD_U(", ", vegas, tcpv_minrtt);
-	tprints("}");
-
-	return true;
-}
-
-static bool
-decode_tcp_dctcp_info(struct tcb *const tcp,
-		      const kernel_ulong_t addr,
-		      const kernel_ulong_t len,
-		      const void *const opaque_data)
-{
-	struct tcp_dctcp_info dctcp;
-
-	if (len < sizeof(dctcp))
-		return false;
-	if (umove_or_printaddr(tcp, addr, &dctcp))
-		return true;
-
-	PRINT_FIELD_U("{", dctcp, dctcp_enabled);
-	PRINT_FIELD_U(", ", dctcp, dctcp_ce_state);
-	PRINT_FIELD_U(", ", dctcp, dctcp_alpha);
-	PRINT_FIELD_U(", ", dctcp, dctcp_ab_ecn);
-	PRINT_FIELD_U(", ", dctcp, dctcp_ab_tot);
-	tprints("}");
-
-	return true;
-}
-
-static bool
-decode_tcp_bbr_info(struct tcb *const tcp,
-		    const kernel_ulong_t addr,
-		    const kernel_ulong_t len,
-		    const void *const opaque_data)
-{
-	struct tcp_bbr_info bbr;
-
-	if (len < sizeof(bbr))
-		return false;
-	if (umove_or_printaddr(tcp, addr, &bbr))
-		return true;
-
-	PRINT_FIELD_X("{", bbr, bbr_bw_lo);
-	PRINT_FIELD_X(", ", bbr, bbr_bw_hi);
-	PRINT_FIELD_U(", ", bbr, bbr_min_rtt);
-	PRINT_FIELD_U(", ", bbr, bbr_pacing_gain);
-	PRINT_FIELD_U(", ", bbr, bbr_cwnd_gain);
-	tprints("}");
-
-	return true;
-}
-
-static const nla_decoder_t inet_diag_msg_nla_decoders[] = {
-	[INET_DIAG_MEMINFO]	= decode_inet_diag_meminfo,
-	[INET_DIAG_INFO]	= NULL,			/* unimplemented */
-	[INET_DIAG_VEGASINFO]	= decode_tcpvegas_info,
-	[INET_DIAG_CONG]	= decode_nla_str,
-	[INET_DIAG_TOS]		= decode_nla_u8,
-	[INET_DIAG_TCLASS]	= decode_nla_u8,
-	[INET_DIAG_SKMEMINFO]	= decode_meminfo,
-	[INET_DIAG_SHUTDOWN]	= decode_nla_u8,
-	[INET_DIAG_DCTCPINFO]	= decode_tcp_dctcp_info,
-	[INET_DIAG_PROTOCOL]	= decode_nla_u8,
-	[INET_DIAG_SKV6ONLY]	= decode_nla_u8,
-	[INET_DIAG_LOCALS]	= NULL,			/* unimplemented */
-	[INET_DIAG_PEERS]	= NULL,			/* unimplemented */
-	[INET_DIAG_PAD]		= NULL,
-	[INET_DIAG_MARK]	= decode_nla_u32,
-	[INET_DIAG_BBRINFO]	= decode_tcp_bbr_info
-};
-
-static void
-decode_inet_diag_msg(struct tcb *const tcp,
-		     const struct nlmsghdr *const nlmsghdr,
-		     const uint8_t family,
-		     const kernel_ulong_t addr,
-		     const kernel_ulong_t len)
-{
-	struct inet_diag_msg msg = { .idiag_family = family };
-	size_t offset = sizeof(msg.idiag_family);
-	bool decode_nla = false;
-
-	PRINT_FIELD_XVAL("{", msg, idiag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(msg)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(msg) - offset,
-					 (void *) &msg + offset)) {
-			PRINT_FIELD_XVAL("", msg, idiag_state,
-					 tcp_states, "TCP_???");
-			PRINT_FIELD_U(", ", msg, idiag_timer);
-			PRINT_FIELD_U(", ", msg, idiag_retrans);
-			tprints(", id=");
-			print_inet_diag_sockid(&msg.id, msg.idiag_family);
-			PRINT_FIELD_U(", ", msg, idiag_expires);
-			PRINT_FIELD_U(", ", msg, idiag_rqueue);
-			PRINT_FIELD_U(", ", msg, idiag_wqueue);
-			PRINT_FIELD_U(", ", msg, idiag_uid);
-			PRINT_FIELD_U(", ", msg, idiag_inode);
-			decode_nla = true;
-		}
-	} else
-		tprints("...");
-	tprints("}");
-
-	offset = NLA_ALIGN(sizeof(msg));
-	if (decode_nla && len > offset) {
-		tprints(", ");
-		decode_nlattr(tcp, addr + offset, len - offset,
-			      inet_diag_attrs, "INET_DIAG_???",
-			      inet_diag_msg_nla_decoders,
-			      ARRAY_SIZE(inet_diag_msg_nla_decoders), NULL);
-	}
-}
-
-#ifdef AF_SMC
-static void
-decode_smc_diag_req(struct tcb *const tcp,
-		    const struct nlmsghdr *const nlmsghdr,
-		    const uint8_t family,
-		    const kernel_ulong_t addr,
-		    const kernel_ulong_t len)
-{
-	struct smc_diag_req req = { .diag_family = family };
-	const size_t offset = sizeof(req.diag_family);
-
-	PRINT_FIELD_XVAL("{", req, diag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(req)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(req) - offset,
-					 (void *) &req + offset)) {
-			PRINT_FIELD_FLAGS("", req, diag_ext,
-					  smc_diag_extended_flags,
-					  "1<<SMC_DIAG_\?\?\?-1");
-			tprints(", id=");
-			/*
-			 * AF_SMC protocol family socket handler
-			 * keeping the AF_INET sock address.
-			 */
-			print_inet_diag_sockid(&req.id, AF_INET);
-		}
-	} else
-		tprints("...");
-	tprints("}");
-}
-
-static void
-decode_smc_diag_msg(struct tcb *const tcp,
-		    const struct nlmsghdr *const nlmsghdr,
-		    const uint8_t family,
-		    const kernel_ulong_t addr,
-		    const kernel_ulong_t len)
-{
-	struct smc_diag_msg msg = { .diag_family = family };
-	size_t offset = sizeof(msg.diag_family);
-	bool decode_nla = false;
-
-	PRINT_FIELD_XVAL("{", msg, diag_family, addrfams, "AF_???");
-	tprints(", ");
-	if (len >= sizeof(msg)) {
-		if (!umoven_or_printaddr(tcp, addr + offset,
-					 sizeof(msg) - offset,
-					 (void *) &msg + offset)) {
-			PRINT_FIELD_XVAL("", msg, diag_state,
-					 smc_states, "SMC_???");
-			PRINT_FIELD_U(", ", msg, diag_fallback);
-			PRINT_FIELD_U(", ", msg, diag_shutdown);
-			tprints(", id=");
-			/*
-			 * AF_SMC protocol family socket handler
-			 * keeping the AF_INET sock address.
-			 */
-			print_inet_diag_sockid(&msg.id, AF_INET);
-			PRINT_FIELD_U(", ", msg, diag_uid);
-			PRINT_FIELD_U(", ", msg, diag_inode);
-			decode_nla = true;
-		}
-	} else
-		tprints("...");
-	tprints("}");
-
-	offset = NLA_ALIGN(sizeof(msg));
-	if (decode_nla && len > offset) {
-		tprints(", ");
-		decode_nlattr(tcp, addr + offset, len - offset,
-			      smc_diag_attrs, "SMC_DIAG_???",
-			      NULL, 0, NULL);
-	}
-}
-#endif
-
-typedef void (*netlink_diag_decoder_t)(struct tcb *,
-				       const struct nlmsghdr *,
-				       uint8_t family,
-				       kernel_ulong_t addr,
-				       kernel_ulong_t len);
+typedef DECL_NETLINK_DIAG_DECODER((*netlink_diag_decoder_t));
 
 static const struct {
 	const netlink_diag_decoder_t request, response;
@@ -857,7 +64,7 @@
 decode_netlink_sock_diag(struct tcb *const tcp,
 			 const struct nlmsghdr *const nlmsghdr,
 			 const kernel_ulong_t addr,
-			 const kernel_ulong_t len)
+			 const unsigned int len)
 {
 	uint8_t family;
 
diff --git a/netlink_sock_diag.h b/netlink_sock_diag.h
new file mode 100644
index 0000000..0fc820b
--- /dev/null
+++ b/netlink_sock_diag.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_NETLINK_SOCK_DIAG_H
+#define STRACE_NETLINK_SOCK_DIAG_H
+
+#define DECL_NETLINK_DIAG_DECODER(diag_decode_name)	\
+void							\
+diag_decode_name(struct tcb *tcp,			\
+		 const struct nlmsghdr *nlmsghdr,	\
+		 uint8_t family,			\
+		 kernel_ulong_t addr,			\
+		 unsigned int len)			\
+/* End of DECL_NETLINK_DIAG_DECODER definition. */
+
+extern DECL_NETLINK_DIAG_DECODER(decode_inet_diag_msg);
+extern DECL_NETLINK_DIAG_DECODER(decode_inet_diag_req);
+extern DECL_NETLINK_DIAG_DECODER(decode_netlink_diag_msg);
+extern DECL_NETLINK_DIAG_DECODER(decode_netlink_diag_req);
+extern DECL_NETLINK_DIAG_DECODER(decode_packet_diag_msg);
+extern DECL_NETLINK_DIAG_DECODER(decode_packet_diag_req);
+extern DECL_NETLINK_DIAG_DECODER(decode_smc_diag_msg);
+extern DECL_NETLINK_DIAG_DECODER(decode_smc_diag_req);
+extern DECL_NETLINK_DIAG_DECODER(decode_unix_diag_msg);
+extern DECL_NETLINK_DIAG_DECODER(decode_unix_diag_req);
+
+struct inet_diag_sockid;
+
+extern void
+print_inet_diag_sockid(const struct inet_diag_sockid *, const uint8_t family);
+
+#define PRINT_FIELD_INET_DIAG_SOCKID(prefix_, where_, field_, af_)	\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		print_inet_diag_sockid(&(where_).field_, (af_));	\
+	} while (0)
+
+
+#endif /* !STRACE_NETLINK_SOCK_DIAG_H */
diff --git a/netlink_unix_diag.c b/netlink_unix_diag.c
new file mode 100644
index 0000000..254a659
--- /dev/null
+++ b/netlink_unix_diag.c
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink.h"
+#include "netlink_sock_diag.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include <linux/sock_diag.h>
+#include <linux/unix_diag.h>
+
+#include "xlat/unix_diag_attrs.h"
+#include "xlat/unix_diag_show.h"
+
+DECL_NETLINK_DIAG_DECODER(decode_unix_diag_req)
+{
+	struct unix_diag_req req = { .sdiag_family = family };
+	const size_t offset = sizeof(req.sdiag_family);
+
+	PRINT_FIELD_XVAL("{", req, sdiag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(req)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(req) - offset,
+					 (void *) &req + offset)) {
+			PRINT_FIELD_U("", req, sdiag_protocol);
+			PRINT_FIELD_FLAGS(", ", req, udiag_states,
+					  tcp_state_flags, "1<<TCP_???");
+			PRINT_FIELD_U(", ", req, udiag_ino);
+			PRINT_FIELD_FLAGS(", ", req, udiag_show,
+					  unix_diag_show, "UDIAG_SHOW_???");
+			PRINT_FIELD_COOKIE(", ", req, udiag_cookie);
+		}
+	} else
+		tprints("...");
+	tprints("}");
+}
+
+static bool
+decode_unix_diag_vfs(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	struct unix_diag_vfs uv;
+
+	if (len < sizeof(uv))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &uv))
+		return true;
+
+	PRINT_FIELD_DEV("{", uv, udiag_vfs_dev);
+	PRINT_FIELD_U(", ", uv, udiag_vfs_ino);
+	tprints("}");
+
+	return true;
+}
+
+static bool
+print_inode(struct tcb *const tcp,
+	    void *const elem_buf,
+	    const size_t elem_size,
+	    void *const opaque_data)
+{
+	tprintf("%" PRIu32, *(uint32_t *) elem_buf);
+
+	return true;
+}
+
+static bool
+decode_unix_diag_inode(struct tcb *const tcp,
+		       const kernel_ulong_t addr,
+		       const unsigned int len,
+		       const void *const opaque_data)
+{
+	uint32_t inode;
+	const size_t nmemb = len / sizeof(inode);
+
+	if (!nmemb)
+		return false;
+
+	print_array(tcp, addr, nmemb, &inode, sizeof(inode),
+		    umoven_or_printaddr, print_inode, 0);
+
+	return true;
+}
+
+static bool
+decode_unix_diag_rqlen(struct tcb *const tcp,
+		       const kernel_ulong_t addr,
+		       const unsigned int len,
+		       const void *const opaque_data)
+{
+	struct unix_diag_rqlen rql;
+
+	if (len < sizeof(rql))
+		return false;
+	if (umove_or_printaddr(tcp, addr, &rql))
+		return true;
+
+	PRINT_FIELD_U("{", rql, udiag_rqueue);
+	PRINT_FIELD_U(", ", rql, udiag_wqueue);
+	tprints("}");
+
+	return true;
+}
+
+static const nla_decoder_t unix_diag_msg_nla_decoders[] = {
+	[UNIX_DIAG_NAME]	= decode_nla_str,
+	[UNIX_DIAG_VFS]		= decode_unix_diag_vfs,
+	[UNIX_DIAG_PEER]	= decode_nla_u32,
+	[UNIX_DIAG_ICONS]	= decode_unix_diag_inode,
+	[UNIX_DIAG_RQLEN]	= decode_unix_diag_rqlen,
+	[UNIX_DIAG_MEMINFO]	= decode_nla_meminfo,
+	[UNIX_DIAG_SHUTDOWN]	= decode_nla_u8
+};
+
+DECL_NETLINK_DIAG_DECODER(decode_unix_diag_msg)
+{
+	struct unix_diag_msg msg = { .udiag_family = family };
+	size_t offset = sizeof(msg.udiag_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", msg, udiag_family, addrfams, "AF_???");
+	tprints(", ");
+	if (len >= sizeof(msg)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(msg) - offset,
+					 (void *) &msg + offset)) {
+			PRINT_FIELD_XVAL("", msg, udiag_type,
+					 socktypes, "SOCK_???");
+			PRINT_FIELD_XVAL(", ", msg, udiag_state,
+					 tcp_states, "TCP_???");
+			PRINT_FIELD_U(", ", msg, udiag_ino);
+			PRINT_FIELD_COOKIE(", ", msg, udiag_cookie);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(msg));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      unix_diag_attrs, "UNIX_DIAG_???",
+			      unix_diag_msg_nla_decoders,
+			      ARRAY_SIZE(unix_diag_msg_nla_decoders), NULL);
+	}
+}
diff --git a/nlattr.c b/nlattr.c
index ef3d762..6f35b99 100644
--- a/nlattr.c
+++ b/nlattr.c
@@ -28,15 +28,19 @@
  */
 
 #include "defs.h"
+#include <endian.h>
 #include "netlink.h"
 #include "nlattr.h"
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <linux/sock_diag.h>
 
 static bool
 fetch_nlattr(struct tcb *const tcp, struct nlattr *const nlattr,
-	     const kernel_ulong_t addr, const kernel_ulong_t len)
+	     const kernel_ulong_t addr, const unsigned int len)
 {
 	if (len < sizeof(struct nlattr)) {
-		printstrn(tcp, addr, len);
+		printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
 		return false;
 	}
 
@@ -64,7 +68,7 @@
 decode_nlattr_with_data(struct tcb *const tcp,
 			const struct nlattr *const nla,
 			const kernel_ulong_t addr,
-			const kernel_ulong_t len,
+			const unsigned int len,
 			const struct xlat *const table,
 			const char *const dflt,
 			const nla_decoder_t *const decoders,
@@ -86,7 +90,8 @@
 		    || !decoders[nla->nla_type](tcp, addr + NLA_HDRLEN,
 						nla_len - NLA_HDRLEN,
 						opaque_data))
-			printstrn(tcp, addr + NLA_HDRLEN, len - NLA_HDRLEN);
+			printstr_ex(tcp, addr + NLA_HDRLEN,
+				    nla_len - NLA_HDRLEN, QUOTE_FORCE_HEX);
 		tprints("}");
 	}
 }
@@ -94,7 +99,7 @@
 void
 decode_nlattr(struct tcb *const tcp,
 	      kernel_ulong_t addr,
-	      kernel_ulong_t len,
+	      unsigned int len,
 	      const struct xlat *const table,
 	      const char *const dflt,
 	      const nla_decoder_t *const decoders,
@@ -111,9 +116,9 @@
 			break;
 		}
 
-		const unsigned long nla_len = NLA_ALIGN(nla.nla_len);
+		const unsigned int nla_len = NLA_ALIGN(nla.nla_len);
 		kernel_ulong_t next_addr = 0;
-		kernel_ulong_t next_len = 0;
+		unsigned int next_len = 0;
 
 		if (nla.nla_len >= NLA_HDRLEN) {
 			next_len = (len >= nla_len) ? len - nla_len : 0;
@@ -146,7 +151,7 @@
 bool
 decode_nla_str(struct tcb *const tcp,
 	       const kernel_ulong_t addr,
-	       const kernel_ulong_t len,
+	       const unsigned int len,
 	       const void *const opaque_data)
 {
 	printstr_ex(tcp, addr, len, QUOTE_0_TERMINATED);
@@ -157,7 +162,7 @@
 bool
 decode_nla_strn(struct tcb *const tcp,
 		const kernel_ulong_t addr,
-		const kernel_ulong_t len,
+		const unsigned int len,
 		const void *const opaque_data)
 {
 	printstrn(tcp, addr, len);
@@ -165,11 +170,100 @@
 	return true;
 }
 
+static bool
+print_meminfo(struct tcb *const tcp,
+	      void *const elem_buf,
+	      const size_t elem_size,
+	      void *const opaque_data)
+{
+	unsigned int *const count = opaque_data;
+
+	if ((*count)++ >= SK_MEMINFO_VARS) {
+		tprints("...");
+		return false;
+	}
+
+	tprintf("%" PRIu32, *(uint32_t *) elem_buf);
+
+	return true;
+}
+
+bool
+decode_nla_meminfo(struct tcb *const tcp,
+		   const kernel_ulong_t addr,
+		   const unsigned int len,
+		   const void *const opaque_data)
+{
+	uint32_t mem;
+	const size_t nmemb = len / sizeof(mem);
+
+	if (!nmemb)
+		return false;
+
+	unsigned int count = 0;
+	print_array(tcp, addr, nmemb, &mem, sizeof(mem),
+		    umoven_or_printaddr, print_meminfo, &count);
+
+	return true;
+}
+
+bool
+decode_nla_ifindex(struct tcb *const tcp,
+	       const kernel_ulong_t addr,
+	       const unsigned int len,
+	       const void *const opaque_data)
+{
+	uint32_t ifindex;
+
+	if (len < sizeof(ifindex))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &ifindex))
+		print_ifindex(ifindex);
+
+	return true;
+}
+
+bool
+decode_nla_be16(struct tcb *const tcp,
+		const kernel_ulong_t addr,
+		const unsigned int len,
+		const void *const opaque_data)
+{
+	uint16_t num;
+
+	if (len < sizeof(num))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &num))
+		tprintf("htons(%u)", ntohs(num));
+
+	return true;
+}
+
+bool
+decode_nla_be64(struct tcb *const tcp,
+		const kernel_ulong_t addr,
+		const unsigned int len,
+		const void *const opaque_data)
+{
+#if defined HAVE_BE64TOH || defined be64toh
+	uint64_t num;
+
+	if (len < sizeof(num))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &num))
+		tprintf("htobe64(%" PRIu64 ")", be64toh(num));
+
+	return true;
+#else
+	return false;
+#endif
+}
+
 #define DECODE_NLA_INTEGER(name, type, fmt)		\
 bool							\
 decode_nla_ ## name(struct tcb *const tcp,		\
 		    const kernel_ulong_t addr,		\
-		    const kernel_ulong_t len,		\
+		    const unsigned int len,		\
 		    const void *const opaque_data)	\
 {							\
 	type num;					\
diff --git a/nlattr.h b/nlattr.h
index 40a476f..6e7d1a7 100644
--- a/nlattr.h
+++ b/nlattr.h
@@ -31,11 +31,11 @@
 #define STRACE_NLATTR_H
 
 typedef bool (*nla_decoder_t)(struct tcb *, kernel_ulong_t addr,
-			      kernel_ulong_t len, const void *opaque_data);
+			      unsigned int len, const void *opaque_data);
 extern void
 decode_nlattr(struct tcb *,
 	      kernel_ulong_t addr,
-	      kernel_ulong_t len,
+	      unsigned int len,
 	      const struct xlat *,
 	      const char *dflt,
 	      const nla_decoder_t *,
@@ -45,7 +45,9 @@
 #define DECL_NLA(name)					\
 extern bool						\
 decode_nla_ ## name(struct tcb *, kernel_ulong_t addr,	\
-		    kernel_ulong_t len, const void *)
+		    unsigned int len, const void *)	\
+/* End of DECL_NLA definition. */
+
 DECL_NLA(u8);
 DECL_NLA(u16);
 DECL_NLA(u32);
@@ -54,7 +56,12 @@
 DECL_NLA(s16);
 DECL_NLA(s32);
 DECL_NLA(s64);
+DECL_NLA(be16);
+DECL_NLA(be64);
 DECL_NLA(str);
 DECL_NLA(strn);
+DECL_NLA(ifindex);
+DECL_NLA(meminfo);
+DECL_NLA(rt_class);
 
 #endif /* !STRACE_NLATTR_H */
diff --git a/nsfs.c b/nsfs.c
index 1048f9a..493dcd5 100644
--- a/nsfs.c
+++ b/nsfs.c
@@ -37,7 +37,7 @@
 	switch (code) {
 	case NS_GET_USERNS:
 	case NS_GET_PARENT:
-		return 1 + RVAL_FD + RVAL_DECODED;
+		return RVAL_IOCTL_DECODED | RVAL_FD;
 	case NS_GET_NSTYPE:
 		if (entering(tcp))
 			return 0;
@@ -46,10 +46,10 @@
 			outstr = xlookup(setns_types, tcp->u_rval);
 			if (outstr) {
 				tcp->auxstr = outstr;
-				return 1 + RVAL_STR;
+				return RVAL_IOCTL_DECODED | RVAL_STR;
 			}
 		}
-		return 1;
+		return RVAL_IOCTL_DECODED;
 	case NS_GET_OWNER_UID:
 		if (entering(tcp))
 			return 0;
@@ -58,7 +58,7 @@
 			printuid("[", uid);
 			tprints("]");
 		}
-		return 1;
+		return RVAL_IOCTL_DECODED;
 	default:
 		return RVAL_DECODED;
 	}
diff --git a/number_set.c b/number_set.c
new file mode 100644
index 0000000..b8aa28c
--- /dev/null
+++ b/number_set.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include "number_set.h"
+#include "xmalloc.h"
+
+typedef unsigned int number_slot_t;
+#define BITS_PER_SLOT (sizeof(number_slot_t) * 8)
+
+struct number_set {
+	number_slot_t *vec;
+	unsigned int nslots;
+	bool not;
+};
+
+static void
+number_setbit(const unsigned int i, number_slot_t *const vec)
+{
+	vec[i / BITS_PER_SLOT] |= (number_slot_t) 1 << (i % BITS_PER_SLOT);
+}
+
+static bool
+number_isset(const unsigned int i, const number_slot_t *const vec)
+{
+	return vec[i / BITS_PER_SLOT] & ((number_slot_t) 1 << (i % BITS_PER_SLOT));
+}
+
+static void
+reallocate_number_set(struct number_set *const set, const unsigned int new_nslots)
+{
+	if (new_nslots <= set->nslots)
+		return;
+	set->vec = xreallocarray(set->vec, new_nslots, sizeof(*set->vec));
+	memset(set->vec + set->nslots, 0,
+	       sizeof(*set->vec) * (new_nslots - set->nslots));
+	set->nslots = new_nslots;
+}
+
+bool
+number_set_array_is_empty(const struct number_set *const set,
+			  const unsigned int idx)
+{
+	return !(set && (set[idx].nslots || set[idx].not));
+}
+
+bool
+is_number_in_set(const unsigned int number, const struct number_set *const set)
+{
+	return set && ((number / BITS_PER_SLOT < set->nslots)
+		&& number_isset(number, set->vec)) ^ set->not;
+}
+
+bool
+is_number_in_set_array(const unsigned int number, const struct number_set *const set,
+		       const unsigned int idx)
+{
+	return set && ((number / BITS_PER_SLOT < set[idx].nslots)
+		&& number_isset(number, set[idx].vec)) ^ set[idx].not;
+}
+
+void
+add_number_to_set(const unsigned int number, struct number_set *const set)
+{
+	reallocate_number_set(set, number / BITS_PER_SLOT + 1);
+	number_setbit(number, set->vec);
+}
+
+void
+add_number_to_set_array(const unsigned int number, struct number_set *const set,
+			const unsigned int idx)
+{
+	add_number_to_set(number, &set[idx]);
+}
+
+void
+clear_number_set_array(struct number_set *const set, const unsigned int nmemb)
+{
+	unsigned int i;
+
+	for (i = 0; i < nmemb; ++i) {
+		if (set[i].nslots)
+			memset(set[i].vec, 0,
+			       sizeof(*set[i].vec) * set[i].nslots);
+		set[i].not = false;
+	}
+}
+
+void
+invert_number_set_array(struct number_set *const set, const unsigned int nmemb)
+{
+	unsigned int i;
+
+	for (i = 0; i < nmemb; ++i)
+		set[i].not = !set[i].not;
+}
+
+struct number_set *
+alloc_number_set_array(const unsigned int nmemb)
+{
+	return xcalloc(nmemb, sizeof(struct number_set));
+}
+
+void
+free_number_set_array(struct number_set *const set, unsigned int nmemb)
+{
+	while (nmemb) {
+		--nmemb;
+		free(set[nmemb].vec);
+		set[nmemb].vec = NULL;
+	}
+	free(set);
+}
diff --git a/number_set.h b/number_set.h
new file mode 100644
index 0000000..ec53bc1
--- /dev/null
+++ b/number_set.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_NUMBER_SET_H
+#define STRACE_NUMBER_SET_H
+
+#include "gcc_compat.h"
+
+struct number_set;
+
+extern bool
+number_set_array_is_empty(const struct number_set *, unsigned int idx);
+
+extern bool
+is_number_in_set(unsigned int number, const struct number_set *);
+
+extern bool
+is_number_in_set_array(unsigned int number, const struct number_set *, unsigned int idx);
+
+extern void
+add_number_to_set(unsigned int number, struct number_set *);
+
+extern void
+add_number_to_set_array(unsigned int number, struct number_set *, unsigned int idx);
+
+extern void
+clear_number_set_array(struct number_set *, unsigned int nmemb);
+
+extern void
+invert_number_set_array(struct number_set *, unsigned int nmemb);
+
+extern struct number_set *
+alloc_number_set_array(unsigned int nmemb) ATTRIBUTE_MALLOC;
+
+extern void
+free_number_set_array(struct number_set *, unsigned int nmemb);
+
+extern struct number_set *read_set;
+extern struct number_set *write_set;
+extern struct number_set *signal_set;
+
+#endif /* !STRACE_NUMBER_SET_H */
diff --git a/pathtrace.c b/pathtrace.c
index 9cb0ba7..5258238 100644
--- a/pathtrace.c
+++ b/pathtrace.c
@@ -33,46 +33,46 @@
 
 #include "syscall.h"
 
-const char **paths_selected;
-static unsigned int num_selected;
+struct path_set global_path_set;
 
 /*
  * Return true if specified path matches one that we're tracing.
  */
-static int
-pathmatch(const char *path)
+static bool
+pathmatch(const char *path, struct path_set *set)
 {
 	unsigned i;
 
-	for (i = 0; i < num_selected; ++i) {
-		if (strcmp(path, paths_selected[i]) == 0)
-			return 1;
+	for (i = 0; i < set->num_selected; ++i) {
+		if (strcmp(path, set->paths_selected[i]) == 0)
+			return true;
 	}
-	return 0;
+	return false;
 }
 
 /*
  * Return true if specified path (in user-space) matches.
  */
-static int
-upathmatch(struct tcb *const tcp, const kernel_ulong_t upath)
+static bool
+upathmatch(struct tcb *const tcp, const kernel_ulong_t upath,
+	   struct path_set *set)
 {
 	char path[PATH_MAX + 1];
 
 	return umovestr(tcp, upath, sizeof(path), path) > 0 &&
-		pathmatch(path);
+		pathmatch(path, set);
 }
 
 /*
  * Return true if specified fd maps to a path we're tracing.
  */
-static int
-fdmatch(struct tcb *tcp, int fd)
+static bool
+fdmatch(struct tcb *tcp, int fd, struct path_set *set)
 {
 	char path[PATH_MAX + 1];
 	int n = getfdpath(tcp, fd, path, sizeof(path));
 
-	return n >= 0 && pathmatch(path);
+	return n >= 0 && pathmatch(path, set);
 }
 
 /*
@@ -80,17 +80,18 @@
  * Specifying NULL will delete all paths.
  */
 static void
-storepath(const char *path)
+storepath(const char *path, struct path_set *set)
 {
 	unsigned i;
 
-	if (pathmatch(path))
+	if (pathmatch(path, set))
 		return; /* already in table */
 
-	i = num_selected++;
-	paths_selected = xreallocarray(paths_selected, num_selected,
-				       sizeof(paths_selected[0]));
-	paths_selected[i] = path;
+	i = set->num_selected++;
+	set->paths_selected = xreallocarray(set->paths_selected,
+					    set->num_selected,
+					    sizeof(set->paths_selected[0]));
+	set->paths_selected[i] = path;
 }
 
 /*
@@ -118,14 +119,14 @@
 
 /*
  * Add a path to the set we're tracing.  Also add the canonicalized
- * version of the path.  Secifying NULL will delete all paths.
+ * version of the path.  Specifying NULL will delete all paths.
  */
 void
-pathtrace_select(const char *path)
+pathtrace_select_set(const char *path, struct path_set *set)
 {
 	char *rpath;
 
-	storepath(path);
+	storepath(path, set);
 
 	rpath = realpath(path, NULL);
 
@@ -139,22 +140,22 @@
 	}
 
 	error_msg("Requested path '%s' resolved into '%s'", path, rpath);
-	storepath(rpath);
+	storepath(rpath, set);
 }
 
 /*
  * Return true if syscall accesses a selected path
  * (or if no paths have been specified for tracing).
  */
-int
-pathtrace_match(struct tcb *tcp)
+bool
+pathtrace_match_set(struct tcb *tcp, struct path_set *set)
 {
 	const struct_sysent *s;
 
 	s = tcp->s_ent;
 
 	if (!(s->sys_flags & (TRACE_FILE | TRACE_DESC | TRACE_NETWORK)))
-		return 0;
+		return false;
 
 	/*
 	 * Check for special cases where we need to do something
@@ -169,9 +170,10 @@
 	case SEN_sendfile64:
 	case SEN_tee:
 		/* fd, fd */
-		return fdmatch(tcp, tcp->u_arg[0]) ||
-			fdmatch(tcp, tcp->u_arg[1]);
+		return fdmatch(tcp, tcp->u_arg[0], set) ||
+			fdmatch(tcp, tcp->u_arg[1], set);
 
+	case SEN_execveat:
 	case SEN_faccessat:
 	case SEN_fchmodat:
 	case SEN_fchownat:
@@ -188,28 +190,29 @@
 	case SEN_unlinkat:
 	case SEN_utimensat:
 		/* fd, path */
-		return fdmatch(tcp, tcp->u_arg[0]) ||
-			upathmatch(tcp, tcp->u_arg[1]);
+		return fdmatch(tcp, tcp->u_arg[0], set) ||
+			upathmatch(tcp, tcp->u_arg[1], set);
 
 	case SEN_link:
 	case SEN_mount:
 	case SEN_pivotroot:
 		/* path, path */
-		return upathmatch(tcp, tcp->u_arg[0]) ||
-			upathmatch(tcp, tcp->u_arg[1]);
+		return upathmatch(tcp, tcp->u_arg[0], set) ||
+			upathmatch(tcp, tcp->u_arg[1], set);
 
 	case SEN_quotactl:
+	case SEN_symlink:
 		/* x, path */
-		return upathmatch(tcp, tcp->u_arg[1]);
+		return upathmatch(tcp, tcp->u_arg[1], set);
 
 	case SEN_linkat:
 	case SEN_renameat2:
 	case SEN_renameat:
 		/* fd, path, fd, path */
-		return fdmatch(tcp, tcp->u_arg[0]) ||
-			fdmatch(tcp, tcp->u_arg[2]) ||
-			upathmatch(tcp, tcp->u_arg[1]) ||
-			upathmatch(tcp, tcp->u_arg[3]);
+		return fdmatch(tcp, tcp->u_arg[0], set) ||
+			fdmatch(tcp, tcp->u_arg[2], set) ||
+			upathmatch(tcp, tcp->u_arg[1], set) ||
+			upathmatch(tcp, tcp->u_arg[3], set);
 
 	case SEN_old_mmap:
 #if defined(S390)
@@ -220,30 +223,32 @@
 	case SEN_mmap_pgoff:
 	case SEN_ARCH_mmap:
 		/* x, x, x, x, fd */
-		return fdmatch(tcp, tcp->u_arg[4]);
+		return fdmatch(tcp, tcp->u_arg[4], set);
 
 	case SEN_symlinkat:
-		/* path, fd, path */
-		return fdmatch(tcp, tcp->u_arg[1]) ||
-			upathmatch(tcp, tcp->u_arg[0]) ||
-			upathmatch(tcp, tcp->u_arg[2]);
+		/* x, fd, path */
+		return fdmatch(tcp, tcp->u_arg[1], set) ||
+			upathmatch(tcp, tcp->u_arg[2], set);
 
 	case SEN_copy_file_range:
 	case SEN_splice:
 		/* fd, x, fd, x, x, x */
-		return fdmatch(tcp, tcp->u_arg[0]) ||
-			fdmatch(tcp, tcp->u_arg[2]);
+		return fdmatch(tcp, tcp->u_arg[0], set) ||
+			fdmatch(tcp, tcp->u_arg[2], set);
 
 	case SEN_epoll_ctl:
 		/* x, x, fd, x */
-		return fdmatch(tcp, tcp->u_arg[2]);
+		return fdmatch(tcp, tcp->u_arg[2], set);
 
 
 	case SEN_fanotify_mark:
-		/* x, x, x, fd, path */
-		return fdmatch(tcp, tcp->u_arg[3]) ||
-			upathmatch(tcp, tcp->u_arg[4]);
-
+	{
+		/* x, x, mask (64 bit), fd, path */
+		unsigned long long mask = 0;
+		int argn = getllval(tcp, &mask, 2);
+		return fdmatch(tcp, tcp->u_arg[argn], set) ||
+			upathmatch(tcp, tcp->u_arg[argn + 1], set);
+	}
 	case SEN_oldselect:
 	case SEN_pselect6:
 	case SEN_select:
@@ -259,13 +264,13 @@
 		if (SEN_oldselect == s->sen) {
 			if (sizeof(*select_args) == sizeof(*oldselect_args)) {
 				if (umove(tcp, tcp->u_arg[0], &select_args)) {
-					return 0;
+					return false;
 				}
 			} else {
 				unsigned int n;
 
 				if (umove(tcp, tcp->u_arg[0], &oldselect_args)) {
-					return 0;
+					return false;
 				}
 
 				for (n = 0; n < 5; ++n) {
@@ -281,7 +286,7 @@
 		nfds = (int) args[0];
 		/* Kernel rejects negative nfds, so we don't parse it either. */
 		if (nfds <= 0)
-			return 0;
+			return false;
 		/* Beware of select(2^31-1, NULL, NULL, NULL) and similar... */
 		if (nfds > 1024*1024)
 			nfds = 1024*1024;
@@ -298,14 +303,14 @@
 				j = next_set_bit(fds, j, nfds);
 				if (j < 0)
 					break;
-				if (fdmatch(tcp, j)) {
+				if (fdmatch(tcp, j, set)) {
 					free(fds);
-					return 1;
+					return true;
 				}
 			}
 		}
 		free(fds);
-		return 0;
+		return false;
 	}
 
 	case SEN_poll:
@@ -318,17 +323,21 @@
 		start = tcp->u_arg[0];
 		nfds = tcp->u_arg[1];
 
+		if (nfds > 1024 * 1024)
+			nfds = 1024 * 1024;
 		end = start + sizeof(fds) * nfds;
 
 		if (nfds == 0 || end < start)
-			return 0;
+			return false;
 
-		for (cur = start; cur < end; cur += sizeof(fds))
-			if ((umove(tcp, cur, &fds) == 0)
-			    && fdmatch(tcp, fds.fd))
-				return 1;
+		for (cur = start; cur < end; cur += sizeof(fds)) {
+			if (umove(tcp, cur, &fds))
+				break;
+			if (fdmatch(tcp, fds.fd, set))
+				return true;
+		}
 
-		return 0;
+		return false;
 	}
 
 	case SEN_bpf:
@@ -337,6 +346,7 @@
 	case SEN_eventfd2:
 	case SEN_eventfd:
 	case SEN_fanotify_init:
+	case SEN_inotify_init:
 	case SEN_inotify_init1:
 	case SEN_memfd_create:
 	case SEN_perf_event_open:
@@ -353,7 +363,7 @@
 		 * These have TRACE_FILE or TRACE_DESCRIPTOR or TRACE_NETWORK set,
 		 * but they don't have any file descriptor or path args to test.
 		 */
-		return 0;
+		return false;
 	}
 
 	/*
@@ -362,10 +372,10 @@
 	 */
 
 	if (s->sys_flags & TRACE_FILE)
-		return upathmatch(tcp, tcp->u_arg[0]);
+		return upathmatch(tcp, tcp->u_arg[0], set);
 
 	if (s->sys_flags & (TRACE_DESC | TRACE_NETWORK))
-		return fdmatch(tcp, tcp->u_arg[0]);
+		return fdmatch(tcp, tcp->u_arg[0], set);
 
-	return 0;
+	return false;
 }
diff --git a/prctl.c b/prctl.c
index 9b9b990..befa14b 100644
--- a/prctl.c
+++ b/prctl.c
@@ -292,7 +292,7 @@
 			return RVAL_DECODED;
 		if (SECCOMP_MODE_FILTER == arg2) {
 			tprints(", ");
-			print_seccomp_filter(tcp, arg3);
+			decode_seccomp_fprog(tcp, arg3);
 			return RVAL_DECODED;
 		}
 		print_prctl_args(tcp, 2);
@@ -350,8 +350,7 @@
 	return 0;
 }
 
-#if defined X86_64 || defined X32
-# include <asm/prctl.h>
+#if defined X86_64 || defined X32 || defined I386
 # include "xlat/archvals.h"
 
 SYS_FUNC(arch_prctl)
@@ -375,4 +374,4 @@
 	tprintf(", %#" PRI_klx, addr);
 	return RVAL_DECODED;
 }
-#endif /* X86_64 || X32 */
+#endif /* X86_64 || X32 || I386 */
diff --git a/print_fields.h b/print_fields.h
index 92b8a8a..35859c9 100644
--- a/print_fields.h
+++ b/print_fields.h
@@ -48,6 +48,11 @@
 	STRACE_PRINTF("%s%s=%#llx", (prefix_), #field_,			\
 		      zero_extend_signed_to_ull((where_).field_))
 
+#define PRINT_FIELD_0X(prefix_, where_, field_)				\
+	STRACE_PRINTF("%s%s=%#0*llx", (prefix_), #field_,		\
+		      (int) sizeof((where_).field_) * 2,		\
+		      zero_extend_signed_to_ull((where_).field_))
+
 #define PRINT_FIELD_COOKIE(prefix_, where_, field_)			\
 	STRACE_PRINTF("%s%s=[%llu, %llu]", (prefix_), #field_,		\
 		      zero_extend_signed_to_ull((where_).field_[0]),	\
@@ -56,13 +61,105 @@
 #define PRINT_FIELD_FLAGS(prefix_, where_, field_, xlat_, dflt_)	\
 	do {								\
 		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
-		printflags((xlat_), (where_).field_, (dflt_));		\
+		printflags64((xlat_),					\
+			     zero_extend_signed_to_ull((where_).field_),\
+			     (dflt_));					\
 	} while (0)
 
 #define PRINT_FIELD_XVAL(prefix_, where_, field_, xlat_, dflt_)		\
 	do {								\
 		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
-		printxval((xlat_), (where_).field_, (dflt_));		\
+		printxval64((xlat_),					\
+			    zero_extend_signed_to_ull((where_).field_),	\
+			    (dflt_));		\
+	} while (0)
+
+#define PRINT_FIELD_UID(prefix_, where_, field_)					\
+	do {										\
+		if (sign_extend_unsigned_to_ll((where_).field_) == -1LL)		\
+			STRACE_PRINTF("%s%s=-1", (prefix_), #field_);			\
+		else									\
+			STRACE_PRINTF("%s%s=%llu", (prefix_), #field_,			\
+				      zero_extend_signed_to_ull((where_).field_));	\
+	} while (0)
+
+#define PRINT_FIELD_STRING(prefix_, where_, field_, len_, style_)	\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		print_quoted_string((const char *)(where_).field_,	\
+				    (len_), (style_));			\
+	} while (0)
+
+#define PRINT_FIELD_CSTRING(prefix_, where_, field_)			\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		print_quoted_cstring((const char *)(where_).field_,	\
+				     sizeof((where_).field_));		\
+	} while (0)
+
+#define PRINT_FIELD_INET_ADDR(prefix_, where_, field_, af_)		\
+	do {								\
+		STRACE_PRINTF(prefix_);					\
+		print_inet_addr((af_), &(where_).field_,		\
+				sizeof((where_).field_), #field_);	\
+	} while (0)
+
+#define PRINT_FIELD_INET4_ADDR(prefix_, where_, field_)			\
+	STRACE_PRINTF("%s%s=inet_addr(\"%s\")", (prefix_), #field_,	\
+		      inet_ntoa((where_).field_))
+
+#define PRINT_FIELD_NET_PORT(prefix_, where_, field_)			\
+	STRACE_PRINTF("%s%s=htons(%u)", (prefix_), #field_,		\
+		      ntohs((where_).field_))
+
+#define PRINT_FIELD_IFINDEX(prefix_, where_, field_)			\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		print_ifindex((where_).field_);				\
+	} while (0)
+
+#define PRINT_FIELD_SOCKADDR(prefix_, where_, field_)			\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		print_sockaddr(&(where_).field_,			\
+			       sizeof((where_).field_));		\
+	} while (0)
+
+#define PRINT_FIELD_DEV(prefix_, where_, field_)			\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		print_dev_t((where_).field_);				\
+	} while (0)
+
+#define PRINT_FIELD_PTR(prefix_, where_, field_)			\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		printaddr((mpers_ptr_t) (where_).field_);		\
+	} while (0)
+
+#define PRINT_FIELD_FD(prefix_, where_, field_, tcp_)			\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		printfd((tcp_), (where_).field_);			\
+	} while (0)
+
+#define PRINT_FIELD_STRN(prefix_, where_, field_, len_, tcp_)		\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		printstrn((tcp_), (where_).field_, (len_));		\
+	} while (0)
+
+
+#define PRINT_FIELD_STR(prefix_, where_, field_, tcp_)			\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		printstr((tcp_), (where_).field_);			\
+	} while (0)
+
+#define PRINT_FIELD_PATH(prefix_, where_, field_, tcp_)			\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		printpath((tcp_), (where_).field_);			\
 	} while (0)
 
 #endif /* !STRACE_PRINT_FIELDS_H */
diff --git a/print_group_req.c b/print_group_req.c
new file mode 100644
index 0000000..6b8e2a7
--- /dev/null
+++ b/print_group_req.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2015-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include <netinet/in.h>
+
+#ifdef MCAST_JOIN_GROUP
+
+# include DEF_MPERS_TYPE(struct_group_req)
+typedef struct group_req struct_group_req;
+
+#endif /* MCAST_JOIN_GROUP */
+
+#include MPERS_DEFS
+
+#ifdef MCAST_JOIN_GROUP
+
+# include "print_fields.h"
+
+MPERS_PRINTER_DECL(void, print_group_req, struct tcb *const tcp,
+		   const kernel_ulong_t addr, const int len)
+{
+	struct_group_req greq;
+
+	if (len < (int) sizeof(greq)) {
+		printaddr(addr);
+	} else if (!umove_or_printaddr(tcp, addr, &greq)) {
+		PRINT_FIELD_IFINDEX("{", greq, gr_interface);
+		PRINT_FIELD_SOCKADDR(", ", greq, gr_group);
+		tprints("}");
+	}
+}
+
+#endif /* MCAST_JOIN_GROUP */
diff --git a/print_ifindex.c b/print_ifindex.c
new file mode 100644
index 0000000..f978a5a
--- /dev/null
+++ b/print_ifindex.c
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2001-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include <net/if.h>
+
+void
+print_ifindex(const unsigned int ifindex)
+{
+#ifdef HAVE_IF_INDEXTONAME
+	char buf[IFNAMSIZ + 1];
+
+	if (if_indextoname(ifindex, buf)) {
+		tprints("if_nametoindex(");
+		print_quoted_cstring(buf, sizeof(buf));
+		tprints(")");
+		return;
+	}
+#endif
+
+	tprintf("%u", ifindex);
+}
diff --git a/print_sg_req_info.c b/print_sg_req_info.c
index 9f0249e..deb8d66 100644
--- a/print_sg_req_info.c
+++ b/print_sg_req_info.c
@@ -68,7 +68,7 @@
 		tprintf(", duration=%u}", info.duration);
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 #endif /* HAVE_SCSI_SG_H */
diff --git a/printers.h b/printers.h
index 6bf0860..88033aa 100644
--- a/printers.h
+++ b/printers.h
@@ -1,4 +1,4 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_seccomp_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
+/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_bpf_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_keyctl_kdf_params.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_group_req.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
 typedef struct {
  int (*block_ioctl)(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
 #define block_ioctl MPERS_PRINTER_NAME(block_ioctl)
@@ -9,8 +9,11 @@
  int (*evdev_ioctl)(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
 #define evdev_ioctl MPERS_PRINTER_NAME(evdev_ioctl)
 
- _Bool (*fetch_seccomp_fprog)(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
-#define fetch_seccomp_fprog MPERS_PRINTER_NAME(fetch_seccomp_fprog)
+ unsigned int (*get_sock_fprog_size)(void);
+#define get_sock_fprog_size MPERS_PRINTER_NAME(get_sock_fprog_size)
+
+ _Bool (*fetch_bpf_fprog)(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
+#define fetch_bpf_fprog MPERS_PRINTER_NAME(fetch_bpf_fprog)
 
  _Bool (*fetch_struct_flock)(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
 #define fetch_struct_flock MPERS_PRINTER_NAME(fetch_struct_flock)
@@ -18,6 +21,9 @@
  _Bool (*fetch_struct_flock64)(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
 #define fetch_struct_flock64 MPERS_PRINTER_NAME(fetch_struct_flock64)
 
+ int (*fetch_keyctl_kdf_params)(struct tcb *const tcp, kernel_ulong_t addr, struct strace_keyctl_kdf_params *p);
+#define fetch_keyctl_kdf_params MPERS_PRINTER_NAME(fetch_keyctl_kdf_params)
+
  int (*fetch_struct_mmsghdr)(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
 #define fetch_struct_mmsghdr MPERS_PRINTER_NAME(fetch_struct_mmsghdr)
 
@@ -48,6 +54,9 @@
  int (*mtd_ioctl)(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
 #define mtd_ioctl MPERS_PRINTER_NAME(mtd_ioctl)
 
+ void (*print_group_req)(struct tcb *const tcp, const kernel_ulong_t addr, const int len);
+#define print_group_req MPERS_PRINTER_NAME(print_group_req)
+
  void (*printmqattr)(struct tcb *const tcp, const kernel_ulong_t addr, const _Bool decode_flags);
 #define printmqattr MPERS_PRINTER_NAME(printmqattr)
 
diff --git a/ptp.c b/ptp.c
index 6a8a9d2..fce6e0e 100644
--- a/ptp.c
+++ b/ptp.c
@@ -85,7 +85,7 @@
 				break;
 
 			tprintf("{n_samples=%u", sysoff.n_samples);
-			return 1;
+			return 0;
 		} else {
 			unsigned int n_samples, i;
 
@@ -136,5 +136,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/qualify.c b/qualify.c
deleted file mode 100644
index 3df4805..0000000
--- a/qualify.c
+++ /dev/null
@@ -1,697 +0,0 @@
-/*
- * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "defs.h"
-#include "nsig.h"
-#include <regex.h>
-
-typedef unsigned int number_slot_t;
-#define BITS_PER_SLOT (sizeof(number_slot_t) * 8)
-
-struct number_set {
-	number_slot_t *vec;
-	unsigned int nslots;
-	bool not;
-};
-
-struct number_set read_set;
-struct number_set write_set;
-struct number_set signal_set;
-
-static struct number_set abbrev_set[SUPPORTED_PERSONALITIES];
-static struct number_set inject_set[SUPPORTED_PERSONALITIES];
-static struct number_set raw_set[SUPPORTED_PERSONALITIES];
-static struct number_set trace_set[SUPPORTED_PERSONALITIES];
-static struct number_set verbose_set[SUPPORTED_PERSONALITIES];
-
-static void
-number_setbit(const unsigned int i, number_slot_t *const vec)
-{
-	vec[i / BITS_PER_SLOT] |= (number_slot_t) 1 << (i % BITS_PER_SLOT);
-}
-
-static bool
-number_isset(const unsigned int i, const number_slot_t *const vec)
-{
-	return vec[i / BITS_PER_SLOT] & ((number_slot_t) 1 << (i % BITS_PER_SLOT));
-}
-
-static void
-reallocate_number_set(struct number_set *const set, const unsigned int new_nslots)
-{
-	if (new_nslots <= set->nslots)
-		return;
-	set->vec = xreallocarray(set->vec, new_nslots, sizeof(*set->vec));
-	memset(set->vec + set->nslots, 0,
-	       sizeof(*set->vec) * (new_nslots - set->nslots));
-	set->nslots = new_nslots;
-}
-
-static void
-add_number_to_set(const unsigned int number, struct number_set *const set)
-{
-	reallocate_number_set(set, number / BITS_PER_SLOT + 1);
-	number_setbit(number, set->vec);
-}
-
-bool
-is_number_in_set(const unsigned int number, const struct number_set *const set)
-{
-	return ((number / BITS_PER_SLOT < set->nslots)
-		&& number_isset(number, set->vec)) ^ set->not;
-}
-
-typedef int (*string_to_uint_func)(const char *);
-
-/*
- * Add numbers to SET according to STR specification.
- */
-static void
-qualify_tokens(const char *const str, struct number_set *const set,
-	       string_to_uint_func func, const char *const name)
-{
-	/* Clear the set. */
-	if (set->nslots)
-		memset(set->vec, 0, sizeof(*set->vec) * set->nslots);
-	set->not = false;
-
-	/*
-	 * Each leading ! character means inversion
-	 * of the remaining specification.
-	 */
-	const char *s = str;
-handle_inversion:
-	while (*s == '!') {
-		set->not = !set->not;
-		++s;
-	}
-
-	if (strcmp(s, "none") == 0) {
-		/*
-		 * No numbers are added to the set.
-		 * Subsequent is_number_in_set invocations will return set->not.
-		 */
-		return;
-	} else if (strcmp(s, "all") == 0) {
-		s = "!none";
-		goto handle_inversion;
-	}
-
-	/*
-	 * Split the string into comma separated tokens.
-	 * For each token, find out the corresponding number
-	 * by calling FUNC, and add that number to the set.
-	 * The absence of tokens or a negative answer
-	 * from FUNC is a fatal error.
-	 */
-	char *copy = xstrdup(s);
-	char *saveptr = NULL;
-	const char *token;
-	int number = -1;
-
-	for (token = strtok_r(copy, ",", &saveptr); token;
-	     token = strtok_r(NULL, ",", &saveptr)) {
-		number = func(token);
-		if (number < 0) {
-			error_msg_and_die("invalid %s '%s'", name, token);
-		}
-
-		add_number_to_set(number, set);
-	}
-
-	free(copy);
-
-	if (number < 0) {
-		error_msg_and_die("invalid %s '%s'", name, str);
-	}
-}
-
-static int
-sigstr_to_uint(const char *s)
-{
-	int i;
-
-	if (*s >= '0' && *s <= '9')
-		return string_to_uint_upto(s, 255);
-
-	if (strncasecmp(s, "SIG", 3) == 0)
-		s += 3;
-
-	for (i = 0; i <= 255; ++i) {
-		const char *name = signame(i);
-
-		if (strncasecmp(name, "SIG", 3) != 0)
-			continue;
-
-		name += 3;
-
-		if (strcasecmp(name, s) != 0)
-			continue;
-
-		return i;
-	}
-
-	return -1;
-}
-
-static bool
-qualify_syscall_number(const char *s, struct number_set *set)
-{
-	int n = string_to_uint(s);
-	if (n < 0)
-		return false;
-
-	unsigned int p;
-	bool done = false;
-
-	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
-		if ((unsigned) n >= nsyscall_vec[p]) {
-			continue;
-		}
-		add_number_to_set(n, &set[p]);
-		done = true;
-	}
-
-	return done;
-}
-
-static void
-regerror_msg_and_die(int errcode, const regex_t *preg,
-		     const char *str, const char *pattern)
-{
-	char buf[512];
-
-	regerror(errcode, preg, buf, sizeof(buf));
-	error_msg_and_die("%s: %s: %s", str, pattern, buf);
-}
-
-static bool
-qualify_syscall_regex(const char *s, struct number_set *set)
-{
-	regex_t preg;
-	int rc;
-
-	if ((rc = regcomp(&preg, s, REG_EXTENDED | REG_NOSUB)) != 0)
-		regerror_msg_and_die(rc, &preg, "regcomp", s);
-
-	unsigned int p;
-	bool found = false;
-	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
-		unsigned int i;
-
-		for (i = 0; i < nsyscall_vec[p]; ++i) {
-			if (!sysent_vec[p][i].sys_name)
-				continue;
-			rc = regexec(&preg, sysent_vec[p][i].sys_name,
-				     0, NULL, 0);
-			if (rc == REG_NOMATCH)
-				continue;
-			else if (rc)
-				regerror_msg_and_die(rc, &preg, "regexec", s);
-			add_number_to_set(i, &set[p]);
-			found = true;
-		}
-	}
-
-	regfree(&preg);
-	return found;
-}
-
-static unsigned int
-lookup_class(const char *s)
-{
-	static const struct {
-		const char *name;
-		unsigned int value;
-	} syscall_class[] = {
-		{ "desc",	TRACE_DESC	},
-		{ "file",	TRACE_FILE	},
-		{ "memory",	TRACE_MEMORY	},
-		{ "process",	TRACE_PROCESS	},
-		{ "signal",	TRACE_SIGNAL	},
-		{ "ipc",	TRACE_IPC	},
-		{ "network",	TRACE_NETWORK	},
-		{ "%desc",	TRACE_DESC	},
-		{ "%file",	TRACE_FILE	},
-		{ "%memory",	TRACE_MEMORY	},
-		{ "%process",	TRACE_PROCESS	},
-		{ "%signal",	TRACE_SIGNAL	},
-		{ "%ipc",	TRACE_IPC	},
-		{ "%network",	TRACE_NETWORK	},
-		{ "%stat",	TRACE_STAT	},
-		{ "%lstat",	TRACE_LSTAT	},
-		{ "%fstat",	TRACE_FSTAT	},
-		{ "%%stat",	TRACE_STAT_LIKE	},
-		{ "%statfs",	TRACE_STATFS	},
-		{ "%fstatfs",	TRACE_FSTATFS	},
-		{ "%%statfs",	TRACE_STATFS_LIKE	},
-	};
-
-	unsigned int i;
-	for (i = 0; i < ARRAY_SIZE(syscall_class); ++i) {
-		if (strcmp(s, syscall_class[i].name) == 0) {
-			return syscall_class[i].value;
-		}
-	}
-
-	return 0;
-}
-
-static bool
-qualify_syscall_class(const char *s, struct number_set *set)
-{
-	const unsigned int n = lookup_class(s);
-	if (!n)
-		return false;
-
-	unsigned int p;
-	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
-		unsigned int i;
-
-		for (i = 0; i < nsyscall_vec[p]; ++i) {
-			if (!sysent_vec[p][i].sys_name
-			    || (sysent_vec[p][i].sys_flags & n) != n) {
-				continue;
-			}
-			add_number_to_set(i, &set[p]);
-		}
-	}
-
-	return true;
-}
-
-static bool
-qualify_syscall_name(const char *s, struct number_set *set)
-{
-	unsigned int p;
-	bool found = false;
-
-	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
-		unsigned int i;
-
-		for (i = 0; i < nsyscall_vec[p]; ++i) {
-			if (!sysent_vec[p][i].sys_name
-			    || strcmp(s, sysent_vec[p][i].sys_name)) {
-				continue;
-			}
-			add_number_to_set(i, &set[p]);
-			found = true;
-		}
-	}
-
-	return found;
-}
-
-static bool
-qualify_syscall(const char *token, struct number_set *set)
-{
-	bool ignore_fail = false;
-
-	while (*token == '?') {
-		token++;
-		ignore_fail = true;
-	}
-	if (*token >= '0' && *token <= '9')
-		return qualify_syscall_number(token, set) || ignore_fail;
-	if (*token == '/')
-		return qualify_syscall_regex(token + 1, set) || ignore_fail;
-	return qualify_syscall_class(token, set)
-	       || qualify_syscall_name(token, set)
-	       || ignore_fail;
-}
-
-/*
- * Add syscall numbers to SETs for each supported personality
- * according to STR specification.
- */
-static void
-qualify_syscall_tokens(const char *const str, struct number_set *const set,
-		       const char *const name)
-{
-	/* Clear all sets. */
-	unsigned int p;
-	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
-		if (set[p].nslots)
-			memset(set[p].vec, 0,
-			       sizeof(*set[p].vec) * set[p].nslots);
-		set[p].not = false;
-	}
-
-	/*
-	 * Each leading ! character means inversion
-	 * of the remaining specification.
-	 */
-	const char *s = str;
-handle_inversion:
-	while (*s == '!') {
-		for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
-			set[p].not = !set[p].not;
-		}
-		++s;
-	}
-
-	if (strcmp(s, "none") == 0) {
-		/*
-		 * No syscall numbers are added to sets.
-		 * Subsequent is_number_in_set invocations
-		 * will return set[p]->not.
-		 */
-		return;
-	} else if (strcmp(s, "all") == 0) {
-		s = "!none";
-		goto handle_inversion;
-	}
-
-	/*
-	 * Split the string into comma separated tokens.
-	 * For each token, call qualify_syscall that will take care
-	 * if adding appropriate syscall numbers to sets.
-	 * The absence of tokens or a negative return code
-	 * from qualify_syscall is a fatal error.
-	 */
-	char *copy = xstrdup(s);
-	char *saveptr = NULL;
-	const char *token;
-	bool done = false;
-
-	for (token = strtok_r(copy, ",", &saveptr); token;
-	     token = strtok_r(NULL, ",", &saveptr)) {
-		done = qualify_syscall(token, set);
-		if (!done) {
-			error_msg_and_die("invalid %s '%s'", name, token);
-		}
-	}
-
-	free(copy);
-
-	if (!done) {
-		error_msg_and_die("invalid %s '%s'", name, str);
-	}
-}
-
-static int
-find_errno_by_name(const char *name)
-{
-	unsigned int i;
-
-	for (i = 1; i < nerrnos; ++i) {
-		if (errnoent[i] && (strcasecmp(name, errnoent[i]) == 0))
-			return i;
-	}
-
-	return -1;
-}
-
-static bool
-parse_inject_token(const char *const token, struct inject_opts *const fopts,
-		   const bool fault_tokens_only)
-{
-	const char *val;
-	int intval;
-
-	if ((val = STR_STRIP_PREFIX(token, "when=")) != token) {
-		/*
-		 *	== 1+1
-		 * F	== F+0
-		 * F+	== F+1
-		 * F+S
-		 */
-		char *end;
-		intval = string_to_uint_ex(val, &end, 0xffff, "+");
-		if (intval < 1)
-			return false;
-
-		fopts->first = intval;
-
-		if (*end) {
-			val = end + 1;
-			if (*val) {
-				/* F+S */
-				intval = string_to_uint_upto(val, 0xffff);
-				if (intval < 1)
-					return false;
-				fopts->step = intval;
-			} else {
-				/* F+ == F+1 */
-				fopts->step = 1;
-			}
-		} else {
-			/* F == F+0 */
-			fopts->step = 0;
-		}
-	} else if ((val = STR_STRIP_PREFIX(token, "error=")) != token) {
-		if (fopts->rval != INJECT_OPTS_RVAL_DEFAULT)
-			return false;
-		intval = string_to_uint_upto(val, MAX_ERRNO_VALUE);
-		if (intval < 0)
-			intval = find_errno_by_name(val);
-		if (intval < 1)
-			return false;
-		fopts->rval = -intval;
-	} else if (!fault_tokens_only
-		   && (val = STR_STRIP_PREFIX(token, "retval=")) != token) {
-		if (fopts->rval != INJECT_OPTS_RVAL_DEFAULT)
-			return false;
-		intval = string_to_uint(val);
-		if (intval < 0)
-			return false;
-		fopts->rval = intval;
-	} else if (!fault_tokens_only
-		   && (val = STR_STRIP_PREFIX(token, "signal=")) != token) {
-		intval = sigstr_to_uint(val);
-		if (intval < 1 || intval > NSIG_BYTES * 8)
-			return false;
-		fopts->signo = intval;
-	} else {
-		return false;
-	}
-
-	return true;
-}
-
-static char *
-parse_inject_expression(const char *const s, char **buf,
-			struct inject_opts *const fopts,
-			const bool fault_tokens_only)
-{
-	char *saveptr = NULL;
-	char *name = NULL;
-	char *token;
-
-	*buf = xstrdup(s);
-	for (token = strtok_r(*buf, ":", &saveptr); token;
-	     token = strtok_r(NULL, ":", &saveptr)) {
-		if (!name)
-			name = token;
-		else if (!parse_inject_token(token, fopts, fault_tokens_only))
-			goto parse_error;
-	}
-
-	if (name)
-		return name;
-
-parse_error:
-	free(*buf);
-	return *buf = NULL;
-}
-
-static void
-qualify_read(const char *const str)
-{
-	qualify_tokens(str, &read_set, string_to_uint, "descriptor");
-}
-
-static void
-qualify_write(const char *const str)
-{
-	qualify_tokens(str, &write_set, string_to_uint, "descriptor");
-}
-
-static void
-qualify_signals(const char *const str)
-{
-	qualify_tokens(str, &signal_set, sigstr_to_uint, "signal");
-}
-
-static void
-qualify_trace(const char *const str)
-{
-	qualify_syscall_tokens(str, trace_set, "system call");
-}
-
-static void
-qualify_abbrev(const char *const str)
-{
-	qualify_syscall_tokens(str, abbrev_set, "system call");
-}
-
-static void
-qualify_verbose(const char *const str)
-{
-	qualify_syscall_tokens(str, verbose_set, "system call");
-}
-
-static void
-qualify_raw(const char *const str)
-{
-	qualify_syscall_tokens(str, raw_set, "system call");
-}
-
-static void
-qualify_inject_common(const char *const str,
-		      const bool fault_tokens_only,
-		      const char *const description)
-{
-	struct inject_opts opts = {
-		.first = 1,
-		.step = 1,
-		.rval = INJECT_OPTS_RVAL_DEFAULT,
-		.signo = 0
-	};
-	char *buf = NULL;
-	char *name = parse_inject_expression(str, &buf, &opts, fault_tokens_only);
-	if (!name) {
-		error_msg_and_die("invalid %s '%s'", description, str);
-	}
-
-	/* If neither of retval, error, or signal is specified, then ... */
-	if (opts.rval == INJECT_OPTS_RVAL_DEFAULT && !opts.signo) {
-		if (fault_tokens_only) {
-			/* in fault= syntax the default error code is ENOSYS. */
-			opts.rval = -ENOSYS;
-		} else {
-			/* in inject= syntax this is not allowed. */
-			error_msg_and_die("invalid %s '%s'", description, str);
-		}
-	}
-
-	struct number_set tmp_set[SUPPORTED_PERSONALITIES];
-	memset(tmp_set, 0, sizeof(tmp_set));
-	qualify_syscall_tokens(name, tmp_set, description);
-
-	free(buf);
-
-	/*
-	 * Initialize inject_vec accourding to tmp_set.
-	 * Merge tmp_set into inject_set.
-	 */
-	unsigned int p;
-	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
-		if (!tmp_set[p].nslots && !tmp_set[p].not) {
-			continue;
-		}
-
-		if (!inject_vec[p]) {
-			inject_vec[p] = xcalloc(nsyscall_vec[p],
-					       sizeof(*inject_vec[p]));
-		}
-
-		unsigned int i;
-		for (i = 0; i < nsyscall_vec[p]; ++i) {
-			if (is_number_in_set(i, &tmp_set[p])) {
-				add_number_to_set(i, &inject_set[p]);
-				inject_vec[p][i] = opts;
-			}
-		}
-
-		free(tmp_set[p].vec);
-	}
-}
-
-static void
-qualify_fault(const char *const str)
-{
-	qualify_inject_common(str, true, "fault argument");
-}
-
-static void
-qualify_inject(const char *const str)
-{
-	qualify_inject_common(str, false, "inject argument");
-}
-
-static const struct qual_options {
-	const char *name;
-	void (*qualify)(const char *);
-} qual_options[] = {
-	{ "trace",	qualify_trace	},
-	{ "t",		qualify_trace	},
-	{ "abbrev",	qualify_abbrev	},
-	{ "a",		qualify_abbrev	},
-	{ "verbose",	qualify_verbose	},
-	{ "v",		qualify_verbose	},
-	{ "raw",	qualify_raw	},
-	{ "x",		qualify_raw	},
-	{ "signal",	qualify_signals	},
-	{ "signals",	qualify_signals	},
-	{ "s",		qualify_signals	},
-	{ "read",	qualify_read	},
-	{ "reads",	qualify_read	},
-	{ "r",		qualify_read	},
-	{ "write",	qualify_write	},
-	{ "writes",	qualify_write	},
-	{ "w",		qualify_write	},
-	{ "fault",	qualify_fault	},
-	{ "inject",	qualify_inject	},
-};
-
-void
-qualify(const char *str)
-{
-	const struct qual_options *opt = qual_options;
-	unsigned int i;
-
-	for (i = 0; i < ARRAY_SIZE(qual_options); ++i) {
-		const char *name = qual_options[i].name;
-		const size_t len = strlen(name);
-		const char *val = str_strip_prefix_len(str, name, len);
-
-		if (val == str || *val != '=')
-			continue;
-		str = val + 1;
-		opt = &qual_options[i];
-		break;
-	}
-
-	opt->qualify(str);
-}
-
-unsigned int
-qual_flags(const unsigned int scno)
-{
-	return	(is_number_in_set(scno, &trace_set[current_personality])
-		   ? QUAL_TRACE : 0)
-		| (is_number_in_set(scno, &abbrev_set[current_personality])
-		   ? QUAL_ABBREV : 0)
-		| (is_number_in_set(scno, &verbose_set[current_personality])
-		   ? QUAL_VERBOSE : 0)
-		| (is_number_in_set(scno, &raw_set[current_personality])
-		   ? QUAL_RAW : 0)
-		| (is_number_in_set(scno, &inject_set[current_personality])
-		   ? QUAL_INJECT : 0);
-}
diff --git a/quota.c b/quota.c
index 7607ae0..ba1d761 100644
--- a/quota.c
+++ b/quota.c
@@ -4,6 +4,7 @@
  * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
  * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
  * Copyright (c) 2005-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2006-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/rtc.c b/rtc.c
index 43ea946..9c02cbd 100644
--- a/rtc.c
+++ b/rtc.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2004 Ulrich Drepper <drepper@redhat.com>
  * Copyright (c) 2004-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -150,5 +151,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/rtnl_addr.c b/rtnl_addr.c
new file mode 100644
index 0000000..a05cfbe
--- /dev/null
+++ b/rtnl_addr.c
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink_route.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+#ifdef HAVE_LINUX_IF_ADDR_H
+# include <linux/if_addr.h>
+#endif
+
+#include "xlat/ifaddrflags.h"
+#include "xlat/routing_scopes.h"
+#include "xlat/rtnl_addr_attrs.h"
+
+static bool
+decode_ifa_address(struct tcb *const tcp,
+		   const kernel_ulong_t addr,
+		   const unsigned int len,
+		   const void *const opaque_data)
+{
+	const struct ifaddrmsg *const ifaddr = opaque_data;
+
+	decode_inet_addr(tcp, addr, len, ifaddr->ifa_family, NULL);
+
+	return true;
+}
+
+static bool
+decode_ifa_cacheinfo(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	struct ifa_cacheinfo ci;
+
+	if (len < sizeof(ci))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &ci)) {
+		PRINT_FIELD_U("{", ci, ifa_prefered);
+		PRINT_FIELD_U(", ", ci, ifa_valid);
+		PRINT_FIELD_U(", ", ci, cstamp);
+		PRINT_FIELD_U(", ", ci, tstamp);
+		tprintf("}");
+	}
+
+	return true;
+}
+
+static bool
+decode_ifa_flags(struct tcb *const tcp,
+		 const kernel_ulong_t addr,
+		 const unsigned int len,
+		 const void *const opaque_data)
+{
+	uint32_t ifa_flags;
+
+	if (len < sizeof(ifa_flags))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &ifa_flags))
+		printflags(ifaddrflags, ifa_flags, "IFA_F_???");
+
+	return true;
+}
+
+static const nla_decoder_t ifaddrmsg_nla_decoders[] = {
+	[IFA_ADDRESS]	= decode_ifa_address,
+	[IFA_LOCAL]	= decode_ifa_address,
+	[IFA_LABEL]	= decode_nla_str,
+	[IFA_BROADCAST]	= decode_ifa_address,
+	[IFA_ANYCAST]	= decode_ifa_address,
+	[IFA_CACHEINFO]	= decode_ifa_cacheinfo,
+	[IFA_MULTICAST]	= decode_ifa_address,
+	[IFA_FLAGS]	= decode_ifa_flags
+};
+
+DECL_NETLINK_ROUTE_DECODER(decode_ifaddrmsg)
+{
+	struct ifaddrmsg ifaddr = { .ifa_family = family };
+	size_t offset = sizeof(ifaddr.ifa_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", ifaddr, ifa_family, addrfams, "AF_???");
+
+	tprints(", ");
+	if (len >= sizeof(ifaddr)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(ifaddr) - offset,
+					 (void *) &ifaddr + offset)) {
+			PRINT_FIELD_U("", ifaddr, ifa_prefixlen);
+			PRINT_FIELD_FLAGS(", ", ifaddr, ifa_flags,
+					  ifaddrflags, "IFA_F_???");
+			PRINT_FIELD_XVAL(", ", ifaddr, ifa_scope,
+					 routing_scopes, NULL);
+			PRINT_FIELD_IFINDEX(", ", ifaddr, ifa_index);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(ifaddr));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_addr_attrs, "IFA_???",
+			      ifaddrmsg_nla_decoders,
+			      ARRAY_SIZE(ifaddrmsg_nla_decoders), &ifaddr);
+	}
+}
diff --git a/rtnl_addrlabel.c b/rtnl_addrlabel.c
new file mode 100644
index 0000000..7fc4875
--- /dev/null
+++ b/rtnl_addrlabel.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+
+# include "netlink_route.h"
+# include "nlattr.h"
+# include "print_fields.h"
+
+# include <linux/if_addrlabel.h>
+# include "netlink.h"
+
+# include "xlat/rtnl_addrlabel_attrs.h"
+
+static bool
+decode_ifal_address(struct tcb *const tcp,
+		    const kernel_ulong_t addr,
+		    const unsigned int len,
+		    const void *const opaque_data)
+{
+	const struct ifaddrlblmsg *const ifal = opaque_data;
+
+	decode_inet_addr(tcp, addr, len, ifal->ifal_family, NULL);
+
+	return true;
+}
+
+static const nla_decoder_t ifaddrlblmsg_nla_decoders[] = {
+	[IFAL_ADDRESS]	= decode_ifal_address,
+	[IFAL_LABEL]	= decode_nla_u32
+};
+
+DECL_NETLINK_ROUTE_DECODER(decode_ifaddrlblmsg)
+{
+	struct ifaddrlblmsg ifal = { .ifal_family = family };
+	size_t offset = sizeof(ifal.ifal_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", ifal, ifal_family, addrfams, "AF_???");
+
+	tprints(", ");
+	if (len >= sizeof(ifal)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(ifal) - offset,
+					 (void *) &ifal + offset)) {
+			PRINT_FIELD_U("", ifal, ifal_prefixlen);
+			PRINT_FIELD_U(", ", ifal, ifal_flags);
+			PRINT_FIELD_IFINDEX(", ", ifal, ifal_index);
+			PRINT_FIELD_U(", ", ifal, ifal_seq);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(ifal));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_addrlabel_attrs, "IFAL_???",
+			      ifaddrlblmsg_nla_decoders,
+			      ARRAY_SIZE(ifaddrlblmsg_nla_decoders), &ifal);
+	}
+}
+
+#endif
diff --git a/rtnl_dcb.c b/rtnl_dcb.c
new file mode 100644
index 0000000..0724dcb
--- /dev/null
+++ b/rtnl_dcb.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#ifdef HAVE_STRUCT_DCBMSG
+
+# include "netlink_route.h"
+# include "nlattr.h"
+# include "print_fields.h"
+
+# include <linux/dcbnl.h>
+# include "netlink.h"
+
+# include "xlat/dcb_commands.h"
+# include "xlat/rtnl_dcb_attrs.h"
+
+DECL_NETLINK_ROUTE_DECODER(decode_dcbmsg)
+{
+	struct dcbmsg dcb = { .dcb_family = family };
+	size_t offset = sizeof(dcb.dcb_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", dcb, dcb_family, addrfams, "AF_???");
+
+	tprints(", ");
+	if (len >= sizeof(dcb)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(dcb) - offset,
+					 (void *) &dcb + offset)) {
+			PRINT_FIELD_XVAL("", dcb, cmd,
+					 dcb_commands, "DCB_CMD_???");
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(dcb));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_dcb_attrs, "DCB_ATTR_???", NULL, 0, NULL);
+	}
+}
+
+#endif
diff --git a/rtnl_link.c b/rtnl_link.c
new file mode 100644
index 0000000..13e56e0
--- /dev/null
+++ b/rtnl_link.c
@@ -0,0 +1,458 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink_route.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include "netlink.h"
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#include "xlat/rtnl_ifla_brport_attrs.h"
+#include "xlat/rtnl_ifla_info_attrs.h"
+#include "xlat/rtnl_ifla_port_attrs.h"
+#include "xlat/rtnl_ifla_vf_port_attrs.h"
+#include "xlat/rtnl_ifla_xdp_attrs.h"
+#include "xlat/rtnl_link_attrs.h"
+#include "xlat/xdp_flags.h"
+
+static bool
+decode_rtnl_link_stats(struct tcb *const tcp,
+		       const kernel_ulong_t addr,
+		       const unsigned int len,
+		       const void *const opaque_data)
+{
+	struct rtnl_link_stats st;
+	const unsigned int min_size =
+		offsetofend(struct rtnl_link_stats, tx_compressed);
+	const unsigned int def_size = sizeof(st);
+	const unsigned int size =
+		(len >= def_size) ? def_size :
+				    ((len == min_size) ? min_size : 0);
+
+	if (!size)
+		return false;
+
+	if (!umoven_or_printaddr(tcp, addr, size, &st)) {
+		PRINT_FIELD_U("{", st, rx_packets);
+		PRINT_FIELD_U(", ", st, tx_packets);
+		PRINT_FIELD_U(", ", st, rx_bytes);
+		PRINT_FIELD_U(", ", st, tx_bytes);
+		PRINT_FIELD_U(", ", st, rx_errors);
+		PRINT_FIELD_U(", ", st, tx_errors);
+		PRINT_FIELD_U(", ", st, rx_dropped);
+		PRINT_FIELD_U(", ", st, tx_dropped);
+		PRINT_FIELD_U(", ", st, multicast);
+		PRINT_FIELD_U(", ", st, collisions);
+
+		PRINT_FIELD_U(", ", st, rx_length_errors);
+		PRINT_FIELD_U(", ", st, rx_over_errors);
+		PRINT_FIELD_U(", ", st, rx_crc_errors);
+		PRINT_FIELD_U(", ", st, rx_frame_errors);
+		PRINT_FIELD_U(", ", st, rx_fifo_errors);
+		PRINT_FIELD_U(", ", st, rx_missed_errors);
+
+		PRINT_FIELD_U(", ", st, tx_aborted_errors);
+		PRINT_FIELD_U(", ", st, tx_carrier_errors);
+		PRINT_FIELD_U(", ", st, tx_fifo_errors);
+		PRINT_FIELD_U(", ", st, tx_heartbeat_errors);
+		PRINT_FIELD_U(", ", st, tx_window_errors);
+
+		PRINT_FIELD_U(", ", st, rx_compressed);
+		PRINT_FIELD_U(", ", st, tx_compressed);
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER
+		if (len >= def_size)
+			PRINT_FIELD_U(", ", st, rx_nohandler);
+#endif
+		tprints("}");
+	}
+
+	return true;
+}
+
+static bool
+decode_ifla_bridge_id(struct tcb *const tcp,
+		      const kernel_ulong_t addr,
+		      const unsigned int len,
+		      const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_IFLA_BRIDGE_ID
+	struct ifla_bridge_id id;
+
+	if (len < sizeof(id))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &id)) {
+		tprintf("{prio=[%u, %u], addr=%02x:%02x:%02x:%02x:%02x:%02x}",
+			id.prio[0], id.prio[1],
+			id.addr[0], id.addr[1], id.addr[2],
+			id.addr[3], id.addr[4], id.addr[5]);
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static const nla_decoder_t ifla_brport_nla_decoders[] = {
+	[IFLA_BRPORT_STATE]			= decode_nla_u8,
+	[IFLA_BRPORT_PRIORITY]			= decode_nla_u16,
+	[IFLA_BRPORT_COST]			= decode_nla_u32,
+	[IFLA_BRPORT_MODE]			= decode_nla_u8,
+	[IFLA_BRPORT_GUARD]			= decode_nla_u8,
+	[IFLA_BRPORT_PROTECT]			= decode_nla_u8,
+	[IFLA_BRPORT_FAST_LEAVE]		= decode_nla_u8,
+	[IFLA_BRPORT_LEARNING]			= decode_nla_u8,
+	[IFLA_BRPORT_UNICAST_FLOOD]		= decode_nla_u8,
+	[IFLA_BRPORT_PROXYARP]			= decode_nla_u8,
+	[IFLA_BRPORT_LEARNING_SYNC]		= decode_nla_u8,
+	[IFLA_BRPORT_PROXYARP_WIFI]		= decode_nla_u8,
+	[IFLA_BRPORT_ROOT_ID]			= decode_ifla_bridge_id,
+	[IFLA_BRPORT_BRIDGE_ID]			= decode_ifla_bridge_id,
+	[IFLA_BRPORT_DESIGNATED_PORT]		= decode_nla_u16,
+	[IFLA_BRPORT_DESIGNATED_COST]		= decode_nla_u16,
+	[IFLA_BRPORT_ID]			= decode_nla_u16,
+	[IFLA_BRPORT_NO]			= decode_nla_u16,
+	[IFLA_BRPORT_TOPOLOGY_CHANGE_ACK]	= decode_nla_u8,
+	[IFLA_BRPORT_CONFIG_PENDING]		= decode_nla_u8,
+	[IFLA_BRPORT_MESSAGE_AGE_TIMER]		= decode_nla_u64,
+	[IFLA_BRPORT_FORWARD_DELAY_TIMER]	= decode_nla_u64,
+	[IFLA_BRPORT_HOLD_TIMER]		= decode_nla_u64,
+	[IFLA_BRPORT_FLUSH]			= NULL,
+	[IFLA_BRPORT_MULTICAST_ROUTER]		= decode_nla_u8,
+	[IFLA_BRPORT_PAD]			= NULL,
+	[IFLA_BRPORT_MCAST_FLOOD]		= decode_nla_u8,
+	[IFLA_BRPORT_MCAST_TO_UCAST]		= decode_nla_u8,
+	[IFLA_BRPORT_VLAN_TUNNEL]		= decode_nla_u8,
+	[IFLA_BRPORT_BCAST_FLOOD]		= decode_nla_u8
+};
+
+static bool
+decode_ifla_protinfo(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_ifla_brport_attrs,
+		      "IFLA_BRPORT_???", ifla_brport_nla_decoders,
+		      ARRAY_SIZE(ifla_brport_nla_decoders), opaque_data);
+
+	return true;
+}
+
+static bool
+decode_rtnl_link_ifmap(struct tcb *const tcp,
+		       const kernel_ulong_t addr,
+		       const unsigned int len,
+		       const void *const opaque_data)
+{
+	struct rtnl_link_ifmap map;
+	const unsigned int sizeof_ifmap =
+		offsetofend(struct rtnl_link_ifmap, port);
+
+	if (len < sizeof_ifmap)
+		return false;
+	else if (!umoven_or_printaddr(tcp, addr, sizeof_ifmap, &map)) {
+		PRINT_FIELD_X("{", map, mem_start);
+		PRINT_FIELD_X(", ", map, mem_end);
+		PRINT_FIELD_X(", ", map, base_addr);
+		PRINT_FIELD_U(", ", map, irq);
+		PRINT_FIELD_U(", ", map, dma);
+		PRINT_FIELD_U(", ", map, port);
+		tprints("}");
+	}
+
+	return true;
+}
+
+static const nla_decoder_t ifla_linkinfo_nla_decoders[] = {
+	[IFLA_INFO_KIND]	= decode_nla_str,
+	[IFLA_INFO_DATA]	= NULL, /* unimplemented */
+	[IFLA_INFO_XSTATS]	= NULL, /* unimplemented */
+	[IFLA_INFO_SLAVE_KIND]	= decode_nla_str,
+	[IFLA_INFO_SLAVE_DATA]	= NULL, /* unimplemented */
+};
+
+static bool
+decode_ifla_linkinfo(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_ifla_info_attrs,
+		      "IFLA_INFO_???", ifla_linkinfo_nla_decoders,
+		      ARRAY_SIZE(ifla_linkinfo_nla_decoders), opaque_data);
+
+	return true;
+}
+
+static bool
+decode_rtnl_link_stats64(struct tcb *const tcp,
+		         const kernel_ulong_t addr,
+			 const unsigned int len,
+			 const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64
+	struct rtnl_link_stats64 st;
+	const unsigned int min_size =
+		offsetofend(struct rtnl_link_stats64, tx_compressed);
+	const unsigned int def_size = sizeof(st);
+	const unsigned int size =
+		(len >= def_size) ? def_size :
+				    ((len == min_size) ? min_size : 0);
+
+	if (!size)
+		return false;
+
+	if (!umoven_or_printaddr(tcp, addr, size, &st)) {
+		PRINT_FIELD_U("{", st, rx_packets);
+		PRINT_FIELD_U(", ", st, tx_packets);
+		PRINT_FIELD_U(", ", st, rx_bytes);
+		PRINT_FIELD_U(", ", st, tx_bytes);
+		PRINT_FIELD_U(", ", st, rx_errors);
+		PRINT_FIELD_U(", ", st, tx_errors);
+		PRINT_FIELD_U(", ", st, rx_dropped);
+		PRINT_FIELD_U(", ", st, tx_dropped);
+		PRINT_FIELD_U(", ", st, multicast);
+		PRINT_FIELD_U(", ", st, collisions);
+
+		PRINT_FIELD_U(", ", st, rx_length_errors);
+		PRINT_FIELD_U(", ", st, rx_over_errors);
+		PRINT_FIELD_U(", ", st, rx_crc_errors);
+		PRINT_FIELD_U(", ", st, rx_frame_errors);
+		PRINT_FIELD_U(", ", st, rx_fifo_errors);
+		PRINT_FIELD_U(", ", st, rx_missed_errors);
+
+		PRINT_FIELD_U(", ", st, tx_aborted_errors);
+		PRINT_FIELD_U(", ", st, tx_carrier_errors);
+		PRINT_FIELD_U(", ", st, tx_fifo_errors);
+		PRINT_FIELD_U(", ", st, tx_heartbeat_errors);
+		PRINT_FIELD_U(", ", st, tx_window_errors);
+
+		PRINT_FIELD_U(", ", st, rx_compressed);
+		PRINT_FIELD_U(", ", st, tx_compressed);
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER
+		if (len >= def_size)
+			PRINT_FIELD_U(", ", st, rx_nohandler);
+#endif
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static bool
+decode_ifla_port_vsi(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_IFLA_PORT_VSI
+	struct ifla_port_vsi vsi;
+
+	if (len < sizeof(vsi))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &vsi)) {
+		PRINT_FIELD_U("{", vsi, vsi_mgr_id);
+		PRINT_FIELD_STRING(", ", vsi, vsi_type_id,
+				   sizeof(vsi.vsi_type_id), QUOTE_FORCE_HEX);
+		PRINT_FIELD_U(", ", vsi, vsi_type_version);
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static const nla_decoder_t ifla_port_nla_decoders[] = {
+	[IFLA_PORT_VF]			= decode_nla_u32,
+	[IFLA_PORT_PROFILE]		= decode_nla_str,
+	[IFLA_PORT_VSI_TYPE]		= decode_ifla_port_vsi,
+	[IFLA_PORT_INSTANCE_UUID]	= NULL, /* default parser */
+	[IFLA_PORT_HOST_UUID]		= NULL, /* default parser */
+	[IFLA_PORT_REQUEST]		= decode_nla_u8,
+	[IFLA_PORT_RESPONSE]		= decode_nla_u16
+};
+
+static bool
+decode_ifla_port(struct tcb *const tcp,
+		 const kernel_ulong_t addr,
+		 const unsigned int len,
+		 const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_ifla_port_attrs,
+		      "IFLA_VF_PORT_???", ifla_port_nla_decoders,
+		      ARRAY_SIZE(ifla_port_nla_decoders), opaque_data);
+
+	return true;
+}
+
+static const nla_decoder_t ifla_vf_port_nla_decoders[] = {
+	[IFLA_VF_PORT] = decode_ifla_port
+};
+
+static bool
+decode_ifla_vf_ports(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_ifla_vf_port_attrs,
+		      "IFLA_VF_PORT_???", ifla_vf_port_nla_decoders,
+		      ARRAY_SIZE(ifla_vf_port_nla_decoders), opaque_data);
+
+	return true;
+}
+
+static bool
+decode_ifla_xdp_flags(struct tcb *const tcp,
+		      const kernel_ulong_t addr,
+		      const unsigned int len,
+		      const void *const opaque_data)
+{
+	uint32_t flags;
+
+	if (len < sizeof(flags))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &flags))
+		printflags(xdp_flags, flags, "XDP_FLAGS_???");
+
+	return true;
+}
+
+static const nla_decoder_t ifla_xdp_nla_decoders[] = {
+	[IFLA_XDP_FD]		= decode_nla_s32,
+	[IFLA_XDP_ATTACHED]	= decode_nla_u8,
+	[IFLA_XDP_FLAGS]	= decode_ifla_xdp_flags,
+	[IFLA_XDP_PROG_ID]	= decode_nla_u32
+};
+
+static bool
+decode_ifla_xdp(struct tcb *const tcp,
+		const kernel_ulong_t addr,
+		const unsigned int len,
+		const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_ifla_xdp_attrs,
+		      "IFLA_XDP_???", ifla_xdp_nla_decoders,
+		      ARRAY_SIZE(ifla_xdp_nla_decoders), opaque_data);
+
+	return true;
+}
+
+static const nla_decoder_t ifinfomsg_nla_decoders[] = {
+	[IFLA_ADDRESS]		= NULL, /* unimplemented */
+	[IFLA_BROADCAST]	= NULL, /* unimplemented */
+	[IFLA_IFNAME]		= decode_nla_str,
+	[IFLA_MTU]		= decode_nla_u32,
+	[IFLA_LINK]		= decode_nla_u32,
+	[IFLA_QDISC]		= decode_nla_str,
+	[IFLA_STATS]		= decode_rtnl_link_stats,
+	[IFLA_COST]		= NULL, /* unused */
+	[IFLA_PRIORITY]		= NULL, /* unused */
+	[IFLA_MASTER]		= decode_nla_u32,
+	[IFLA_WIRELESS]		= NULL, /* unimplemented */
+	[IFLA_PROTINFO]		= decode_ifla_protinfo,
+	[IFLA_TXQLEN]		= decode_nla_u32,
+	[IFLA_MAP]		= decode_rtnl_link_ifmap,
+	[IFLA_WEIGHT]		= decode_nla_u32,
+	[IFLA_OPERSTATE]	= decode_nla_u8,
+	[IFLA_LINKMODE]		= decode_nla_u8,
+	[IFLA_LINKINFO]		= decode_ifla_linkinfo,
+	[IFLA_NET_NS_PID]	= decode_nla_u32,
+	[IFLA_IFALIAS]		= decode_nla_str,
+	[IFLA_NUM_VF]		= decode_nla_u32,
+	[IFLA_VFINFO_LIST]	= NULL, /* unimplemented */
+	[IFLA_STATS64]		= decode_rtnl_link_stats64,
+	[IFLA_VF_PORTS]		= decode_ifla_vf_ports,
+	[IFLA_PORT_SELF]	= decode_ifla_port,
+	[IFLA_AF_SPEC]		= NULL, /* unimplemented */
+	[IFLA_GROUP]		= decode_nla_u32,
+	[IFLA_NET_NS_FD]	= decode_nla_u32,
+	[IFLA_EXT_MASK]		= decode_nla_u32,
+	[IFLA_PROMISCUITY]	= decode_nla_u32,
+	[IFLA_NUM_TX_QUEUES]	= decode_nla_u32,
+	[IFLA_NUM_RX_QUEUES]	= decode_nla_u32,
+	[IFLA_CARRIER]		= decode_nla_u8,
+	[IFLA_PHYS_PORT_ID]	= NULL, /* default parser */
+	[IFLA_CARRIER_CHANGES]	= decode_nla_u32,
+	[IFLA_PHYS_SWITCH_ID]	= NULL, /* default parser */
+	[IFLA_LINK_NETNSID]	= decode_nla_s32,
+	[IFLA_PHYS_PORT_NAME]	= decode_nla_str,
+	[IFLA_PROTO_DOWN]	= decode_nla_u8,
+	[IFLA_GSO_MAX_SEGS]	= decode_nla_u32,
+	[IFLA_GSO_MAX_SIZE]	= decode_nla_u32,
+	[IFLA_PAD]		= NULL,
+	[IFLA_XDP]		= decode_ifla_xdp,
+	[IFLA_EVENT]		= decode_nla_u32
+};
+
+DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg)
+{
+	struct ifinfomsg ifinfo = { .ifi_family = family };
+	size_t offset = sizeof(ifinfo.ifi_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", ifinfo, ifi_family, addrfams, "AF_???");
+
+	tprints(", ");
+	if (len >= sizeof(ifinfo)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(ifinfo) - offset,
+					 (void *) &ifinfo + offset)) {
+			PRINT_FIELD_XVAL("", ifinfo, ifi_type,
+					 arp_hardware_types, "ARPHRD_???");
+			PRINT_FIELD_IFINDEX(", ", ifinfo, ifi_index);
+			PRINT_FIELD_FLAGS(", ", ifinfo, ifi_flags,
+					  iffflags, "IFF_???");
+			PRINT_FIELD_X(", ", ifinfo, ifi_change);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(ifinfo));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_link_attrs, "IFLA_???",
+			      ifinfomsg_nla_decoders,
+			      ARRAY_SIZE(ifinfomsg_nla_decoders), NULL);
+	}
+}
diff --git a/rtnl_mdb.c b/rtnl_mdb.c
new file mode 100644
index 0000000..ebe737d
--- /dev/null
+++ b/rtnl_mdb.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+
+# include "netlink_route.h"
+# include "nlattr.h"
+# include "print_fields.h"
+
+# include <netinet/in.h>
+# include <linux/if_bridge.h>
+# include "netlink.h"
+
+# include "xlat/rtnl_mdb_attrs.h"
+
+DECL_NETLINK_ROUTE_DECODER(decode_br_port_msg)
+{
+	struct br_port_msg bpm = { .family = family };
+	size_t offset = sizeof(bpm.family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", bpm, family, addrfams, "AF_???");
+
+	tprints(", ");
+	if (len >= sizeof(bpm)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(bpm) - offset,
+					 (void *) &bpm + offset)) {
+			PRINT_FIELD_IFINDEX("", bpm, ifindex);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(bpm));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_mdb_attrs, "MDBA_???", NULL, 0, NULL);
+	}
+}
+
+#endif
diff --git a/rtnl_neigh.c b/rtnl_neigh.c
new file mode 100644
index 0000000..0eaadc5
--- /dev/null
+++ b/rtnl_neigh.c
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink_route.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+
+#include "xlat/neighbor_cache_entry_flags.h"
+#include "xlat/neighbor_cache_entry_states.h"
+#include "xlat/rtnl_neigh_attrs.h"
+
+static bool
+decode_neigh_addr(struct tcb *const tcp,
+		  const kernel_ulong_t addr,
+		  const unsigned int len,
+		  const void *const opaque_data)
+{
+	const struct ndmsg *const ndmsg = opaque_data;
+
+	decode_inet_addr(tcp, addr, len, ndmsg->ndm_family, NULL);
+
+	return true;
+}
+
+static bool
+decode_nda_cacheinfo(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	struct nda_cacheinfo ci;
+
+	if (len < sizeof(ci))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &ci)) {
+		PRINT_FIELD_U("{", ci, ndm_confirmed);
+		PRINT_FIELD_U(", ", ci, ndm_used);
+		PRINT_FIELD_U(", ", ci, ndm_updated);
+		PRINT_FIELD_U(", ", ci, ndm_refcnt);
+		tprints("}");
+	}
+
+	return true;
+}
+
+static const nla_decoder_t ndmsg_nla_decoders[] = {
+	[NDA_DST]		= decode_neigh_addr,
+	[NDA_LLADDR]		= decode_neigh_addr,
+	[NDA_CACHEINFO]		= decode_nda_cacheinfo,
+	[NDA_PROBES]		= decode_nla_u32,
+	[NDA_VLAN]		= decode_nla_u16,
+	[NDA_PORT]		= decode_nla_be16,
+	[NDA_VNI]		= decode_nla_u32,
+	[NDA_IFINDEX]		= decode_nla_ifindex,
+	[NDA_MASTER]		= decode_nla_ifindex,
+	[NDA_LINK_NETNSID]	= decode_nla_u32,
+	[NDA_SRC_VNI]		= NULL,
+};
+
+DECL_NETLINK_ROUTE_DECODER(decode_ndmsg)
+{
+	struct ndmsg ndmsg = { .ndm_family = family };
+	size_t offset = sizeof(ndmsg.ndm_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", ndmsg, ndm_family, addrfams, "AF_???");
+
+	tprints(", ");
+	if (len >= sizeof(ndmsg)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(ndmsg) - offset,
+					 (void *) &ndmsg + offset)) {
+			PRINT_FIELD_IFINDEX("", ndmsg, ndm_ifindex);
+			PRINT_FIELD_FLAGS(", ", ndmsg, ndm_state,
+					  neighbor_cache_entry_states,
+					  "NUD_???");
+			PRINT_FIELD_FLAGS(", ", ndmsg, ndm_flags,
+					  neighbor_cache_entry_flags,
+					  "NTF_???");
+			PRINT_FIELD_XVAL(", ", ndmsg, ndm_type,
+					 routing_types, "RTN_???");
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(ndmsg));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_neigh_attrs, "NDA_???",
+			      ndmsg_nla_decoders,
+			      ARRAY_SIZE(ndmsg_nla_decoders), &ndmsg);
+	}
+}
+
+DECL_NETLINK_ROUTE_DECODER(decode_rtm_getneigh)
+{
+	if (family == AF_BRIDGE)
+		decode_ifinfomsg(tcp, nlmsghdr, family, addr, len);
+	else
+		decode_ndmsg(tcp, nlmsghdr, family, addr, len);
+}
diff --git a/rtnl_neightbl.c b/rtnl_neightbl.c
new file mode 100644
index 0000000..9d6cec2
--- /dev/null
+++ b/rtnl_neightbl.c
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink_route.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+
+#include "xlat/rtnl_neightbl_attrs.h"
+#include "xlat/rtnl_neightbl_parms_attrs.h"
+
+static bool
+decode_ndt_config(struct tcb *const tcp,
+		  const kernel_ulong_t addr,
+		  const unsigned int len,
+		  const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_NDT_CONFIG
+	struct ndt_config ndtc;
+
+	if (len < sizeof(ndtc))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &ndtc)) {
+		PRINT_FIELD_U("{", ndtc, ndtc_key_len);
+		PRINT_FIELD_U(", ", ndtc, ndtc_entry_size);
+		PRINT_FIELD_U(", ", ndtc, ndtc_entries);
+		PRINT_FIELD_U(", ", ndtc, ndtc_last_flush);
+		PRINT_FIELD_U(", ", ndtc, ndtc_last_rand);
+		PRINT_FIELD_U(", ", ndtc, ndtc_hash_rnd);
+		PRINT_FIELD_0X(", ", ndtc, ndtc_hash_mask);
+		PRINT_FIELD_U(", ", ndtc, ndtc_hash_chain_gc);
+		PRINT_FIELD_U(", ", ndtc, ndtc_proxy_qlen);
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static const nla_decoder_t ndt_parms_nla_decoders[] = {
+	[NDTPA_IFINDEX]			= decode_nla_ifindex,
+	[NDTPA_REFCNT]			= decode_nla_u32,
+	[NDTPA_REACHABLE_TIME]		= decode_nla_u64,
+	[NDTPA_BASE_REACHABLE_TIME]	= decode_nla_u64,
+	[NDTPA_RETRANS_TIME]		= decode_nla_u64,
+	[NDTPA_GC_STALETIME]		= decode_nla_u64,
+	[NDTPA_DELAY_PROBE_TIME]	= decode_nla_u64,
+	[NDTPA_QUEUE_LEN]		= decode_nla_u32,
+	[NDTPA_APP_PROBES]		= decode_nla_u32,
+	[NDTPA_UCAST_PROBES]		= decode_nla_u32,
+	[NDTPA_MCAST_PROBES]		= decode_nla_u32,
+	[NDTPA_ANYCAST_DELAY]		= decode_nla_u64,
+	[NDTPA_PROXY_DELAY]		= decode_nla_u64,
+	[NDTPA_PROXY_QLEN]		= decode_nla_u32,
+	[NDTPA_LOCKTIME]		= decode_nla_u64,
+	[NDTPA_QUEUE_LENBYTES]		= decode_nla_u32,
+	[NDTPA_MCAST_REPROBES]		= decode_nla_u32,
+	[NDTPA_PAD]			= NULL
+};
+
+static bool
+decode_ndta_parms(struct tcb *const tcp,
+		  const kernel_ulong_t addr,
+		  const unsigned int len,
+		  const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_neightbl_parms_attrs, "NDTPA_???",
+		      ndt_parms_nla_decoders,
+		      ARRAY_SIZE(ndt_parms_nla_decoders), opaque_data);
+
+	return true;
+}
+
+static bool
+decode_ndt_stats(struct tcb *const tcp,
+		 const kernel_ulong_t addr,
+		 const unsigned int len,
+		 const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_NDT_STATS
+	struct ndt_stats ndtst;
+	const unsigned int min_size =
+		offsetofend(struct ndt_stats, ndts_forced_gc_runs);
+	const unsigned int def_size = sizeof(ndtst);
+	const unsigned int size =
+		(len >= def_size) ? def_size :
+				    ((len == min_size) ? min_size : 0);
+
+	if (!size)
+		return false;
+
+	if (!umoven_or_printaddr(tcp, addr, size, &ndtst)) {
+		PRINT_FIELD_U("{", ndtst, ndts_allocs);
+		PRINT_FIELD_U(", ", ndtst, ndts_destroys);
+		PRINT_FIELD_U(", ", ndtst, ndts_hash_grows);
+		PRINT_FIELD_U(", ", ndtst, ndts_res_failed);
+		PRINT_FIELD_U(", ", ndtst, ndts_lookups);
+		PRINT_FIELD_U(", ", ndtst, ndts_hits);
+		PRINT_FIELD_U(", ", ndtst, ndts_rcv_probes_mcast);
+		PRINT_FIELD_U(", ", ndtst, ndts_rcv_probes_ucast);
+		PRINT_FIELD_U(", ", ndtst, ndts_periodic_gc_runs);
+		PRINT_FIELD_U(", ", ndtst, ndts_forced_gc_runs);
+#ifdef HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS
+		if (len >= def_size)
+			PRINT_FIELD_U(", ", ndtst, ndts_table_fulls);
+#endif
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static const nla_decoder_t ndtmsg_nla_decoders[] = {
+	[NDTA_NAME]		= decode_nla_str,
+	[NDTA_THRESH1]		= decode_nla_u32,
+	[NDTA_THRESH2]		= decode_nla_u32,
+	[NDTA_THRESH3]		= decode_nla_u32,
+	[NDTA_CONFIG]		= decode_ndt_config,
+	[NDTA_PARMS]		= decode_ndta_parms,
+	[NDTA_STATS]		= decode_ndt_stats,
+	[NDTA_GC_INTERVAL]	= decode_nla_u64,
+	[NDTA_PAD]		= NULL,
+};
+
+DECL_NETLINK_ROUTE_DECODER(decode_ndtmsg)
+{
+	struct ndtmsg ndtmsg = { .ndtm_family = family };
+
+	PRINT_FIELD_XVAL("{", ndtmsg, ndtm_family, addrfams, "AF_???");
+	tprints("}");
+
+	const size_t offset = NLMSG_ALIGN(sizeof(ndtmsg));
+	if (len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_neightbl_attrs, "NDTA_???",
+			      ndtmsg_nla_decoders,
+			      ARRAY_SIZE(ndtmsg_nla_decoders), NULL);
+	}
+}
diff --git a/rtnl_netconf.c b/rtnl_netconf.c
new file mode 100644
index 0000000..f01c543
--- /dev/null
+++ b/rtnl_netconf.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#ifdef HAVE_STRUCT_NETCONFMSG
+
+# include "netlink_route.h"
+# include "nlattr.h"
+# include "print_fields.h"
+
+# include <linux/netconf.h>
+# include "netlink.h"
+
+# include "xlat/rtnl_netconf_attrs.h"
+
+static const nla_decoder_t netconfmsg_nla_decoders[] = {
+	[NETCONFA_IFINDEX]			= decode_nla_ifindex,
+	[NETCONFA_FORWARDING]			= decode_nla_s32,
+	[NETCONFA_RP_FILTER]			= decode_nla_s32,
+	[NETCONFA_MC_FORWARDING]		= decode_nla_s32,
+	[NETCONFA_PROXY_NEIGH]			= decode_nla_s32,
+	[NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN]	= decode_nla_s32,
+	[NETCONFA_INPUT]			= decode_nla_s32
+};
+
+DECL_NETLINK_ROUTE_DECODER(decode_netconfmsg)
+{
+	struct netconfmsg ncm = { .ncm_family = family };
+
+	PRINT_FIELD_XVAL("{", ncm, ncm_family, addrfams, "AF_???");
+	tprints("}");
+
+	const size_t offset = NLMSG_ALIGN(sizeof(ncm));
+	if (len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_netconf_attrs, "NETCONFA_???",
+			      netconfmsg_nla_decoders,
+			      ARRAY_SIZE(netconfmsg_nla_decoders), NULL);
+	}
+}
+
+#endif
diff --git a/rtnl_nsid.c b/rtnl_nsid.c
new file mode 100644
index 0000000..51ce37b
--- /dev/null
+++ b/rtnl_nsid.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink_route.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+
+#include "xlat/rtnl_nsid_attrs.h"
+
+static const nla_decoder_t rtgenmsg_nla_decoders[] = {
+	[NETNSA_NSID]	= decode_nla_s32,
+	[NETNSA_PID]	= decode_nla_u32,
+	[NETNSA_FD]	= decode_nla_u32
+};
+
+DECL_NETLINK_ROUTE_DECODER(decode_rtgenmsg)
+{
+	struct rtgenmsg rtgenmsg = { .rtgen_family = family };
+
+	PRINT_FIELD_XVAL("{", rtgenmsg, rtgen_family, addrfams, "AF_???");
+	tprints("}");
+
+	const size_t offset = NLMSG_ALIGN(sizeof(rtgenmsg));
+	if (len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_nsid_attrs, "NETNSA_???",
+			      rtgenmsg_nla_decoders,
+			      ARRAY_SIZE(rtgenmsg_nla_decoders), NULL);
+	}
+}
diff --git a/rtnl_route.c b/rtnl_route.c
new file mode 100644
index 0000000..102b805
--- /dev/null
+++ b/rtnl_route.c
@@ -0,0 +1,315 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink_route.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include <linux/ip.h>
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+
+#include "xlat/ip_type_of_services.h"
+#include "xlat/lwtunnel_encap_types.h"
+#include "xlat/route_nexthop_flags.h"
+#include "xlat/routing_flags.h"
+#include "xlat/routing_protocols.h"
+#include "xlat/routing_table_ids.h"
+#include "xlat/routing_types.h"
+#include "xlat/rtnl_route_attrs.h"
+#include "xlat/rtnl_rta_metrics_attrs.h"
+
+bool
+decode_nla_rt_class(struct tcb *const tcp,
+		    const kernel_ulong_t addr,
+		    const unsigned int len,
+		    const void *const opaque_data)
+{
+	uint32_t num;
+
+	if (len < sizeof(num))
+		return false;
+	if (!umove_or_printaddr(tcp, addr, &num))
+		printxval(routing_table_ids, num, NULL);
+	return true;
+}
+
+static bool
+decode_route_addr(struct tcb *const tcp,
+		  const kernel_ulong_t addr,
+		  const unsigned int len,
+		  const void *const opaque_data)
+{
+	const struct rtmsg *const rtmsg = opaque_data;
+
+	decode_inet_addr(tcp, addr, len, rtmsg->rtm_family, NULL);
+
+	return true;
+}
+
+static const nla_decoder_t rta_metrics_nla_decoders[] = {
+	[RTAX_LOCK]		= decode_nla_u32,
+	[RTAX_MTU]		= decode_nla_u32,
+	[RTAX_WINDOW]		= decode_nla_u32,
+	[RTAX_RTT]		= decode_nla_u32,
+	[RTAX_RTTVAR]		= decode_nla_u32,
+	[RTAX_SSTHRESH]		= decode_nla_u32,
+	[RTAX_CWND]		= decode_nla_u32,
+	[RTAX_ADVMSS]		= decode_nla_u32,
+	[RTAX_REORDERING]	= decode_nla_u32,
+	[RTAX_HOPLIMIT]		= decode_nla_u32,
+	[RTAX_INITCWND]		= decode_nla_u32,
+	[RTAX_FEATURES]		= decode_nla_u32,
+	[RTAX_RTO_MIN]		= decode_nla_u32,
+	[RTAX_INITRWND]		= decode_nla_u32,
+	[RTAX_QUICKACK]		= decode_nla_u32,
+	[RTAX_CC_ALGO]		= decode_nla_str
+};
+
+static bool
+decode_rta_metrics(struct tcb *const tcp,
+		   const kernel_ulong_t addr,
+		   const unsigned int len,
+		   const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_rta_metrics_attrs,
+		      "RTAX_???", rta_metrics_nla_decoders,
+		      ARRAY_SIZE(rta_metrics_nla_decoders), opaque_data);
+
+	return true;
+}
+
+static bool
+decode_rta_multipath(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data);
+
+static bool
+decode_rta_cacheinfo(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	struct rta_cacheinfo ci;
+
+	if (len < sizeof(ci))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &ci)) {
+		PRINT_FIELD_U("{", ci, rta_clntref);
+		PRINT_FIELD_U(", ", ci, rta_lastuse);
+		PRINT_FIELD_U(", ", ci, rta_expires);
+		PRINT_FIELD_U(", ", ci, rta_error);
+		PRINT_FIELD_U(", ", ci, rta_used);
+		PRINT_FIELD_X(", ", ci, rta_id);
+		PRINT_FIELD_U(", ", ci, rta_ts);
+		PRINT_FIELD_U(", ", ci, rta_tsage);
+		tprints("}");
+	}
+
+	return true;
+}
+
+static bool
+decode_rta_mfc_stats(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_RTA_MFC_STATS
+	struct rta_mfc_stats mfcs;
+
+	if (len < sizeof(mfcs))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &mfcs)) {
+		PRINT_FIELD_U("{", mfcs, mfcs_packets);
+		PRINT_FIELD_U(", ", mfcs, mfcs_bytes);
+		PRINT_FIELD_U(", ", mfcs, mfcs_wrong_if);
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static bool
+decode_rtvia(struct tcb *const tcp,
+	     const kernel_ulong_t addr,
+	     const unsigned int len,
+	     const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_RTVIA
+	struct rtvia via;
+
+	if (len < sizeof(via))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &via)) {
+		PRINT_FIELD_XVAL("{", via, rtvia_family, addrfams, "AF_???");
+
+		const unsigned int offset = offsetof(struct rtvia, rtvia_addr);
+
+		if (len > offset) {
+			tprints(", ");
+			decode_inet_addr(tcp, addr + offset, len - offset,
+					 via.rtvia_family, "rtvia_addr");
+		}
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static bool
+decode_rta_encap_type(struct tcb *const tcp,
+		      const kernel_ulong_t addr,
+		      const unsigned int len,
+		      const void *const opaque_data)
+{
+	uint16_t type;
+
+	if (len < sizeof(type))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &type))
+		printxval(lwtunnel_encap_types, type, "LWTUNNEL_ENCAP_???");
+
+	return true;
+}
+
+static const nla_decoder_t rtmsg_nla_decoders[] = {
+	[RTA_DST]		= decode_route_addr,
+	[RTA_SRC]		= decode_route_addr,
+	[RTA_IIF]		= decode_nla_ifindex,
+	[RTA_OIF]		= decode_nla_ifindex,
+	[RTA_GATEWAY]		= decode_route_addr,
+	[RTA_PRIORITY]		= decode_nla_u32,
+	[RTA_PREFSRC]		= decode_route_addr,
+	[RTA_METRICS]		= decode_rta_metrics,
+	[RTA_MULTIPATH]		= decode_rta_multipath,
+	[RTA_PROTOINFO]		= decode_nla_u32,
+	[RTA_FLOW]		= decode_nla_u32,
+	[RTA_CACHEINFO]		= decode_rta_cacheinfo,
+	[RTA_SESSION]		= NULL, /* unused */
+	[RTA_MP_ALGO]		= decode_nla_u32,
+	[RTA_TABLE]		= decode_nla_rt_class,
+	[RTA_MARK]		= decode_nla_u32,
+	[RTA_MFC_STATS]		= decode_rta_mfc_stats,
+	[RTA_VIA]		= decode_rtvia,
+	[RTA_NEWDST]		= decode_route_addr,
+	[RTA_PREF]		= decode_nla_u8,
+	[RTA_ENCAP_TYPE]	= decode_rta_encap_type,
+	[RTA_ENCAP]		= NULL, /* unimplemented */
+	[RTA_EXPIRES]		= decode_nla_u64,
+	[RTA_PAD]		= NULL,
+	[RTA_UID]		= decode_nla_u32,
+	[RTA_TTL_PROPAGATE]	= decode_nla_u8
+};
+
+static bool
+decode_rta_multipath(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	struct rtnexthop nh;
+
+	if (len < sizeof(nh))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &nh)) {
+		/* print the whole structure regardless of its rtnh_len */
+		PRINT_FIELD_U("{", nh, rtnh_len);
+		PRINT_FIELD_FLAGS(", ", nh, rtnh_flags,
+				  route_nexthop_flags, "RTNH_F_???");
+		PRINT_FIELD_U(", ", nh, rtnh_hops);
+		PRINT_FIELD_IFINDEX(", ", nh, rtnh_ifindex);
+		tprints("}");
+
+		const unsigned short rtnh_len =
+			len < nh.rtnh_len ? len : nh.rtnh_len;
+		const size_t offset = RTNH_ALIGN(sizeof(nh));
+		if (rtnh_len > offset) {
+			tprints(", ");
+			decode_nlattr(tcp, addr + offset, rtnh_len - offset,
+				      rtnl_route_attrs, "RTA_???",
+				      rtmsg_nla_decoders,
+				      ARRAY_SIZE(rtmsg_nla_decoders),
+				      opaque_data);
+		}
+	}
+
+	return true;
+}
+
+DECL_NETLINK_ROUTE_DECODER(decode_rtmsg)
+{
+	struct rtmsg rtmsg = { .rtm_family = family };
+	size_t offset = sizeof(rtmsg.rtm_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", rtmsg, rtm_family, addrfams, "AF_???");
+
+	tprints(", ");
+	if (len >= sizeof(rtmsg)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(rtmsg) - offset,
+					 (void *) &rtmsg + offset)) {
+			PRINT_FIELD_U("", rtmsg, rtm_dst_len);
+			PRINT_FIELD_U(", ", rtmsg, rtm_src_len);
+			PRINT_FIELD_FLAGS(", ", rtmsg, rtm_tos,
+					  ip_type_of_services, "IPTOS_TOS_???");
+			PRINT_FIELD_XVAL(", ", rtmsg, rtm_table,
+					 routing_table_ids, NULL);
+			PRINT_FIELD_XVAL(", ", rtmsg, rtm_protocol,
+					 routing_protocols, "RTPROT_???");
+			PRINT_FIELD_XVAL(", ", rtmsg, rtm_scope,
+					 routing_scopes, NULL);
+			PRINT_FIELD_XVAL(", ", rtmsg, rtm_type,
+					 routing_types, "RTN_???");
+			PRINT_FIELD_FLAGS(", ", rtmsg, rtm_flags,
+					  routing_flags, "RTM_F_???");
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(rtmsg));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_route_attrs, "RTA_???",
+			      rtmsg_nla_decoders,
+			      ARRAY_SIZE(rtmsg_nla_decoders), &rtmsg);
+	}
+}
diff --git a/rtnl_rule.c b/rtnl_rule.c
new file mode 100644
index 0000000..bd955ea
--- /dev/null
+++ b/rtnl_rule.c
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#include "netlink_route.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+#ifdef HAVE_LINUX_FIB_RULES_H
+# include <linux/fib_rules.h>
+#endif
+
+#include "xlat/fib_rule_actions.h"
+#include "xlat/fib_rule_flags.h"
+#include "xlat/rtnl_rule_attrs.h"
+
+static bool
+decode_rule_addr(struct tcb *const tcp,
+		 const kernel_ulong_t addr,
+		 const unsigned int len,
+		 const void *const opaque_data)
+{
+	const struct rtmsg *const rtmsg = opaque_data;
+
+	decode_inet_addr(tcp, addr, len, rtmsg->rtm_family, NULL);
+
+	return true;
+}
+
+static bool
+decode_fib_rule_uid_range(struct tcb *const tcp,
+			  const kernel_ulong_t addr,
+			  const unsigned int len,
+			  const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_FIB_RULE_UID_RANGE
+	struct fib_rule_uid_range range;
+
+	if (len < sizeof(range))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &range)) {
+		PRINT_FIELD_U("{", range, start);
+		PRINT_FIELD_U(", ", range, end);
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static const nla_decoder_t fib_rule_hdr_nla_decoders[] = {
+	[FRA_DST]			= decode_rule_addr,
+	[FRA_SRC]			= decode_rule_addr,
+	[FRA_IIFNAME]			= decode_nla_str,
+	[FRA_GOTO]			= decode_nla_u32,
+	[FRA_PRIORITY]			= decode_nla_u32,
+	[FRA_FWMARK]			= decode_nla_u32,
+	[FRA_FLOW]			= decode_nla_u32,
+	[FRA_TUN_ID]			= decode_nla_be64,
+	[FRA_SUPPRESS_IFGROUP]		= decode_nla_u32,
+	[FRA_SUPPRESS_PREFIXLEN]	= decode_nla_u32,
+	[FRA_TABLE]			= decode_nla_rt_class,
+	[FRA_FWMASK]			= decode_nla_u32,
+	[FRA_OIFNAME]			= decode_nla_str,
+	[FRA_PAD]			= NULL,
+	[FRA_L3MDEV]			= decode_nla_u8,
+	[FRA_UID_RANGE]			= decode_fib_rule_uid_range
+};
+
+DECL_NETLINK_ROUTE_DECODER(decode_fib_rule_hdr)
+{
+	/*
+	 * struct rtmsg and struct fib_rule_hdr are essentially
+	 * the same structure, use struct rtmsg but treat it as
+	 * struct fib_rule_hdr.
+	 */
+	struct rtmsg msg = { .rtm_family = family };
+	size_t offset = sizeof(msg.rtm_family);
+	bool decode_nla = false;
+
+	tprints("{family=");
+	printxval(addrfams, msg.rtm_family, "AF_???");
+
+	tprints(", ");
+	if (len >= sizeof(msg)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(msg) - offset,
+					 (void *) &msg + offset)) {
+			tprintf("dst_len=%u, src_len=%u",
+				msg.rtm_dst_len, msg.rtm_src_len);
+			tprints(", tos=");
+			printflags(ip_type_of_services, msg.rtm_tos,
+				   "IPTOS_TOS_???");
+			tprints(", table=");
+			printxval(routing_table_ids, msg.rtm_table, NULL);
+			tprints(", action=");
+			printxval(fib_rule_actions, msg.rtm_type, "FR_ACT_???");
+			tprints(", flags=");
+			printflags(fib_rule_flags, msg.rtm_flags,
+				   "FIB_RULE_???");
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(msg));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_rule_attrs, "FRA_???",
+			      fib_rule_hdr_nla_decoders,
+			      ARRAY_SIZE(fib_rule_hdr_nla_decoders), &msg);
+	}
+}
diff --git a/rtnl_tc.c b/rtnl_tc.c
new file mode 100644
index 0000000..74d9df2
--- /dev/null
+++ b/rtnl_tc.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink_route.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+
+#include "xlat/rtnl_tc_attrs.h"
+
+DECL_NETLINK_ROUTE_DECODER(decode_tcmsg)
+{
+	struct tcmsg tcmsg = { .tcm_family = family };
+	size_t offset = sizeof(tcmsg.tcm_family);
+	bool decode_nla = false;
+
+	PRINT_FIELD_XVAL("{", tcmsg, tcm_family, addrfams, "AF_???");
+
+	tprints(", ");
+	if (len >= sizeof(tcmsg)) {
+		if (!umoven_or_printaddr(tcp, addr + offset,
+					 sizeof(tcmsg) - offset,
+					 (void *) &tcmsg + offset)) {
+			PRINT_FIELD_IFINDEX("", tcmsg, tcm_ifindex);
+			PRINT_FIELD_U(", ", tcmsg, tcm_handle);
+			PRINT_FIELD_U(", ", tcmsg, tcm_parent);
+			PRINT_FIELD_U(", ", tcmsg, tcm_info);
+			decode_nla = true;
+		}
+	} else
+		tprints("...");
+	tprints("}");
+
+	offset = NLMSG_ALIGN(sizeof(tcmsg));
+	if (decode_nla && len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_tc_attrs, "TCA_???", NULL, 0, NULL);
+	}
+}
diff --git a/rtnl_tc_action.c b/rtnl_tc_action.c
new file mode 100644
index 0000000..ca0b72b
--- /dev/null
+++ b/rtnl_tc_action.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include "netlink_route.h"
+#include "nlattr.h"
+#include "print_fields.h"
+
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+
+#include "xlat/rtnl_tc_action_attrs.h"
+
+DECL_NETLINK_ROUTE_DECODER(decode_tcamsg)
+{
+	struct tcamsg tca = { .tca_family = family };
+
+	PRINT_FIELD_XVAL("{", tca, tca_family, addrfams, "AF_???");
+	tprints("}");
+
+	const size_t offset = NLMSG_ALIGN(sizeof(tca));
+	if (len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_tc_action_attrs, "TCA_ACT_???",
+			      NULL, 0, NULL);
+	}
+}
diff --git a/scno.am b/scno.am
index ee3db59..f28823b 100644
--- a/scno.am
+++ b/scno.am
@@ -41,4 +41,5 @@
 	LC_ALL=C sed -n '$(SCNO_SED)' $(filter-out $<,$^) >> $@-t
 	mv $@-t $@
 
+BUILT_SOURCES += scno.h
 CLEANFILES += syscallent.i scno.h
diff --git a/scno.h b/scno.h
index aa7ac9f..722ec96 100644
--- a/scno.h
+++ b/scno.h
@@ -5,1002 +5,999 @@
 #else
 # define SYSCALL_BIT 0
 #endif
-#ifndef __NR_read
-# define __NR_read (SYSCALL_BIT | 0)
-#endif
-#ifndef __NR_write
-# define __NR_write (SYSCALL_BIT | 1)
-#endif
-#ifndef __NR_open
-# define __NR_open (SYSCALL_BIT | 2)
-#endif
-#ifndef __NR_close
-# define __NR_close (SYSCALL_BIT | 3)
-#endif
-#ifndef __NR_stat
-# define __NR_stat (SYSCALL_BIT | 4)
-#endif
-#ifndef __NR_fstat
-# define __NR_fstat (SYSCALL_BIT | 5)
-#endif
-#ifndef __NR_lstat
-# define __NR_lstat (SYSCALL_BIT | 6)
-#endif
-#ifndef __NR_poll
-# define __NR_poll (SYSCALL_BIT | 7)
-#endif
-#ifndef __NR_lseek
-# define __NR_lseek (SYSCALL_BIT | 8)
-#endif
-#ifndef __NR_mmap
-# define __NR_mmap (SYSCALL_BIT | 9)
-#endif
-#ifndef __NR_mprotect
-# define __NR_mprotect (SYSCALL_BIT | 10)
-#endif
-#ifndef __NR_munmap
-# define __NR_munmap (SYSCALL_BIT | 11)
-#endif
-#ifndef __NR_brk
-# define __NR_brk (SYSCALL_BIT | 12)
-#endif
-#ifndef __NR_rt_sigaction
-# define __NR_rt_sigaction (SYSCALL_BIT | 13)
-#endif
-#ifndef __NR_rt_sigprocmask
-# define __NR_rt_sigprocmask (SYSCALL_BIT | 14)
-#endif
-#ifndef __NR_rt_sigreturn
-# define __NR_rt_sigreturn (SYSCALL_BIT | 15)
-#endif
-#ifndef __NR_ioctl
-# define __NR_ioctl (SYSCALL_BIT | 16)
-#endif
-#ifndef __NR_pread64
-# define __NR_pread64 (SYSCALL_BIT | 17)
-#endif
-#ifndef __NR_pwrite64
-# define __NR_pwrite64 (SYSCALL_BIT | 18)
-#endif
-#ifndef __NR_readv
-# define __NR_readv (SYSCALL_BIT | 19)
-#endif
-#ifndef __NR_writev
-# define __NR_writev (SYSCALL_BIT | 20)
-#endif
-#ifndef __NR_access
-# define __NR_access (SYSCALL_BIT | 21)
-#endif
-#ifndef __NR_pipe
-# define __NR_pipe (SYSCALL_BIT | 22)
-#endif
-#ifndef __NR_select
-# define __NR_select (SYSCALL_BIT | 23)
-#endif
-#ifndef __NR_sched_yield
-# define __NR_sched_yield (SYSCALL_BIT | 24)
-#endif
-#ifndef __NR_mremap
-# define __NR_mremap (SYSCALL_BIT | 25)
-#endif
-#ifndef __NR_msync
-# define __NR_msync (SYSCALL_BIT | 26)
-#endif
-#ifndef __NR_mincore
-# define __NR_mincore (SYSCALL_BIT | 27)
-#endif
-#ifndef __NR_madvise
-# define __NR_madvise (SYSCALL_BIT | 28)
-#endif
-#ifndef __NR_shmget
-# define __NR_shmget (SYSCALL_BIT | 29)
-#endif
-#ifndef __NR_shmat
-# define __NR_shmat (SYSCALL_BIT | 30)
-#endif
-#ifndef __NR_shmctl
-# define __NR_shmctl (SYSCALL_BIT | 31)
-#endif
-#ifndef __NR_dup
-# define __NR_dup (SYSCALL_BIT | 32)
-#endif
-#ifndef __NR_dup2
-# define __NR_dup2 (SYSCALL_BIT | 33)
-#endif
-#ifndef __NR_pause
-# define __NR_pause (SYSCALL_BIT | 34)
-#endif
-#ifndef __NR_nanosleep
-# define __NR_nanosleep (SYSCALL_BIT | 35)
-#endif
-#ifndef __NR_getitimer
-# define __NR_getitimer (SYSCALL_BIT | 36)
-#endif
-#ifndef __NR_alarm
-# define __NR_alarm (SYSCALL_BIT | 37)
-#endif
-#ifndef __NR_setitimer
-# define __NR_setitimer (SYSCALL_BIT | 38)
-#endif
-#ifndef __NR_getpid
-# define __NR_getpid (SYSCALL_BIT | 39)
-#endif
-#ifndef __NR_sendfile
-# define __NR_sendfile (SYSCALL_BIT | 40)
-#endif
-#ifndef __NR_socket
-# define __NR_socket (SYSCALL_BIT | 41)
-#endif
-#ifndef __NR_connect
-# define __NR_connect (SYSCALL_BIT | 42)
-#endif
-#ifndef __NR_accept
-# define __NR_accept (SYSCALL_BIT | 43)
-#endif
-#ifndef __NR_sendto
-# define __NR_sendto (SYSCALL_BIT | 44)
-#endif
-#ifndef __NR_recvfrom
-# define __NR_recvfrom (SYSCALL_BIT | 45)
-#endif
-#ifndef __NR_sendmsg
-# define __NR_sendmsg (SYSCALL_BIT | 46)
-#endif
-#ifndef __NR_recvmsg
-# define __NR_recvmsg (SYSCALL_BIT | 47)
-#endif
-#ifndef __NR_shutdown
-# define __NR_shutdown (SYSCALL_BIT | 48)
-#endif
-#ifndef __NR_bind
-# define __NR_bind (SYSCALL_BIT | 49)
-#endif
-#ifndef __NR_listen
-# define __NR_listen (SYSCALL_BIT | 50)
-#endif
-#ifndef __NR_getsockname
-# define __NR_getsockname (SYSCALL_BIT | 51)
-#endif
-#ifndef __NR_getpeername
-# define __NR_getpeername (SYSCALL_BIT | 52)
-#endif
-#ifndef __NR_socketpair
-# define __NR_socketpair (SYSCALL_BIT | 53)
-#endif
-#ifndef __NR_setsockopt
-# define __NR_setsockopt (SYSCALL_BIT | 54)
-#endif
-#ifndef __NR_getsockopt
-# define __NR_getsockopt (SYSCALL_BIT | 55)
-#endif
-#ifndef __NR_clone
-# define __NR_clone (SYSCALL_BIT | 56)
-#endif
-#ifndef __NR_fork
-# define __NR_fork (SYSCALL_BIT | 57)
-#endif
-#ifndef __NR_vfork
-# define __NR_vfork (SYSCALL_BIT | 58)
-#endif
-#ifndef __NR_execve
-# define __NR_execve (SYSCALL_BIT | 59)
-#endif
-#ifndef __NR_exit
-# define __NR_exit (SYSCALL_BIT | 60)
-#endif
-#ifndef __NR_wait4
-# define __NR_wait4 (SYSCALL_BIT | 61)
-#endif
-#ifndef __NR_kill
-# define __NR_kill (SYSCALL_BIT | 62)
-#endif
-#ifndef __NR_uname
-# define __NR_uname (SYSCALL_BIT | 63)
-#endif
-#ifndef __NR_semget
-# define __NR_semget (SYSCALL_BIT | 64)
-#endif
-#ifndef __NR_semop
-# define __NR_semop (SYSCALL_BIT | 65)
-#endif
-#ifndef __NR_semctl
-# define __NR_semctl (SYSCALL_BIT | 66)
-#endif
-#ifndef __NR_shmdt
-# define __NR_shmdt (SYSCALL_BIT | 67)
-#endif
-#ifndef __NR_msgget
-# define __NR_msgget (SYSCALL_BIT | 68)
-#endif
-#ifndef __NR_msgsnd
-# define __NR_msgsnd (SYSCALL_BIT | 69)
-#endif
-#ifndef __NR_msgrcv
-# define __NR_msgrcv (SYSCALL_BIT | 70)
-#endif
-#ifndef __NR_msgctl
-# define __NR_msgctl (SYSCALL_BIT | 71)
-#endif
-#ifndef __NR_fcntl
-# define __NR_fcntl (SYSCALL_BIT | 72)
-#endif
-#ifndef __NR_flock
-# define __NR_flock (SYSCALL_BIT | 73)
-#endif
-#ifndef __NR_fsync
-# define __NR_fsync (SYSCALL_BIT | 74)
-#endif
-#ifndef __NR_fdatasync
-# define __NR_fdatasync (SYSCALL_BIT | 75)
-#endif
-#ifndef __NR_truncate
-# define __NR_truncate (SYSCALL_BIT | 76)
-#endif
-#ifndef __NR_ftruncate
-# define __NR_ftruncate (SYSCALL_BIT | 77)
-#endif
-#ifndef __NR_getdents
-# define __NR_getdents (SYSCALL_BIT | 78)
-#endif
-#ifndef __NR_getcwd
-# define __NR_getcwd (SYSCALL_BIT | 79)
-#endif
-#ifndef __NR_chdir
-# define __NR_chdir (SYSCALL_BIT | 80)
-#endif
-#ifndef __NR_fchdir
-# define __NR_fchdir (SYSCALL_BIT | 81)
-#endif
-#ifndef __NR_rename
-# define __NR_rename (SYSCALL_BIT | 82)
-#endif
-#ifndef __NR_mkdir
-# define __NR_mkdir (SYSCALL_BIT | 83)
-#endif
-#ifndef __NR_rmdir
-# define __NR_rmdir (SYSCALL_BIT | 84)
-#endif
-#ifndef __NR_creat
-# define __NR_creat (SYSCALL_BIT | 85)
-#endif
-#ifndef __NR_link
-# define __NR_link (SYSCALL_BIT | 86)
-#endif
-#ifndef __NR_unlink
-# define __NR_unlink (SYSCALL_BIT | 87)
-#endif
-#ifndef __NR_symlink
-# define __NR_symlink (SYSCALL_BIT | 88)
-#endif
-#ifndef __NR_readlink
-# define __NR_readlink (SYSCALL_BIT | 89)
-#endif
-#ifndef __NR_chmod
-# define __NR_chmod (SYSCALL_BIT | 90)
-#endif
-#ifndef __NR_fchmod
-# define __NR_fchmod (SYSCALL_BIT | 91)
-#endif
-#ifndef __NR_chown
-# define __NR_chown (SYSCALL_BIT | 92)
-#endif
-#ifndef __NR_fchown
-# define __NR_fchown (SYSCALL_BIT | 93)
-#endif
-#ifndef __NR_lchown
-# define __NR_lchown (SYSCALL_BIT | 94)
-#endif
-#ifndef __NR_umask
-# define __NR_umask (SYSCALL_BIT | 95)
-#endif
-#ifndef __NR_gettimeofday
-# define __NR_gettimeofday (SYSCALL_BIT | 96)
-#endif
-#ifndef __NR_getrlimit
-# define __NR_getrlimit (SYSCALL_BIT | 97)
-#endif
-#ifndef __NR_getrusage
-# define __NR_getrusage (SYSCALL_BIT | 98)
-#endif
-#ifndef __NR_sysinfo
-# define __NR_sysinfo (SYSCALL_BIT | 99)
-#endif
-#ifndef __NR_times
-# define __NR_times (SYSCALL_BIT | 100)
-#endif
-#ifndef __NR_ptrace
-# define __NR_ptrace (SYSCALL_BIT | 101)
-#endif
-#ifndef __NR_getuid
-# define __NR_getuid (SYSCALL_BIT | 102)
-#endif
-#ifndef __NR_syslog
-# define __NR_syslog (SYSCALL_BIT | 103)
-#endif
-#ifndef __NR_getgid
-# define __NR_getgid (SYSCALL_BIT | 104)
-#endif
-#ifndef __NR_setuid
-# define __NR_setuid (SYSCALL_BIT | 105)
-#endif
-#ifndef __NR_setgid
-# define __NR_setgid (SYSCALL_BIT | 106)
-#endif
-#ifndef __NR_geteuid
-# define __NR_geteuid (SYSCALL_BIT | 107)
-#endif
-#ifndef __NR_getegid
-# define __NR_getegid (SYSCALL_BIT | 108)
-#endif
-#ifndef __NR_setpgid
-# define __NR_setpgid (SYSCALL_BIT | 109)
-#endif
-#ifndef __NR_getppid
-# define __NR_getppid (SYSCALL_BIT | 110)
-#endif
-#ifndef __NR_getpgrp
-# define __NR_getpgrp (SYSCALL_BIT | 111)
-#endif
-#ifndef __NR_setsid
-# define __NR_setsid (SYSCALL_BIT | 112)
-#endif
-#ifndef __NR_setreuid
-# define __NR_setreuid (SYSCALL_BIT | 113)
-#endif
-#ifndef __NR_setregid
-# define __NR_setregid (SYSCALL_BIT | 114)
-#endif
-#ifndef __NR_getgroups
-# define __NR_getgroups (SYSCALL_BIT | 115)
-#endif
-#ifndef __NR_setgroups
-# define __NR_setgroups (SYSCALL_BIT | 116)
-#endif
-#ifndef __NR_setresuid
-# define __NR_setresuid (SYSCALL_BIT | 117)
-#endif
-#ifndef __NR_getresuid
-# define __NR_getresuid (SYSCALL_BIT | 118)
-#endif
-#ifndef __NR_setresgid
-# define __NR_setresgid (SYSCALL_BIT | 119)
-#endif
-#ifndef __NR_getresgid
-# define __NR_getresgid (SYSCALL_BIT | 120)
-#endif
-#ifndef __NR_getpgid
-# define __NR_getpgid (SYSCALL_BIT | 121)
-#endif
-#ifndef __NR_setfsuid
-# define __NR_setfsuid (SYSCALL_BIT | 122)
-#endif
-#ifndef __NR_setfsgid
-# define __NR_setfsgid (SYSCALL_BIT | 123)
-#endif
-#ifndef __NR_getsid
-# define __NR_getsid (SYSCALL_BIT | 124)
-#endif
-#ifndef __NR_capget
-# define __NR_capget (SYSCALL_BIT | 125)
-#endif
-#ifndef __NR_capset
-# define __NR_capset (SYSCALL_BIT | 126)
-#endif
-#ifndef __NR_rt_sigpending
-# define __NR_rt_sigpending (SYSCALL_BIT | 127)
-#endif
-#ifndef __NR_rt_sigtimedwait
-# define __NR_rt_sigtimedwait (SYSCALL_BIT | 128)
-#endif
-#ifndef __NR_rt_sigqueueinfo
-# define __NR_rt_sigqueueinfo (SYSCALL_BIT | 129)
-#endif
-#ifndef __NR_rt_sigsuspend
-# define __NR_rt_sigsuspend (SYSCALL_BIT | 130)
-#endif
-#ifndef __NR_sigaltstack
-# define __NR_sigaltstack (SYSCALL_BIT | 131)
-#endif
-#ifndef __NR_utime
-# define __NR_utime (SYSCALL_BIT | 132)
-#endif
-#ifndef __NR_mknod
-# define __NR_mknod (SYSCALL_BIT | 133)
-#endif
-#ifndef __NR_uselib
-# define __NR_uselib (SYSCALL_BIT | 134)
-#endif
-#ifndef __NR_personality
-# define __NR_personality (SYSCALL_BIT | 135)
-#endif
-#ifndef __NR_ustat
-# define __NR_ustat (SYSCALL_BIT | 136)
-#endif
-#ifndef __NR_statfs
-# define __NR_statfs (SYSCALL_BIT | 137)
-#endif
-#ifndef __NR_fstatfs
-# define __NR_fstatfs (SYSCALL_BIT | 138)
-#endif
-#ifndef __NR_sysfs
-# define __NR_sysfs (SYSCALL_BIT | 139)
-#endif
-#ifndef __NR_getpriority
-# define __NR_getpriority (SYSCALL_BIT | 140)
-#endif
-#ifndef __NR_setpriority
-# define __NR_setpriority (SYSCALL_BIT | 141)
-#endif
-#ifndef __NR_sched_setparam
-# define __NR_sched_setparam (SYSCALL_BIT | 142)
-#endif
-#ifndef __NR_sched_getparam
-# define __NR_sched_getparam (SYSCALL_BIT | 143)
-#endif
-#ifndef __NR_sched_setscheduler
-# define __NR_sched_setscheduler (SYSCALL_BIT | 144)
-#endif
-#ifndef __NR_sched_getscheduler
-# define __NR_sched_getscheduler (SYSCALL_BIT | 145)
-#endif
-#ifndef __NR_sched_get_priority_max
-# define __NR_sched_get_priority_max (SYSCALL_BIT | 146)
-#endif
-#ifndef __NR_sched_get_priority_min
-# define __NR_sched_get_priority_min (SYSCALL_BIT | 147)
-#endif
-#ifndef __NR_sched_rr_get_interval
-# define __NR_sched_rr_get_interval (SYSCALL_BIT | 148)
-#endif
-#ifndef __NR_mlock
-# define __NR_mlock (SYSCALL_BIT | 149)
-#endif
-#ifndef __NR_munlock
-# define __NR_munlock (SYSCALL_BIT | 150)
-#endif
-#ifndef __NR_mlockall
-# define __NR_mlockall (SYSCALL_BIT | 151)
-#endif
-#ifndef __NR_munlockall
-# define __NR_munlockall (SYSCALL_BIT | 152)
-#endif
-#ifndef __NR_vhangup
-# define __NR_vhangup (SYSCALL_BIT | 153)
-#endif
-#ifndef __NR_modify_ldt
-# define __NR_modify_ldt (SYSCALL_BIT | 154)
-#endif
-#ifndef __NR_pivot_root
-# define __NR_pivot_root (SYSCALL_BIT | 155)
-#endif
-#ifndef __NR__sysctl
-# define __NR__sysctl (SYSCALL_BIT | 156)
-#endif
-#ifndef __NR_prctl
-# define __NR_prctl (SYSCALL_BIT | 157)
-#endif
-#ifndef __NR_arch_prctl
-# define __NR_arch_prctl (SYSCALL_BIT | 158)
-#endif
-#ifndef __NR_adjtimex
-# define __NR_adjtimex (SYSCALL_BIT | 159)
-#endif
-#ifndef __NR_setrlimit
-# define __NR_setrlimit (SYSCALL_BIT | 160)
-#endif
-#ifndef __NR_chroot
-# define __NR_chroot (SYSCALL_BIT | 161)
-#endif
-#ifndef __NR_sync
-# define __NR_sync (SYSCALL_BIT | 162)
-#endif
-#ifndef __NR_acct
-# define __NR_acct (SYSCALL_BIT | 163)
-#endif
-#ifndef __NR_settimeofday
-# define __NR_settimeofday (SYSCALL_BIT | 164)
-#endif
-#ifndef __NR_mount
-# define __NR_mount (SYSCALL_BIT | 165)
-#endif
-#ifndef __NR_umount2
-# define __NR_umount2 (SYSCALL_BIT | 166)
-#endif
-#ifndef __NR_swapon
-# define __NR_swapon (SYSCALL_BIT | 167)
-#endif
-#ifndef __NR_swapoff
-# define __NR_swapoff (SYSCALL_BIT | 168)
-#endif
-#ifndef __NR_reboot
-# define __NR_reboot (SYSCALL_BIT | 169)
-#endif
-#ifndef __NR_sethostname
-# define __NR_sethostname (SYSCALL_BIT | 170)
-#endif
-#ifndef __NR_setdomainname
-# define __NR_setdomainname (SYSCALL_BIT | 171)
-#endif
-#ifndef __NR_iopl
-# define __NR_iopl (SYSCALL_BIT | 172)
-#endif
-#ifndef __NR_ioperm
-# define __NR_ioperm (SYSCALL_BIT | 173)
-#endif
-#ifndef __NR_create_module
-# define __NR_create_module (SYSCALL_BIT | 174)
-#endif
-#ifndef __NR_init_module
-# define __NR_init_module (SYSCALL_BIT | 175)
-#endif
-#ifndef __NR_delete_module
-# define __NR_delete_module (SYSCALL_BIT | 176)
-#endif
-#ifndef __NR_get_kernel_syms
-# define __NR_get_kernel_syms (SYSCALL_BIT | 177)
-#endif
-#ifndef __NR_query_module
-# define __NR_query_module (SYSCALL_BIT | 178)
-#endif
-#ifndef __NR_quotactl
-# define __NR_quotactl (SYSCALL_BIT | 179)
-#endif
-#ifndef __NR_nfsservctl
-# define __NR_nfsservctl (SYSCALL_BIT | 180)
-#endif
-#ifndef __NR_getpmsg
-# define __NR_getpmsg (SYSCALL_BIT | 181)
-#endif
-#ifndef __NR_putpmsg
-# define __NR_putpmsg (SYSCALL_BIT | 182)
-#endif
-#ifndef __NR_afs_syscall
-# define __NR_afs_syscall (SYSCALL_BIT | 183)
-#endif
-#ifndef __NR_tuxcall
-# define __NR_tuxcall (SYSCALL_BIT | 184)
-#endif
-#ifndef __NR_security
-# define __NR_security (SYSCALL_BIT | 185)
-#endif
-#ifndef __NR_gettid
-# define __NR_gettid (SYSCALL_BIT | 186)
-#endif
-#ifndef __NR_readahead
-# define __NR_readahead (SYSCALL_BIT | 187)
-#endif
-#ifndef __NR_setxattr
-# define __NR_setxattr (SYSCALL_BIT | 188)
-#endif
-#ifndef __NR_lsetxattr
-# define __NR_lsetxattr (SYSCALL_BIT | 189)
-#endif
-#ifndef __NR_fsetxattr
-# define __NR_fsetxattr (SYSCALL_BIT | 190)
-#endif
-#ifndef __NR_getxattr
-# define __NR_getxattr (SYSCALL_BIT | 191)
-#endif
-#ifndef __NR_lgetxattr
-# define __NR_lgetxattr (SYSCALL_BIT | 192)
-#endif
-#ifndef __NR_fgetxattr
-# define __NR_fgetxattr (SYSCALL_BIT | 193)
-#endif
-#ifndef __NR_listxattr
-# define __NR_listxattr (SYSCALL_BIT | 194)
-#endif
-#ifndef __NR_llistxattr
-# define __NR_llistxattr (SYSCALL_BIT | 195)
-#endif
-#ifndef __NR_flistxattr
-# define __NR_flistxattr (SYSCALL_BIT | 196)
-#endif
-#ifndef __NR_removexattr
-# define __NR_removexattr (SYSCALL_BIT | 197)
-#endif
-#ifndef __NR_lremovexattr
-# define __NR_lremovexattr (SYSCALL_BIT | 198)
-#endif
-#ifndef __NR_fremovexattr
-# define __NR_fremovexattr (SYSCALL_BIT | 199)
-#endif
-#ifndef __NR_tkill
-# define __NR_tkill (SYSCALL_BIT | 200)
-#endif
-#ifndef __NR_time
-# define __NR_time (SYSCALL_BIT | 201)
-#endif
-#ifndef __NR_futex
-# define __NR_futex (SYSCALL_BIT | 202)
-#endif
-#ifndef __NR_sched_setaffinity
-# define __NR_sched_setaffinity (SYSCALL_BIT | 203)
-#endif
-#ifndef __NR_sched_getaffinity
-# define __NR_sched_getaffinity (SYSCALL_BIT | 204)
-#endif
-#ifndef __NR_set_thread_area
-# define __NR_set_thread_area (SYSCALL_BIT | 205)
-#endif
 #ifndef __NR_io_setup
-# define __NR_io_setup (SYSCALL_BIT | 206)
+# define __NR_io_setup (SYSCALL_BIT | 0)
 #endif
 #ifndef __NR_io_destroy
-# define __NR_io_destroy (SYSCALL_BIT | 207)
-#endif
-#ifndef __NR_io_getevents
-# define __NR_io_getevents (SYSCALL_BIT | 208)
+# define __NR_io_destroy (SYSCALL_BIT | 1)
 #endif
 #ifndef __NR_io_submit
-# define __NR_io_submit (SYSCALL_BIT | 209)
+# define __NR_io_submit (SYSCALL_BIT | 2)
 #endif
 #ifndef __NR_io_cancel
-# define __NR_io_cancel (SYSCALL_BIT | 210)
+# define __NR_io_cancel (SYSCALL_BIT | 3)
 #endif
-#ifndef __NR_get_thread_area
-# define __NR_get_thread_area (SYSCALL_BIT | 211)
+#ifndef __NR_io_getevents
+# define __NR_io_getevents (SYSCALL_BIT | 4)
+#endif
+#ifndef __NR_setxattr
+# define __NR_setxattr (SYSCALL_BIT | 5)
+#endif
+#ifndef __NR_lsetxattr
+# define __NR_lsetxattr (SYSCALL_BIT | 6)
+#endif
+#ifndef __NR_fsetxattr
+# define __NR_fsetxattr (SYSCALL_BIT | 7)
+#endif
+#ifndef __NR_getxattr
+# define __NR_getxattr (SYSCALL_BIT | 8)
+#endif
+#ifndef __NR_lgetxattr
+# define __NR_lgetxattr (SYSCALL_BIT | 9)
+#endif
+#ifndef __NR_fgetxattr
+# define __NR_fgetxattr (SYSCALL_BIT | 10)
+#endif
+#ifndef __NR_listxattr
+# define __NR_listxattr (SYSCALL_BIT | 11)
+#endif
+#ifndef __NR_llistxattr
+# define __NR_llistxattr (SYSCALL_BIT | 12)
+#endif
+#ifndef __NR_flistxattr
+# define __NR_flistxattr (SYSCALL_BIT | 13)
+#endif
+#ifndef __NR_removexattr
+# define __NR_removexattr (SYSCALL_BIT | 14)
+#endif
+#ifndef __NR_lremovexattr
+# define __NR_lremovexattr (SYSCALL_BIT | 15)
+#endif
+#ifndef __NR_fremovexattr
+# define __NR_fremovexattr (SYSCALL_BIT | 16)
+#endif
+#ifndef __NR_getcwd
+# define __NR_getcwd (SYSCALL_BIT | 17)
 #endif
 #ifndef __NR_lookup_dcookie
-# define __NR_lookup_dcookie (SYSCALL_BIT | 212)
-#endif
-#ifndef __NR_epoll_create
-# define __NR_epoll_create (SYSCALL_BIT | 213)
-#endif
-#ifndef __NR_epoll_ctl_old
-# define __NR_epoll_ctl_old (SYSCALL_BIT | 214)
-#endif
-#ifndef __NR_epoll_wait_old
-# define __NR_epoll_wait_old (SYSCALL_BIT | 215)
-#endif
-#ifndef __NR_remap_file_pages
-# define __NR_remap_file_pages (SYSCALL_BIT | 216)
-#endif
-#ifndef __NR_getdents64
-# define __NR_getdents64 (SYSCALL_BIT | 217)
-#endif
-#ifndef __NR_set_tid_address
-# define __NR_set_tid_address (SYSCALL_BIT | 218)
-#endif
-#ifndef __NR_restart_syscall
-# define __NR_restart_syscall (SYSCALL_BIT | 219)
-#endif
-#ifndef __NR_semtimedop
-# define __NR_semtimedop (SYSCALL_BIT | 220)
-#endif
-#ifndef __NR_fadvise64
-# define __NR_fadvise64 (SYSCALL_BIT | 221)
-#endif
-#ifndef __NR_timer_create
-# define __NR_timer_create (SYSCALL_BIT | 222)
-#endif
-#ifndef __NR_timer_settime
-# define __NR_timer_settime (SYSCALL_BIT | 223)
-#endif
-#ifndef __NR_timer_gettime
-# define __NR_timer_gettime (SYSCALL_BIT | 224)
-#endif
-#ifndef __NR_timer_getoverrun
-# define __NR_timer_getoverrun (SYSCALL_BIT | 225)
-#endif
-#ifndef __NR_timer_delete
-# define __NR_timer_delete (SYSCALL_BIT | 226)
-#endif
-#ifndef __NR_clock_settime
-# define __NR_clock_settime (SYSCALL_BIT | 227)
-#endif
-#ifndef __NR_clock_gettime
-# define __NR_clock_gettime (SYSCALL_BIT | 228)
-#endif
-#ifndef __NR_clock_getres
-# define __NR_clock_getres (SYSCALL_BIT | 229)
-#endif
-#ifndef __NR_clock_nanosleep
-# define __NR_clock_nanosleep (SYSCALL_BIT | 230)
-#endif
-#ifndef __NR_exit_group
-# define __NR_exit_group (SYSCALL_BIT | 231)
-#endif
-#ifndef __NR_epoll_wait
-# define __NR_epoll_wait (SYSCALL_BIT | 232)
-#endif
-#ifndef __NR_epoll_ctl
-# define __NR_epoll_ctl (SYSCALL_BIT | 233)
-#endif
-#ifndef __NR_tgkill
-# define __NR_tgkill (SYSCALL_BIT | 234)
-#endif
-#ifndef __NR_utimes
-# define __NR_utimes (SYSCALL_BIT | 235)
-#endif
-#ifndef __NR_vserver
-# define __NR_vserver (SYSCALL_BIT | 236)
-#endif
-#ifndef __NR_mbind
-# define __NR_mbind (SYSCALL_BIT | 237)
-#endif
-#ifndef __NR_set_mempolicy
-# define __NR_set_mempolicy (SYSCALL_BIT | 238)
-#endif
-#ifndef __NR_get_mempolicy
-# define __NR_get_mempolicy (SYSCALL_BIT | 239)
-#endif
-#ifndef __NR_mq_open
-# define __NR_mq_open (SYSCALL_BIT | 240)
-#endif
-#ifndef __NR_mq_unlink
-# define __NR_mq_unlink (SYSCALL_BIT | 241)
-#endif
-#ifndef __NR_mq_timedsend
-# define __NR_mq_timedsend (SYSCALL_BIT | 242)
-#endif
-#ifndef __NR_mq_timedreceive
-# define __NR_mq_timedreceive (SYSCALL_BIT | 243)
-#endif
-#ifndef __NR_mq_notify
-# define __NR_mq_notify (SYSCALL_BIT | 244)
-#endif
-#ifndef __NR_mq_getsetattr
-# define __NR_mq_getsetattr (SYSCALL_BIT | 245)
-#endif
-#ifndef __NR_kexec_load
-# define __NR_kexec_load (SYSCALL_BIT | 246)
-#endif
-#ifndef __NR_waitid
-# define __NR_waitid (SYSCALL_BIT | 247)
-#endif
-#ifndef __NR_add_key
-# define __NR_add_key (SYSCALL_BIT | 248)
-#endif
-#ifndef __NR_request_key
-# define __NR_request_key (SYSCALL_BIT | 249)
-#endif
-#ifndef __NR_keyctl
-# define __NR_keyctl (SYSCALL_BIT | 250)
-#endif
-#ifndef __NR_ioprio_set
-# define __NR_ioprio_set (SYSCALL_BIT | 251)
-#endif
-#ifndef __NR_ioprio_get
-# define __NR_ioprio_get (SYSCALL_BIT | 252)
-#endif
-#ifndef __NR_inotify_init
-# define __NR_inotify_init (SYSCALL_BIT | 253)
-#endif
-#ifndef __NR_inotify_add_watch
-# define __NR_inotify_add_watch (SYSCALL_BIT | 254)
-#endif
-#ifndef __NR_inotify_rm_watch
-# define __NR_inotify_rm_watch (SYSCALL_BIT | 255)
-#endif
-#ifndef __NR_migrate_pages
-# define __NR_migrate_pages (SYSCALL_BIT | 256)
-#endif
-#ifndef __NR_openat
-# define __NR_openat (SYSCALL_BIT | 257)
-#endif
-#ifndef __NR_mkdirat
-# define __NR_mkdirat (SYSCALL_BIT | 258)
-#endif
-#ifndef __NR_mknodat
-# define __NR_mknodat (SYSCALL_BIT | 259)
-#endif
-#ifndef __NR_fchownat
-# define __NR_fchownat (SYSCALL_BIT | 260)
-#endif
-#ifndef __NR_futimesat
-# define __NR_futimesat (SYSCALL_BIT | 261)
-#endif
-#ifndef __NR_newfstatat
-# define __NR_newfstatat (SYSCALL_BIT | 262)
-#endif
-#ifndef __NR_unlinkat
-# define __NR_unlinkat (SYSCALL_BIT | 263)
-#endif
-#ifndef __NR_renameat
-# define __NR_renameat (SYSCALL_BIT | 264)
-#endif
-#ifndef __NR_linkat
-# define __NR_linkat (SYSCALL_BIT | 265)
-#endif
-#ifndef __NR_symlinkat
-# define __NR_symlinkat (SYSCALL_BIT | 266)
-#endif
-#ifndef __NR_readlinkat
-# define __NR_readlinkat (SYSCALL_BIT | 267)
-#endif
-#ifndef __NR_fchmodat
-# define __NR_fchmodat (SYSCALL_BIT | 268)
-#endif
-#ifndef __NR_faccessat
-# define __NR_faccessat (SYSCALL_BIT | 269)
-#endif
-#ifndef __NR_pselect6
-# define __NR_pselect6 (SYSCALL_BIT | 270)
-#endif
-#ifndef __NR_ppoll
-# define __NR_ppoll (SYSCALL_BIT | 271)
-#endif
-#ifndef __NR_unshare
-# define __NR_unshare (SYSCALL_BIT | 272)
-#endif
-#ifndef __NR_set_robust_list
-# define __NR_set_robust_list (SYSCALL_BIT | 273)
-#endif
-#ifndef __NR_get_robust_list
-# define __NR_get_robust_list (SYSCALL_BIT | 274)
-#endif
-#ifndef __NR_splice
-# define __NR_splice (SYSCALL_BIT | 275)
-#endif
-#ifndef __NR_tee
-# define __NR_tee (SYSCALL_BIT | 276)
-#endif
-#ifndef __NR_sync_file_range
-# define __NR_sync_file_range (SYSCALL_BIT | 277)
-#endif
-#ifndef __NR_vmsplice
-# define __NR_vmsplice (SYSCALL_BIT | 278)
-#endif
-#ifndef __NR_move_pages
-# define __NR_move_pages (SYSCALL_BIT | 279)
-#endif
-#ifndef __NR_utimensat
-# define __NR_utimensat (SYSCALL_BIT | 280)
-#endif
-#ifndef __NR_epoll_pwait
-# define __NR_epoll_pwait (SYSCALL_BIT | 281)
-#endif
-#ifndef __NR_signalfd
-# define __NR_signalfd (SYSCALL_BIT | 282)
-#endif
-#ifndef __NR_timerfd_create
-# define __NR_timerfd_create (SYSCALL_BIT | 283)
-#endif
-#ifndef __NR_eventfd
-# define __NR_eventfd (SYSCALL_BIT | 284)
-#endif
-#ifndef __NR_fallocate
-# define __NR_fallocate (SYSCALL_BIT | 285)
-#endif
-#ifndef __NR_timerfd_settime
-# define __NR_timerfd_settime (SYSCALL_BIT | 286)
-#endif
-#ifndef __NR_timerfd_gettime
-# define __NR_timerfd_gettime (SYSCALL_BIT | 287)
-#endif
-#ifndef __NR_accept4
-# define __NR_accept4 (SYSCALL_BIT | 288)
-#endif
-#ifndef __NR_signalfd4
-# define __NR_signalfd4 (SYSCALL_BIT | 289)
+# define __NR_lookup_dcookie (SYSCALL_BIT | 18)
 #endif
 #ifndef __NR_eventfd2
-# define __NR_eventfd2 (SYSCALL_BIT | 290)
+# define __NR_eventfd2 (SYSCALL_BIT | 19)
 #endif
 #ifndef __NR_epoll_create1
-# define __NR_epoll_create1 (SYSCALL_BIT | 291)
+# define __NR_epoll_create1 (SYSCALL_BIT | 20)
+#endif
+#ifndef __NR_epoll_ctl
+# define __NR_epoll_ctl (SYSCALL_BIT | 21)
+#endif
+#ifndef __NR_epoll_pwait
+# define __NR_epoll_pwait (SYSCALL_BIT | 22)
+#endif
+#ifndef __NR_dup
+# define __NR_dup (SYSCALL_BIT | 23)
 #endif
 #ifndef __NR_dup3
-# define __NR_dup3 (SYSCALL_BIT | 292)
+# define __NR_dup3 (SYSCALL_BIT | 24)
 #endif
-#ifndef __NR_pipe2
-# define __NR_pipe2 (SYSCALL_BIT | 293)
+#ifndef __NR_fcntl
+# define __NR_fcntl (SYSCALL_BIT | 25)
 #endif
 #ifndef __NR_inotify_init1
-# define __NR_inotify_init1 (SYSCALL_BIT | 294)
+# define __NR_inotify_init1 (SYSCALL_BIT | 26)
+#endif
+#ifndef __NR_inotify_add_watch
+# define __NR_inotify_add_watch (SYSCALL_BIT | 27)
+#endif
+#ifndef __NR_inotify_rm_watch
+# define __NR_inotify_rm_watch (SYSCALL_BIT | 28)
+#endif
+#ifndef __NR_ioctl
+# define __NR_ioctl (SYSCALL_BIT | 29)
+#endif
+#ifndef __NR_ioprio_set
+# define __NR_ioprio_set (SYSCALL_BIT | 30)
+#endif
+#ifndef __NR_ioprio_get
+# define __NR_ioprio_get (SYSCALL_BIT | 31)
+#endif
+#ifndef __NR_flock
+# define __NR_flock (SYSCALL_BIT | 32)
+#endif
+#ifndef __NR_mknodat
+# define __NR_mknodat (SYSCALL_BIT | 33)
+#endif
+#ifndef __NR_mkdirat
+# define __NR_mkdirat (SYSCALL_BIT | 34)
+#endif
+#ifndef __NR_unlinkat
+# define __NR_unlinkat (SYSCALL_BIT | 35)
+#endif
+#ifndef __NR_symlinkat
+# define __NR_symlinkat (SYSCALL_BIT | 36)
+#endif
+#ifndef __NR_linkat
+# define __NR_linkat (SYSCALL_BIT | 37)
+#endif
+#ifndef __NR_renameat
+# define __NR_renameat (SYSCALL_BIT | 38)
+#endif
+#ifndef __NR_umount2
+# define __NR_umount2 (SYSCALL_BIT | 39)
+#endif
+#ifndef __NR_mount
+# define __NR_mount (SYSCALL_BIT | 40)
+#endif
+#ifndef __NR_pivot_root
+# define __NR_pivot_root (SYSCALL_BIT | 41)
+#endif
+#ifndef __NR_nfsservctl
+# define __NR_nfsservctl (SYSCALL_BIT | 42)
+#endif
+#ifndef __NR_statfs
+# define __NR_statfs (SYSCALL_BIT | 43)
+#endif
+#ifndef __NR_fstatfs
+# define __NR_fstatfs (SYSCALL_BIT | 44)
+#endif
+#ifndef __NR_truncate
+# define __NR_truncate (SYSCALL_BIT | 45)
+#endif
+#ifndef __NR_ftruncate
+# define __NR_ftruncate (SYSCALL_BIT | 46)
+#endif
+#ifndef __NR_fallocate
+# define __NR_fallocate (SYSCALL_BIT | 47)
+#endif
+#ifndef __NR_faccessat
+# define __NR_faccessat (SYSCALL_BIT | 48)
+#endif
+#ifndef __NR_chdir
+# define __NR_chdir (SYSCALL_BIT | 49)
+#endif
+#ifndef __NR_fchdir
+# define __NR_fchdir (SYSCALL_BIT | 50)
+#endif
+#ifndef __NR_chroot
+# define __NR_chroot (SYSCALL_BIT | 51)
+#endif
+#ifndef __NR_fchmod
+# define __NR_fchmod (SYSCALL_BIT | 52)
+#endif
+#ifndef __NR_fchmodat
+# define __NR_fchmodat (SYSCALL_BIT | 53)
+#endif
+#ifndef __NR_fchownat
+# define __NR_fchownat (SYSCALL_BIT | 54)
+#endif
+#ifndef __NR_fchown
+# define __NR_fchown (SYSCALL_BIT | 55)
+#endif
+#ifndef __NR_openat
+# define __NR_openat (SYSCALL_BIT | 56)
+#endif
+#ifndef __NR_close
+# define __NR_close (SYSCALL_BIT | 57)
+#endif
+#ifndef __NR_vhangup
+# define __NR_vhangup (SYSCALL_BIT | 58)
+#endif
+#ifndef __NR_pipe2
+# define __NR_pipe2 (SYSCALL_BIT | 59)
+#endif
+#ifndef __NR_quotactl
+# define __NR_quotactl (SYSCALL_BIT | 60)
+#endif
+#ifndef __NR_getdents64
+# define __NR_getdents64 (SYSCALL_BIT | 61)
+#endif
+#ifndef __NR_lseek
+# define __NR_lseek (SYSCALL_BIT | 62)
+#endif
+#ifndef __NR_read
+# define __NR_read (SYSCALL_BIT | 63)
+#endif
+#ifndef __NR_write
+# define __NR_write (SYSCALL_BIT | 64)
+#endif
+#ifndef __NR_readv
+# define __NR_readv (SYSCALL_BIT | 65)
+#endif
+#ifndef __NR_writev
+# define __NR_writev (SYSCALL_BIT | 66)
+#endif
+#ifndef __NR_pread64
+# define __NR_pread64 (SYSCALL_BIT | 67)
+#endif
+#ifndef __NR_pwrite64
+# define __NR_pwrite64 (SYSCALL_BIT | 68)
 #endif
 #ifndef __NR_preadv
-# define __NR_preadv (SYSCALL_BIT | 295)
+# define __NR_preadv (SYSCALL_BIT | 69)
 #endif
 #ifndef __NR_pwritev
-# define __NR_pwritev (SYSCALL_BIT | 296)
+# define __NR_pwritev (SYSCALL_BIT | 70)
 #endif
-#ifndef __NR_rt_tgsigqueueinfo
-# define __NR_rt_tgsigqueueinfo (SYSCALL_BIT | 297)
+#ifndef __NR_sendfile
+# define __NR_sendfile (SYSCALL_BIT | 71)
 #endif
-#ifndef __NR_perf_event_open
-# define __NR_perf_event_open (SYSCALL_BIT | 298)
+#ifndef __NR_pselect6
+# define __NR_pselect6 (SYSCALL_BIT | 72)
 #endif
-#ifndef __NR_recvmmsg
-# define __NR_recvmmsg (SYSCALL_BIT | 299)
+#ifndef __NR_ppoll
+# define __NR_ppoll (SYSCALL_BIT | 73)
 #endif
-#ifndef __NR_fanotify_init
-# define __NR_fanotify_init (SYSCALL_BIT | 300)
+#ifndef __NR_signalfd4
+# define __NR_signalfd4 (SYSCALL_BIT | 74)
 #endif
-#ifndef __NR_fanotify_mark
-# define __NR_fanotify_mark (SYSCALL_BIT | 301)
+#ifndef __NR_vmsplice
+# define __NR_vmsplice (SYSCALL_BIT | 75)
 #endif
-#ifndef __NR_prlimit64
-# define __NR_prlimit64 (SYSCALL_BIT | 302)
+#ifndef __NR_splice
+# define __NR_splice (SYSCALL_BIT | 76)
 #endif
-#ifndef __NR_name_to_handle_at
-# define __NR_name_to_handle_at (SYSCALL_BIT | 303)
+#ifndef __NR_tee
+# define __NR_tee (SYSCALL_BIT | 77)
 #endif
-#ifndef __NR_open_by_handle_at
-# define __NR_open_by_handle_at (SYSCALL_BIT | 304)
+#ifndef __NR_readlinkat
+# define __NR_readlinkat (SYSCALL_BIT | 78)
 #endif
-#ifndef __NR_clock_adjtime
-# define __NR_clock_adjtime (SYSCALL_BIT | 305)
+#ifndef __NR_newfstatat
+# define __NR_newfstatat (SYSCALL_BIT | 79)
 #endif
-#ifndef __NR_syncfs
-# define __NR_syncfs (SYSCALL_BIT | 306)
+#ifndef __NR_fstat
+# define __NR_fstat (SYSCALL_BIT | 80)
 #endif
-#ifndef __NR_sendmmsg
-# define __NR_sendmmsg (SYSCALL_BIT | 307)
+#ifndef __NR_sync
+# define __NR_sync (SYSCALL_BIT | 81)
 #endif
-#ifndef __NR_setns
-# define __NR_setns (SYSCALL_BIT | 308)
+#ifndef __NR_fsync
+# define __NR_fsync (SYSCALL_BIT | 82)
+#endif
+#ifndef __NR_fdatasync
+# define __NR_fdatasync (SYSCALL_BIT | 83)
+#endif
+#ifndef __NR_sync_file_range
+# define __NR_sync_file_range (SYSCALL_BIT | 84)
+#endif
+#ifndef __NR_timerfd_create
+# define __NR_timerfd_create (SYSCALL_BIT | 85)
+#endif
+#ifndef __NR_timerfd_settime
+# define __NR_timerfd_settime (SYSCALL_BIT | 86)
+#endif
+#ifndef __NR_timerfd_gettime
+# define __NR_timerfd_gettime (SYSCALL_BIT | 87)
+#endif
+#ifndef __NR_utimensat
+# define __NR_utimensat (SYSCALL_BIT | 88)
+#endif
+#ifndef __NR_acct
+# define __NR_acct (SYSCALL_BIT | 89)
+#endif
+#ifndef __NR_capget
+# define __NR_capget (SYSCALL_BIT | 90)
+#endif
+#ifndef __NR_capset
+# define __NR_capset (SYSCALL_BIT | 91)
+#endif
+#ifndef __NR_personality
+# define __NR_personality (SYSCALL_BIT | 92)
+#endif
+#ifndef __NR_exit
+# define __NR_exit (SYSCALL_BIT | 93)
+#endif
+#ifndef __NR_exit_group
+# define __NR_exit_group (SYSCALL_BIT | 94)
+#endif
+#ifndef __NR_waitid
+# define __NR_waitid (SYSCALL_BIT | 95)
+#endif
+#ifndef __NR_set_tid_address
+# define __NR_set_tid_address (SYSCALL_BIT | 96)
+#endif
+#ifndef __NR_unshare
+# define __NR_unshare (SYSCALL_BIT | 97)
+#endif
+#ifndef __NR_futex
+# define __NR_futex (SYSCALL_BIT | 98)
+#endif
+#ifndef __NR_set_robust_list
+# define __NR_set_robust_list (SYSCALL_BIT | 99)
+#endif
+#ifndef __NR_get_robust_list
+# define __NR_get_robust_list (SYSCALL_BIT | 100)
+#endif
+#ifndef __NR_nanosleep
+# define __NR_nanosleep (SYSCALL_BIT | 101)
+#endif
+#ifndef __NR_getitimer
+# define __NR_getitimer (SYSCALL_BIT | 102)
+#endif
+#ifndef __NR_setitimer
+# define __NR_setitimer (SYSCALL_BIT | 103)
+#endif
+#ifndef __NR_kexec_load
+# define __NR_kexec_load (SYSCALL_BIT | 104)
+#endif
+#ifndef __NR_init_module
+# define __NR_init_module (SYSCALL_BIT | 105)
+#endif
+#ifndef __NR_delete_module
+# define __NR_delete_module (SYSCALL_BIT | 106)
+#endif
+#ifndef __NR_timer_create
+# define __NR_timer_create (SYSCALL_BIT | 107)
+#endif
+#ifndef __NR_timer_gettime
+# define __NR_timer_gettime (SYSCALL_BIT | 108)
+#endif
+#ifndef __NR_timer_getoverrun
+# define __NR_timer_getoverrun (SYSCALL_BIT | 109)
+#endif
+#ifndef __NR_timer_settime
+# define __NR_timer_settime (SYSCALL_BIT | 110)
+#endif
+#ifndef __NR_timer_delete
+# define __NR_timer_delete (SYSCALL_BIT | 111)
+#endif
+#ifndef __NR_clock_settime
+# define __NR_clock_settime (SYSCALL_BIT | 112)
+#endif
+#ifndef __NR_clock_gettime
+# define __NR_clock_gettime (SYSCALL_BIT | 113)
+#endif
+#ifndef __NR_clock_getres
+# define __NR_clock_getres (SYSCALL_BIT | 114)
+#endif
+#ifndef __NR_clock_nanosleep
+# define __NR_clock_nanosleep (SYSCALL_BIT | 115)
+#endif
+#ifndef __NR_syslog
+# define __NR_syslog (SYSCALL_BIT | 116)
+#endif
+#ifndef __NR_ptrace
+# define __NR_ptrace (SYSCALL_BIT | 117)
+#endif
+#ifndef __NR_sched_setparam
+# define __NR_sched_setparam (SYSCALL_BIT | 118)
+#endif
+#ifndef __NR_sched_setscheduler
+# define __NR_sched_setscheduler (SYSCALL_BIT | 119)
+#endif
+#ifndef __NR_sched_getscheduler
+# define __NR_sched_getscheduler (SYSCALL_BIT | 120)
+#endif
+#ifndef __NR_sched_getparam
+# define __NR_sched_getparam (SYSCALL_BIT | 121)
+#endif
+#ifndef __NR_sched_setaffinity
+# define __NR_sched_setaffinity (SYSCALL_BIT | 122)
+#endif
+#ifndef __NR_sched_getaffinity
+# define __NR_sched_getaffinity (SYSCALL_BIT | 123)
+#endif
+#ifndef __NR_sched_yield
+# define __NR_sched_yield (SYSCALL_BIT | 124)
+#endif
+#ifndef __NR_sched_get_priority_max
+# define __NR_sched_get_priority_max (SYSCALL_BIT | 125)
+#endif
+#ifndef __NR_sched_get_priority_min
+# define __NR_sched_get_priority_min (SYSCALL_BIT | 126)
+#endif
+#ifndef __NR_sched_rr_get_interval
+# define __NR_sched_rr_get_interval (SYSCALL_BIT | 127)
+#endif
+#ifndef __NR_restart_syscall
+# define __NR_restart_syscall (SYSCALL_BIT | 128)
+#endif
+#ifndef __NR_kill
+# define __NR_kill (SYSCALL_BIT | 129)
+#endif
+#ifndef __NR_tkill
+# define __NR_tkill (SYSCALL_BIT | 130)
+#endif
+#ifndef __NR_tgkill
+# define __NR_tgkill (SYSCALL_BIT | 131)
+#endif
+#ifndef __NR_sigaltstack
+# define __NR_sigaltstack (SYSCALL_BIT | 132)
+#endif
+#ifndef __NR_rt_sigsuspend
+# define __NR_rt_sigsuspend (SYSCALL_BIT | 133)
+#endif
+#ifndef __NR_rt_sigaction
+# define __NR_rt_sigaction (SYSCALL_BIT | 134)
+#endif
+#ifndef __NR_rt_sigprocmask
+# define __NR_rt_sigprocmask (SYSCALL_BIT | 135)
+#endif
+#ifndef __NR_rt_sigpending
+# define __NR_rt_sigpending (SYSCALL_BIT | 136)
+#endif
+#ifndef __NR_rt_sigtimedwait
+# define __NR_rt_sigtimedwait (SYSCALL_BIT | 137)
+#endif
+#ifndef __NR_rt_sigqueueinfo
+# define __NR_rt_sigqueueinfo (SYSCALL_BIT | 138)
+#endif
+#ifndef __NR_rt_sigreturn
+# define __NR_rt_sigreturn (SYSCALL_BIT | 139)
+#endif
+#ifndef __NR_setpriority
+# define __NR_setpriority (SYSCALL_BIT | 140)
+#endif
+#ifndef __NR_getpriority
+# define __NR_getpriority (SYSCALL_BIT | 141)
+#endif
+#ifndef __NR_reboot
+# define __NR_reboot (SYSCALL_BIT | 142)
+#endif
+#ifndef __NR_setregid
+# define __NR_setregid (SYSCALL_BIT | 143)
+#endif
+#ifndef __NR_setgid
+# define __NR_setgid (SYSCALL_BIT | 144)
+#endif
+#ifndef __NR_setreuid
+# define __NR_setreuid (SYSCALL_BIT | 145)
+#endif
+#ifndef __NR_setuid
+# define __NR_setuid (SYSCALL_BIT | 146)
+#endif
+#ifndef __NR_setresuid
+# define __NR_setresuid (SYSCALL_BIT | 147)
+#endif
+#ifndef __NR_getresuid
+# define __NR_getresuid (SYSCALL_BIT | 148)
+#endif
+#ifndef __NR_setresgid
+# define __NR_setresgid (SYSCALL_BIT | 149)
+#endif
+#ifndef __NR_getresgid
+# define __NR_getresgid (SYSCALL_BIT | 150)
+#endif
+#ifndef __NR_setfsuid
+# define __NR_setfsuid (SYSCALL_BIT | 151)
+#endif
+#ifndef __NR_setfsgid
+# define __NR_setfsgid (SYSCALL_BIT | 152)
+#endif
+#ifndef __NR_times
+# define __NR_times (SYSCALL_BIT | 153)
+#endif
+#ifndef __NR_setpgid
+# define __NR_setpgid (SYSCALL_BIT | 154)
+#endif
+#ifndef __NR_getpgid
+# define __NR_getpgid (SYSCALL_BIT | 155)
+#endif
+#ifndef __NR_getsid
+# define __NR_getsid (SYSCALL_BIT | 156)
+#endif
+#ifndef __NR_setsid
+# define __NR_setsid (SYSCALL_BIT | 157)
+#endif
+#ifndef __NR_getgroups
+# define __NR_getgroups (SYSCALL_BIT | 158)
+#endif
+#ifndef __NR_setgroups
+# define __NR_setgroups (SYSCALL_BIT | 159)
+#endif
+#ifndef __NR_uname
+# define __NR_uname (SYSCALL_BIT | 160)
+#endif
+#ifndef __NR_sethostname
+# define __NR_sethostname (SYSCALL_BIT | 161)
+#endif
+#ifndef __NR_setdomainname
+# define __NR_setdomainname (SYSCALL_BIT | 162)
+#endif
+#ifndef __NR_getrlimit
+# define __NR_getrlimit (SYSCALL_BIT | 163)
+#endif
+#ifndef __NR_setrlimit
+# define __NR_setrlimit (SYSCALL_BIT | 164)
+#endif
+#ifndef __NR_getrusage
+# define __NR_getrusage (SYSCALL_BIT | 165)
+#endif
+#ifndef __NR_umask
+# define __NR_umask (SYSCALL_BIT | 166)
+#endif
+#ifndef __NR_prctl
+# define __NR_prctl (SYSCALL_BIT | 167)
 #endif
 #ifndef __NR_getcpu
-# define __NR_getcpu (SYSCALL_BIT | 309)
+# define __NR_getcpu (SYSCALL_BIT | 168)
+#endif
+#ifndef __NR_gettimeofday
+# define __NR_gettimeofday (SYSCALL_BIT | 169)
+#endif
+#ifndef __NR_settimeofday
+# define __NR_settimeofday (SYSCALL_BIT | 170)
+#endif
+#ifndef __NR_adjtimex
+# define __NR_adjtimex (SYSCALL_BIT | 171)
+#endif
+#ifndef __NR_getpid
+# define __NR_getpid (SYSCALL_BIT | 172)
+#endif
+#ifndef __NR_getppid
+# define __NR_getppid (SYSCALL_BIT | 173)
+#endif
+#ifndef __NR_getuid
+# define __NR_getuid (SYSCALL_BIT | 174)
+#endif
+#ifndef __NR_geteuid
+# define __NR_geteuid (SYSCALL_BIT | 175)
+#endif
+#ifndef __NR_getgid
+# define __NR_getgid (SYSCALL_BIT | 176)
+#endif
+#ifndef __NR_getegid
+# define __NR_getegid (SYSCALL_BIT | 177)
+#endif
+#ifndef __NR_gettid
+# define __NR_gettid (SYSCALL_BIT | 178)
+#endif
+#ifndef __NR_sysinfo
+# define __NR_sysinfo (SYSCALL_BIT | 179)
+#endif
+#ifndef __NR_mq_open
+# define __NR_mq_open (SYSCALL_BIT | 180)
+#endif
+#ifndef __NR_mq_unlink
+# define __NR_mq_unlink (SYSCALL_BIT | 181)
+#endif
+#ifndef __NR_mq_timedsend
+# define __NR_mq_timedsend (SYSCALL_BIT | 182)
+#endif
+#ifndef __NR_mq_timedreceive
+# define __NR_mq_timedreceive (SYSCALL_BIT | 183)
+#endif
+#ifndef __NR_mq_notify
+# define __NR_mq_notify (SYSCALL_BIT | 184)
+#endif
+#ifndef __NR_mq_getsetattr
+# define __NR_mq_getsetattr (SYSCALL_BIT | 185)
+#endif
+#ifndef __NR_msgget
+# define __NR_msgget (SYSCALL_BIT | 186)
+#endif
+#ifndef __NR_msgctl
+# define __NR_msgctl (SYSCALL_BIT | 187)
+#endif
+#ifndef __NR_msgrcv
+# define __NR_msgrcv (SYSCALL_BIT | 188)
+#endif
+#ifndef __NR_msgsnd
+# define __NR_msgsnd (SYSCALL_BIT | 189)
+#endif
+#ifndef __NR_semget
+# define __NR_semget (SYSCALL_BIT | 190)
+#endif
+#ifndef __NR_semctl
+# define __NR_semctl (SYSCALL_BIT | 191)
+#endif
+#ifndef __NR_semtimedop
+# define __NR_semtimedop (SYSCALL_BIT | 192)
+#endif
+#ifndef __NR_semop
+# define __NR_semop (SYSCALL_BIT | 193)
+#endif
+#ifndef __NR_shmget
+# define __NR_shmget (SYSCALL_BIT | 194)
+#endif
+#ifndef __NR_shmctl
+# define __NR_shmctl (SYSCALL_BIT | 195)
+#endif
+#ifndef __NR_shmat
+# define __NR_shmat (SYSCALL_BIT | 196)
+#endif
+#ifndef __NR_shmdt
+# define __NR_shmdt (SYSCALL_BIT | 197)
+#endif
+#ifndef __NR_socket
+# define __NR_socket (SYSCALL_BIT | 198)
+#endif
+#ifndef __NR_socketpair
+# define __NR_socketpair (SYSCALL_BIT | 199)
+#endif
+#ifndef __NR_bind
+# define __NR_bind (SYSCALL_BIT | 200)
+#endif
+#ifndef __NR_listen
+# define __NR_listen (SYSCALL_BIT | 201)
+#endif
+#ifndef __NR_accept
+# define __NR_accept (SYSCALL_BIT | 202)
+#endif
+#ifndef __NR_connect
+# define __NR_connect (SYSCALL_BIT | 203)
+#endif
+#ifndef __NR_getsockname
+# define __NR_getsockname (SYSCALL_BIT | 204)
+#endif
+#ifndef __NR_getpeername
+# define __NR_getpeername (SYSCALL_BIT | 205)
+#endif
+#ifndef __NR_sendto
+# define __NR_sendto (SYSCALL_BIT | 206)
+#endif
+#ifndef __NR_recvfrom
+# define __NR_recvfrom (SYSCALL_BIT | 207)
+#endif
+#ifndef __NR_setsockopt
+# define __NR_setsockopt (SYSCALL_BIT | 208)
+#endif
+#ifndef __NR_getsockopt
+# define __NR_getsockopt (SYSCALL_BIT | 209)
+#endif
+#ifndef __NR_shutdown
+# define __NR_shutdown (SYSCALL_BIT | 210)
+#endif
+#ifndef __NR_sendmsg
+# define __NR_sendmsg (SYSCALL_BIT | 211)
+#endif
+#ifndef __NR_recvmsg
+# define __NR_recvmsg (SYSCALL_BIT | 212)
+#endif
+#ifndef __NR_readahead
+# define __NR_readahead (SYSCALL_BIT | 213)
+#endif
+#ifndef __NR_brk
+# define __NR_brk (SYSCALL_BIT | 214)
+#endif
+#ifndef __NR_munmap
+# define __NR_munmap (SYSCALL_BIT | 215)
+#endif
+#ifndef __NR_mremap
+# define __NR_mremap (SYSCALL_BIT | 216)
+#endif
+#ifndef __NR_add_key
+# define __NR_add_key (SYSCALL_BIT | 217)
+#endif
+#ifndef __NR_request_key
+# define __NR_request_key (SYSCALL_BIT | 218)
+#endif
+#ifndef __NR_keyctl
+# define __NR_keyctl (SYSCALL_BIT | 219)
+#endif
+#ifndef __NR_clone
+# define __NR_clone (SYSCALL_BIT | 220)
+#endif
+#ifndef __NR_execve
+# define __NR_execve (SYSCALL_BIT | 221)
+#endif
+#ifndef __NR_mmap
+# define __NR_mmap (SYSCALL_BIT | 222)
+#endif
+#ifndef __NR_fadvise64
+# define __NR_fadvise64 (SYSCALL_BIT | 223)
+#endif
+#ifndef __NR_swapon
+# define __NR_swapon (SYSCALL_BIT | 224)
+#endif
+#ifndef __NR_swapoff
+# define __NR_swapoff (SYSCALL_BIT | 225)
+#endif
+#ifndef __NR_mprotect
+# define __NR_mprotect (SYSCALL_BIT | 226)
+#endif
+#ifndef __NR_msync
+# define __NR_msync (SYSCALL_BIT | 227)
+#endif
+#ifndef __NR_mlock
+# define __NR_mlock (SYSCALL_BIT | 228)
+#endif
+#ifndef __NR_munlock
+# define __NR_munlock (SYSCALL_BIT | 229)
+#endif
+#ifndef __NR_mlockall
+# define __NR_mlockall (SYSCALL_BIT | 230)
+#endif
+#ifndef __NR_munlockall
+# define __NR_munlockall (SYSCALL_BIT | 231)
+#endif
+#ifndef __NR_mincore
+# define __NR_mincore (SYSCALL_BIT | 232)
+#endif
+#ifndef __NR_madvise
+# define __NR_madvise (SYSCALL_BIT | 233)
+#endif
+#ifndef __NR_remap_file_pages
+# define __NR_remap_file_pages (SYSCALL_BIT | 234)
+#endif
+#ifndef __NR_mbind
+# define __NR_mbind (SYSCALL_BIT | 235)
+#endif
+#ifndef __NR_get_mempolicy
+# define __NR_get_mempolicy (SYSCALL_BIT | 236)
+#endif
+#ifndef __NR_set_mempolicy
+# define __NR_set_mempolicy (SYSCALL_BIT | 237)
+#endif
+#ifndef __NR_migrate_pages
+# define __NR_migrate_pages (SYSCALL_BIT | 238)
+#endif
+#ifndef __NR_move_pages
+# define __NR_move_pages (SYSCALL_BIT | 239)
+#endif
+#ifndef __NR_rt_tgsigqueueinfo
+# define __NR_rt_tgsigqueueinfo (SYSCALL_BIT | 240)
+#endif
+#ifndef __NR_perf_event_open
+# define __NR_perf_event_open (SYSCALL_BIT | 241)
+#endif
+#ifndef __NR_accept4
+# define __NR_accept4 (SYSCALL_BIT | 242)
+#endif
+#ifndef __NR_recvmmsg
+# define __NR_recvmmsg (SYSCALL_BIT | 243)
+#endif
+#ifndef __NR_wait4
+# define __NR_wait4 (SYSCALL_BIT | 260)
+#endif
+#ifndef __NR_prlimit64
+# define __NR_prlimit64 (SYSCALL_BIT | 261)
+#endif
+#ifndef __NR_fanotify_init
+# define __NR_fanotify_init (SYSCALL_BIT | 262)
+#endif
+#ifndef __NR_fanotify_mark
+# define __NR_fanotify_mark (SYSCALL_BIT | 263)
+#endif
+#ifndef __NR_name_to_handle_at
+# define __NR_name_to_handle_at (SYSCALL_BIT | 264)
+#endif
+#ifndef __NR_open_by_handle_at
+# define __NR_open_by_handle_at (SYSCALL_BIT | 265)
+#endif
+#ifndef __NR_clock_adjtime
+# define __NR_clock_adjtime (SYSCALL_BIT | 266)
+#endif
+#ifndef __NR_syncfs
+# define __NR_syncfs (SYSCALL_BIT | 267)
+#endif
+#ifndef __NR_setns
+# define __NR_setns (SYSCALL_BIT | 268)
+#endif
+#ifndef __NR_sendmmsg
+# define __NR_sendmmsg (SYSCALL_BIT | 269)
 #endif
 #ifndef __NR_process_vm_readv
-# define __NR_process_vm_readv (SYSCALL_BIT | 310)
+# define __NR_process_vm_readv (SYSCALL_BIT | 270)
 #endif
 #ifndef __NR_process_vm_writev
-# define __NR_process_vm_writev (SYSCALL_BIT | 311)
+# define __NR_process_vm_writev (SYSCALL_BIT | 271)
 #endif
 #ifndef __NR_kcmp
-# define __NR_kcmp (SYSCALL_BIT | 312)
+# define __NR_kcmp (SYSCALL_BIT | 272)
 #endif
 #ifndef __NR_finit_module
-# define __NR_finit_module (SYSCALL_BIT | 313)
+# define __NR_finit_module (SYSCALL_BIT | 273)
 #endif
 #ifndef __NR_sched_setattr
-# define __NR_sched_setattr (SYSCALL_BIT | 314)
+# define __NR_sched_setattr (SYSCALL_BIT | 274)
 #endif
 #ifndef __NR_sched_getattr
-# define __NR_sched_getattr (SYSCALL_BIT | 315)
+# define __NR_sched_getattr (SYSCALL_BIT | 275)
 #endif
 #ifndef __NR_renameat2
-# define __NR_renameat2 (SYSCALL_BIT | 316)
+# define __NR_renameat2 (SYSCALL_BIT | 276)
 #endif
 #ifndef __NR_seccomp
-# define __NR_seccomp (SYSCALL_BIT | 317)
+# define __NR_seccomp (SYSCALL_BIT | 277)
 #endif
 #ifndef __NR_getrandom
-# define __NR_getrandom (SYSCALL_BIT | 318)
+# define __NR_getrandom (SYSCALL_BIT | 278)
 #endif
 #ifndef __NR_memfd_create
-# define __NR_memfd_create (SYSCALL_BIT | 319)
-#endif
-#ifndef __NR_kexec_file_load
-# define __NR_kexec_file_load (SYSCALL_BIT | 320)
+# define __NR_memfd_create (SYSCALL_BIT | 279)
 #endif
 #ifndef __NR_bpf
-# define __NR_bpf (SYSCALL_BIT | 321)
+# define __NR_bpf (SYSCALL_BIT | 280)
 #endif
 #ifndef __NR_execveat
-# define __NR_execveat (SYSCALL_BIT | 322)
+# define __NR_execveat (SYSCALL_BIT | 281)
 #endif
 #ifndef __NR_userfaultfd
-# define __NR_userfaultfd (SYSCALL_BIT | 323)
+# define __NR_userfaultfd (SYSCALL_BIT | 282)
 #endif
 #ifndef __NR_membarrier
-# define __NR_membarrier (SYSCALL_BIT | 324)
+# define __NR_membarrier (SYSCALL_BIT | 283)
 #endif
 #ifndef __NR_mlock2
-# define __NR_mlock2 (SYSCALL_BIT | 325)
+# define __NR_mlock2 (SYSCALL_BIT | 284)
 #endif
 #ifndef __NR_copy_file_range
-# define __NR_copy_file_range (SYSCALL_BIT | 326)
+# define __NR_copy_file_range (SYSCALL_BIT | 285)
 #endif
 #ifndef __NR_preadv2
-# define __NR_preadv2 (SYSCALL_BIT | 327)
+# define __NR_preadv2 (SYSCALL_BIT | 286)
 #endif
 #ifndef __NR_pwritev2
-# define __NR_pwritev2 (SYSCALL_BIT | 328)
+# define __NR_pwritev2 (SYSCALL_BIT | 287)
 #endif
 #ifndef __NR_pkey_mprotect
-# define __NR_pkey_mprotect (SYSCALL_BIT | 329)
+# define __NR_pkey_mprotect (SYSCALL_BIT | 288)
 #endif
 #ifndef __NR_pkey_alloc
-# define __NR_pkey_alloc (SYSCALL_BIT | 330)
+# define __NR_pkey_alloc (SYSCALL_BIT | 289)
 #endif
 #ifndef __NR_pkey_free
-# define __NR_pkey_free (SYSCALL_BIT | 331)
+# define __NR_pkey_free (SYSCALL_BIT | 290)
 #endif
 #ifndef __NR_statx
-# define __NR_statx (SYSCALL_BIT | 332)
+# define __NR_statx (SYSCALL_BIT | 291)
+#endif
+#ifndef __NR_open
+# define __NR_open (SYSCALL_BIT | 1024)
+#endif
+#ifndef __NR_link
+# define __NR_link (SYSCALL_BIT | 1025)
+#endif
+#ifndef __NR_unlink
+# define __NR_unlink (SYSCALL_BIT | 1026)
+#endif
+#ifndef __NR_mknod
+# define __NR_mknod (SYSCALL_BIT | 1027)
+#endif
+#ifndef __NR_chmod
+# define __NR_chmod (SYSCALL_BIT | 1028)
+#endif
+#ifndef __NR_chown
+# define __NR_chown (SYSCALL_BIT | 1029)
+#endif
+#ifndef __NR_mkdir
+# define __NR_mkdir (SYSCALL_BIT | 1030)
+#endif
+#ifndef __NR_rmdir
+# define __NR_rmdir (SYSCALL_BIT | 1031)
+#endif
+#ifndef __NR_lchown
+# define __NR_lchown (SYSCALL_BIT | 1032)
+#endif
+#ifndef __NR_access
+# define __NR_access (SYSCALL_BIT | 1033)
+#endif
+#ifndef __NR_rename
+# define __NR_rename (SYSCALL_BIT | 1034)
+#endif
+#ifndef __NR_readlink
+# define __NR_readlink (SYSCALL_BIT | 1035)
+#endif
+#ifndef __NR_symlink
+# define __NR_symlink (SYSCALL_BIT | 1036)
+#endif
+#ifndef __NR_utimes
+# define __NR_utimes (SYSCALL_BIT | 1037)
+#endif
+#ifndef __NR_stat
+# define __NR_stat (SYSCALL_BIT | 1038)
+#endif
+#ifndef __NR_lstat
+# define __NR_lstat (SYSCALL_BIT | 1039)
+#endif
+#ifndef __NR_pipe
+# define __NR_pipe (SYSCALL_BIT | 1040)
+#endif
+#ifndef __NR_dup2
+# define __NR_dup2 (SYSCALL_BIT | 1041)
+#endif
+#ifndef __NR_epoll_create
+# define __NR_epoll_create (SYSCALL_BIT | 1042)
+#endif
+#ifndef __NR_inotify_init
+# define __NR_inotify_init (SYSCALL_BIT | 1043)
+#endif
+#ifndef __NR_eventfd
+# define __NR_eventfd (SYSCALL_BIT | 1044)
+#endif
+#ifndef __NR_signalfd
+# define __NR_signalfd (SYSCALL_BIT | 1045)
+#endif
+#ifndef __NR_sendfile
+# define __NR_sendfile (SYSCALL_BIT | 1046)
+#endif
+#ifndef __NR_ftruncate
+# define __NR_ftruncate (SYSCALL_BIT | 1047)
+#endif
+#ifndef __NR_truncate
+# define __NR_truncate (SYSCALL_BIT | 1048)
+#endif
+#ifndef __NR_stat
+# define __NR_stat (SYSCALL_BIT | 1049)
+#endif
+#ifndef __NR_lstat
+# define __NR_lstat (SYSCALL_BIT | 1050)
+#endif
+#ifndef __NR_fstat
+# define __NR_fstat (SYSCALL_BIT | 1051)
+#endif
+#ifndef __NR_fcntl
+# define __NR_fcntl (SYSCALL_BIT | 1052)
+#endif
+#ifndef __NR_fadvise64
+# define __NR_fadvise64 (SYSCALL_BIT | 1053)
+#endif
+#ifndef __NR_newfstatat
+# define __NR_newfstatat (SYSCALL_BIT | 1054)
+#endif
+#ifndef __NR_fstatfs
+# define __NR_fstatfs (SYSCALL_BIT | 1055)
+#endif
+#ifndef __NR_statfs
+# define __NR_statfs (SYSCALL_BIT | 1056)
+#endif
+#ifndef __NR_lseek
+# define __NR_lseek (SYSCALL_BIT | 1057)
+#endif
+#ifndef __NR_mmap
+# define __NR_mmap (SYSCALL_BIT | 1058)
+#endif
+#ifndef __NR_alarm
+# define __NR_alarm (SYSCALL_BIT | 1059)
+#endif
+#ifndef __NR_getpgrp
+# define __NR_getpgrp (SYSCALL_BIT | 1060)
+#endif
+#ifndef __NR_pause
+# define __NR_pause (SYSCALL_BIT | 1061)
+#endif
+#ifndef __NR_time
+# define __NR_time (SYSCALL_BIT | 1062)
+#endif
+#ifndef __NR_utime
+# define __NR_utime (SYSCALL_BIT | 1063)
+#endif
+#ifndef __NR_creat
+# define __NR_creat (SYSCALL_BIT | 1064)
+#endif
+#ifndef __NR_getdents
+# define __NR_getdents (SYSCALL_BIT | 1065)
+#endif
+#ifndef __NR_futimesat
+# define __NR_futimesat (SYSCALL_BIT | 1066)
+#endif
+#ifndef __NR_select
+# define __NR_select (SYSCALL_BIT | 1067)
+#endif
+#ifndef __NR_poll
+# define __NR_poll (SYSCALL_BIT | 1068)
+#endif
+#ifndef __NR_epoll_wait
+# define __NR_epoll_wait (SYSCALL_BIT | 1069)
+#endif
+#ifndef __NR_ustat
+# define __NR_ustat (SYSCALL_BIT | 1070)
+#endif
+#ifndef __NR_vfork
+# define __NR_vfork (SYSCALL_BIT | 1071)
+#endif
+#ifndef __NR_wait4
+# define __NR_wait4 (SYSCALL_BIT | 1072)
+#endif
+#ifndef __NR_recv
+# define __NR_recv (SYSCALL_BIT | 1073)
+#endif
+#ifndef __NR_send
+# define __NR_send (SYSCALL_BIT | 1074)
+#endif
+#ifndef __NR_bdflush
+# define __NR_bdflush (SYSCALL_BIT | 1075)
+#endif
+#ifndef __NR_umount
+# define __NR_umount (SYSCALL_BIT | 1076)
+#endif
+#ifndef __NR_uselib
+# define __NR_uselib (SYSCALL_BIT | 1077)
+#endif
+#ifndef __NR_sysctl
+# define __NR_sysctl (SYSCALL_BIT | 1078)
+#endif
+#ifndef __NR_fork
+# define __NR_fork (SYSCALL_BIT | 1079)
 #endif
diff --git a/scsi.c b/scsi.c
index 3579620..e4a776e 100644
--- a/scsi.c
+++ b/scsi.c
@@ -46,7 +46,7 @@
 			return decode_sg_io_v4(tcp, arg);
 		default:
 			tprintf("[%u]", iid);
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 	}
 
 }
@@ -78,7 +78,7 @@
 			id.h_cmd_per_lun,
 			id.d_queue_depth);
 	}
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 #endif /* HAVE_SCSI_SG_H */
@@ -179,5 +179,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/seccomp.c b/seccomp.c
index 100b7d4..6c19084 100644
--- a/seccomp.c
+++ b/seccomp.c
@@ -1,6 +1,5 @@
 /*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -34,179 +33,6 @@
 #include "xlat/seccomp_ops.h"
 #include "xlat/seccomp_filter_flags.h"
 
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-# include "xlat/bpf_class.h"
-# include "xlat/bpf_miscop.h"
-# include "xlat/bpf_mode.h"
-# include "xlat/bpf_op_alu.h"
-# include "xlat/bpf_op_jmp.h"
-# include "xlat/bpf_rval.h"
-# include "xlat/bpf_size.h"
-# include "xlat/bpf_src.h"
-
-# ifndef SECCOMP_RET_ACTION
-#  define SECCOMP_RET_ACTION 0x7fff0000U
-# endif
-# include "xlat/seccomp_ret_action.h"
-#endif
-
-struct bpf_filter {
-	uint16_t code;
-	uint8_t jt;
-	uint8_t jf;
-	uint32_t k;
-};
-
-#ifdef HAVE_LINUX_FILTER_H
-
-static void
-decode_bpf_code(uint16_t code)
-{
-	uint16_t i = code & ~BPF_CLASS(code);
-
-	printxval(bpf_class, BPF_CLASS(code), "BPF_???");
-	switch (BPF_CLASS(code)) {
-		case BPF_LD:
-		case BPF_LDX:
-			tprints("|");
-			printxval(bpf_size, BPF_SIZE(code), "BPF_???");
-			tprints("|");
-			printxval(bpf_mode, BPF_MODE(code), "BPF_???");
-			break;
-		case BPF_ST:
-		case BPF_STX:
-			if (i) {
-				tprintf("|%#x", i);
-				tprints_comment("BPF_???");
-			}
-			break;
-		case BPF_ALU:
-			tprints("|");
-			printxval(bpf_src, BPF_SRC(code), "BPF_???");
-			tprints("|");
-			printxval(bpf_op_alu, BPF_OP(code), "BPF_???");
-			break;
-		case BPF_JMP:
-			tprints("|");
-			printxval(bpf_src, BPF_SRC(code), "BPF_???");
-			tprints("|");
-			printxval(bpf_op_jmp, BPF_OP(code), "BPF_???");
-			break;
-		case BPF_RET:
-			tprints("|");
-			printxval(bpf_rval, BPF_RVAL(code), "BPF_???");
-			i &= ~BPF_RVAL(code);
-			if (i) {
-				tprintf("|%#x", i);
-				tprints_comment("BPF_???");
-			}
-			break;
-		case BPF_MISC:
-			tprints("|");
-			printxval(bpf_miscop, BPF_MISCOP(code), "BPF_???");
-			i &= ~BPF_MISCOP(code);
-			if (i) {
-				tprintf("|%#x", i);
-				tprints_comment("BPF_???");
-			}
-			break;
-	}
-
-}
-
-#endif /* HAVE_LINUX_FILTER_H */
-
-static void
-decode_bpf_stmt(const struct bpf_filter *filter)
-{
-#ifdef HAVE_LINUX_FILTER_H
-	tprints("BPF_STMT(");
-	decode_bpf_code(filter->code);
-	tprints(", ");
-	if (BPF_CLASS(filter->code) == BPF_RET) {
-		unsigned int action = SECCOMP_RET_ACTION & filter->k;
-		unsigned int data = filter->k & ~action;
-
-		printxval(seccomp_ret_action, action, "SECCOMP_RET_???");
-		if (data)
-			tprintf("|%#x)", data);
-		else
-			tprints(")");
-	} else {
-		tprintf("%#x)", filter->k);
-	}
-#else
-	tprintf("BPF_STMT(%#x, %#x)", filter->code, filter->k);
-#endif /* HAVE_LINUX_FILTER_H */
-}
-
-static void
-decode_bpf_jump(const struct bpf_filter *filter)
-{
-#ifdef HAVE_LINUX_FILTER_H
-	tprints("BPF_JUMP(");
-	decode_bpf_code(filter->code);
-	tprintf(", %#x, %#x, %#x)",
-		filter->k, filter->jt, filter->jf);
-#else
-	tprintf("BPF_JUMP(%#x, %#x, %#x, %#x)",
-		filter->code, filter->k, filter->jt, filter->jf);
-#endif /* HAVE_LINUX_FILTER_H */
-}
-
-#ifndef BPF_MAXINSNS
-# define BPF_MAXINSNS 4096
-#endif
-
-static bool
-print_bpf_filter(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data)
-{
-	const struct bpf_filter *filter = elem_buf;
-	unsigned int *pn = data;
-
-	if ((*pn)++ >= BPF_MAXINSNS) {
-		tprints("...");
-		return false;
-	}
-
-	if (filter->jt || filter->jf)
-		decode_bpf_jump(filter);
-	else
-		decode_bpf_stmt(filter);
-
-	return true;
-}
-
-void
-print_seccomp_fprog(struct tcb *const tcp, const kernel_ulong_t addr,
-		    const unsigned short len)
-{
-	if (abbrev(tcp)) {
-		printaddr(addr);
-	} else {
-		unsigned int insns = 0;
-		struct bpf_filter filter;
-
-		print_array(tcp, addr, len, &filter, sizeof(filter),
-			    umoven_or_printaddr, print_bpf_filter, &insns);
-	}
-}
-
-#include "seccomp_fprog.h"
-
-void
-print_seccomp_filter(struct tcb *const tcp, const kernel_ulong_t addr)
-{
-	struct seccomp_fprog fprog;
-
-	if (fetch_seccomp_fprog(tcp, addr, &fprog)) {
-		tprintf("{len=%hu, filter=", fprog.len);
-		print_seccomp_fprog(tcp, fprog.filter, fprog.len);
-		tprints("}");
-	}
-}
-
 static void
 decode_seccomp_set_mode_strict(const unsigned int flags,
 			       const kernel_ulong_t addr)
@@ -226,7 +52,7 @@
 		printflags(seccomp_filter_flags, tcp->u_arg[1],
 			   "SECCOMP_FILTER_FLAG_???");
 		tprints(", ");
-		print_seccomp_filter(tcp, tcp->u_arg[2]);
+		decode_seccomp_fprog(tcp, tcp->u_arg[2]);
 	} else {
 		decode_seccomp_set_mode_strict(tcp->u_arg[1],
 					       tcp->u_arg[2]);
diff --git a/seccomp_fprog.h b/seccomp_fprog.h
deleted file mode 100644
index f483727..0000000
--- a/seccomp_fprog.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef STRACE_SECCOMP_FPROG_H
-#define STRACE_SECCOMP_FPROG_H
-
-struct seccomp_fprog {
-	unsigned short len;
-	unsigned long filter;
-};
-
-#endif /* !STRACE_SECCOMP_FPROG_H */
diff --git a/sen.h b/sen.h
index a078b25..8af7d19 100644
--- a/sen.h
+++ b/sen.h
@@ -220,6 +220,7 @@
 SEN_osf_select,
 SEN_osf_setitimer,
 SEN_osf_settimeofday,
+SEN_osf_sigprocmask,
 SEN_osf_statfs,
 SEN_osf_utimes,
 SEN_osf_wait4,
diff --git a/sg_io_v3.c b/sg_io_v3.c
index 33aff50..88f9dfc 100644
--- a/sg_io_v3.c
+++ b/sg_io_v3.c
@@ -44,6 +44,7 @@
 #include "xlat/sg_io_info.h"
 
 #ifdef HAVE_SCSI_SG_H
+# include "print_fields.h"
 # include "xlat/sg_io_dxfer_direction.h"
 # include "xlat/sg_io_flags.h"
 
@@ -59,6 +60,13 @@
 	}
 }
 
+#define PRINT_FIELD_SG_IO_BUFFER(prefix_, where_, field_, size_, count_, tcp_)	\
+	do {									\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);			\
+		print_sg_io_buffer((tcp_), (mpers_ptr_t)((where_).field_),	\
+				   (size_), (count_));				\
+	} while (0)
+
 static int
 decode_request(struct tcb *const tcp, const kernel_ulong_t arg)
 {
@@ -70,26 +78,22 @@
 	if (umoven_or_printaddr(tcp, arg + skip_iid, sizeof(sg_io) - skip_iid,
 				&sg_io.dxfer_direction)) {
 		tprints("}");
-		return RVAL_DECODED | 1;
+		return RVAL_IOCTL_DECODED;
 	}
 
-	tprints("dxfer_direction=");
-	printxval(sg_io_dxfer_direction, sg_io.dxfer_direction,
-		  "SG_DXFER_???");
-	tprintf(", cmd_len=%u, cmdp=", sg_io.cmd_len);
-	print_sg_io_buffer(tcp, ptr_to_kulong(sg_io.cmdp), sg_io.cmd_len, 0);
-	tprintf(", mx_sb_len=%d", sg_io.mx_sb_len);
-	tprintf(", iovec_count=%d", sg_io.iovec_count);
-	tprintf(", dxfer_len=%u", sg_io.dxfer_len);
-	tprintf(", timeout=%u", sg_io.timeout);
-	tprints(", flags=");
-	printflags(sg_io_flags, sg_io.flags, "SG_FLAG_???");
+	PRINT_FIELD_XVAL("", sg_io, dxfer_direction, sg_io_dxfer_direction,
+			 "SG_DXFER_???");
+	PRINT_FIELD_U(", ", sg_io, cmd_len);
+	PRINT_FIELD_SG_IO_BUFFER(", ", sg_io, cmdp, sg_io.cmd_len, 0, tcp);
+	PRINT_FIELD_U(", ", sg_io, mx_sb_len);
+	PRINT_FIELD_U(", ", sg_io, iovec_count);
+	PRINT_FIELD_U(", ", sg_io, dxfer_len);
+	PRINT_FIELD_U(", ", sg_io, timeout);
+	PRINT_FIELD_FLAGS(", ", sg_io, flags, sg_io_flags, "SG_FLAG_???");
 
 	if (sg_io.dxfer_direction == SG_DXFER_TO_DEV ||
 	    sg_io.dxfer_direction == SG_DXFER_TO_FROM_DEV) {
-		tprints(", dxferp=");
-		print_sg_io_buffer(tcp, ptr_to_kulong(sg_io.dxferp),
-				   sg_io.dxfer_len, sg_io.iovec_count);
+		PRINT_FIELD_SG_IO_BUFFER(", ", sg_io, dxferp, sg_io.dxfer_len, sg_io.iovec_count, tcp);
 	}
 
 	struct_sg_io_hdr *entering_sg_io = malloc(sizeof(*entering_sg_io));
@@ -99,7 +103,7 @@
 		set_tcb_priv_data(tcp, entering_sg_io, free);
 	}
 
-	return 1;
+	return 0;
 }
 
 static int
@@ -110,49 +114,48 @@
 
 	if (umove(tcp, arg, &sg_io) < 0) {
 		/* print i/o fields fetched on entering syscall */
-		if (entering_sg_io->dxfer_direction == SG_DXFER_FROM_DEV) {
-			tprints(", dxferp=");
-			printaddr(ptr_to_kulong(entering_sg_io->dxferp));
-		}
-		tprints(", sbp=");
-		printaddr(ptr_to_kulong(entering_sg_io->sbp));
-		return RVAL_DECODED | 1;
+		if (entering_sg_io->dxfer_direction == SG_DXFER_FROM_DEV)
+			PRINT_FIELD_PTR(", ", *entering_sg_io, dxferp);
+		PRINT_FIELD_PTR(", ", *entering_sg_io, sbp);
+		return RVAL_IOCTL_DECODED;
 	}
 
 	if (sg_io.interface_id != entering_sg_io->interface_id) {
-		tprintf(" => interface_id=%u", sg_io.interface_id);
-		return RVAL_DECODED | 1;
+		PRINT_FIELD_U(" => ", sg_io, interface_id);
+		return RVAL_IOCTL_DECODED;
 	}
 
 	if (sg_io.dxfer_direction == SG_DXFER_FROM_DEV ||
 	    sg_io.dxfer_direction == SG_DXFER_TO_FROM_DEV) {
 		uint32_t din_len = sg_io.dxfer_len;
+		const char *prefix = NULL;
 
 		if (sg_io.resid > 0 && (unsigned int) sg_io.resid <= din_len)
 			din_len -= sg_io.resid;
-		if (sg_io.dxfer_direction == SG_DXFER_FROM_DEV) {
-			tprints(", dxferp=");
-		} else if (din_len) {
-			tprints(" => dxferp=");
-		}
-		if (sg_io.dxfer_direction == SG_DXFER_FROM_DEV || din_len) {
-			print_sg_io_buffer(tcp, ptr_to_kulong(sg_io.dxferp),
-					   din_len, sg_io.iovec_count);
+
+		if (sg_io.dxfer_direction == SG_DXFER_FROM_DEV)
+			prefix = ", ";
+		else if (din_len)
+			prefix = " => ";
+
+		if (prefix) {
+			tprints(prefix);
+			PRINT_FIELD_SG_IO_BUFFER("", sg_io, dxferp, din_len,
+						 sg_io.iovec_count, tcp);
 		}
 	}
-	tprintf(", status=%#x", sg_io.status);
-	tprintf(", masked_status=%#x", sg_io.masked_status);
-	tprintf(", msg_status=%#x", sg_io.msg_status);
-	tprintf(", sb_len_wr=%u, sbp=", sg_io.sb_len_wr);
-	print_sg_io_buffer(tcp, ptr_to_kulong(sg_io.sbp), sg_io.sb_len_wr, 0);
-	tprintf(", host_status=%#x", sg_io.host_status);
-	tprintf(", driver_status=%#x", sg_io.driver_status);
-	tprintf(", resid=%d", sg_io.resid);
-	tprintf(", duration=%u", sg_io.duration);
-	tprints(", info=");
-	printflags(sg_io_info, sg_io.info, "SG_INFO_???");
+	PRINT_FIELD_X(", ", sg_io, status);
+	PRINT_FIELD_X(", ", sg_io, masked_status);
+	PRINT_FIELD_X(", ", sg_io, msg_status);
+	PRINT_FIELD_U(", ", sg_io, sb_len_wr);
+	PRINT_FIELD_SG_IO_BUFFER(", ", sg_io, sbp, sg_io.sb_len_wr, 0, tcp);
+	PRINT_FIELD_X(", ", sg_io, host_status);
+	PRINT_FIELD_X(", ", sg_io, driver_status);
+	PRINT_FIELD_D(", ", sg_io, resid);
+	PRINT_FIELD_U(", ", sg_io, duration);
+	PRINT_FIELD_FLAGS(", ", sg_io, info, sg_io_info, "SG_INFO_???");
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 #else /* !HAVE_SCSI_SG_H */
@@ -161,7 +164,7 @@
 decode_request(struct tcb *const tcp, const kernel_ulong_t arg)
 {
 	tprints("{interface_id='S', ...}");
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 static int
diff --git a/sg_io_v4.c b/sg_io_v4.c
index 1ae8814..2a8380f 100644
--- a/sg_io_v4.c
+++ b/sg_io_v4.c
@@ -30,6 +30,7 @@
 
 #ifdef HAVE_LINUX_BSG_H
 
+# include "print_fields.h"
 # include <linux/bsg.h>
 # include "xlat/bsg_protocol.h"
 # include "xlat/bsg_subprotocol.h"
@@ -47,6 +48,12 @@
 	}
 }
 
+#define PRINT_FIELD_SG_IO_BUFFER(prefix_, where_, field_, size_, count_, tcp_)	\
+	do {									\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);			\
+		print_sg_io_buffer((tcp_), (where_).field_, (size_), (count_));	\
+	} while (0)
+
 static int
 decode_request(struct tcb *const tcp, const kernel_ulong_t arg)
 {
@@ -57,33 +64,31 @@
 	if (umoven_or_printaddr(tcp, arg + skip_iid, sizeof(sg_io) - skip_iid,
 				&sg_io.protocol)) {
 		tprints("}");
-		return RVAL_DECODED | 1;
+		return RVAL_IOCTL_DECODED;
 	}
 
-	tprints("protocol=");
-	printxval(bsg_protocol, sg_io.protocol, "BSG_PROTOCOL_???");
-	tprints(", subprotocol=");
-	printxval(bsg_subprotocol, sg_io.subprotocol, "BSG_SUB_PROTOCOL_???");
-	tprintf(", request_len=%u, request=", sg_io.request_len);
-	print_sg_io_buffer(tcp, sg_io.request, sg_io.request_len, 0);
-	tprintf(", request_tag=%#" PRI__x64, sg_io.request_tag);
-	tprintf(", request_attr=%u", sg_io.request_attr);
-	tprintf(", request_priority=%u", sg_io.request_priority);
-	tprintf(", request_extra=%u", sg_io.request_extra);
-	tprintf(", max_response_len=%u", sg_io.max_response_len);
+	PRINT_FIELD_XVAL("", sg_io, protocol, bsg_protocol, "BSG_PROTOCOL_???");
+	PRINT_FIELD_XVAL(", ", sg_io, subprotocol, bsg_subprotocol,
+			 "BSG_SUB_PROTOCOL_???");
+	PRINT_FIELD_U(", ", sg_io, request_len);
+	PRINT_FIELD_SG_IO_BUFFER(", ", sg_io, request, sg_io.request_len,
+				 0, tcp);
+	PRINT_FIELD_X(", ", sg_io, request_tag);
+	PRINT_FIELD_U(", ", sg_io, request_attr);
+	PRINT_FIELD_U(", ", sg_io, request_priority);
+	PRINT_FIELD_U(", ", sg_io, request_extra);
+	PRINT_FIELD_U(", ", sg_io, max_response_len);
 
-	tprintf(", dout_iovec_count=%u", sg_io.dout_iovec_count);
-	tprintf(", dout_xfer_len=%u", sg_io.dout_xfer_len);
-	tprintf(", din_iovec_count=%u", sg_io.din_iovec_count);
-	tprintf(", din_xfer_len=%u", sg_io.din_xfer_len);
-	tprints(", dout_xferp=");
-	print_sg_io_buffer(tcp, sg_io.dout_xferp, sg_io.dout_xfer_len,
-			   sg_io.dout_iovec_count);
+	PRINT_FIELD_U(", ", sg_io, dout_iovec_count);
+	PRINT_FIELD_U(", ", sg_io, dout_xfer_len);
+	PRINT_FIELD_U(", ", sg_io, din_iovec_count);
+	PRINT_FIELD_U(", ", sg_io, din_xfer_len);
+	PRINT_FIELD_SG_IO_BUFFER(", ", sg_io, dout_xferp, sg_io.dout_xfer_len,
+				 sg_io.dout_iovec_count, tcp);
 
-	tprintf(", timeout=%u", sg_io.timeout);
-	tprints(", flags=");
-	printflags(bsg_flags, sg_io.flags, "BSG_FLAG_???");
-	tprintf(", usr_ptr=%#" PRI__x64, sg_io.usr_ptr);
+	PRINT_FIELD_U(", ", sg_io, timeout);
+	PRINT_FIELD_FLAGS(", ", sg_io, flags, bsg_flags, "BSG_FLAG_???");
+	PRINT_FIELD_X(", ", sg_io, usr_ptr);
 
 	struct sg_io_v4 *entering_sg_io = malloc(sizeof(*entering_sg_io));
 	if (entering_sg_io) {
@@ -92,7 +97,7 @@
 		set_tcb_priv_data(tcp, entering_sg_io, free);
 	}
 
-	return 1;
+	return 0;
 }
 
 static int
@@ -104,39 +109,36 @@
 
 	if (umove(tcp, arg, &sg_io) < 0) {
 		/* print i/o fields fetched on entering syscall */
-		tprints(", response=");
-		printaddr(entering_sg_io->response);
-		tprints(", din_xferp=");
-		printaddr(entering_sg_io->din_xferp);
-		return RVAL_DECODED | 1;
+		PRINT_FIELD_X(", ", *entering_sg_io, response);
+		PRINT_FIELD_X(", ", *entering_sg_io, din_xferp);
+		return RVAL_IOCTL_DECODED;
 	}
 
 	if (sg_io.guard != entering_sg_io->guard) {
-		tprintf(" => guard=%u", sg_io.guard);
-		return RVAL_DECODED | 1;
+		PRINT_FIELD_U(" => ", sg_io, guard);
+		return RVAL_IOCTL_DECODED;
 	}
 
-	tprintf(", response_len=%u, response=", sg_io.response_len);
-	print_sg_io_buffer(tcp, sg_io.response, sg_io.response_len, 0);
+	PRINT_FIELD_U(", ", sg_io, response_len);
+	PRINT_FIELD_SG_IO_BUFFER(", ", sg_io, response, sg_io.response_len,
+				 0, tcp);
 	din_len = sg_io.din_xfer_len;
 	if (sg_io.din_resid > 0 && (unsigned int) sg_io.din_resid <= din_len)
 		din_len -= sg_io.din_resid;
-	tprints(", din_xferp=");
-	print_sg_io_buffer(tcp, sg_io.din_xferp, din_len,
-			   sg_io.din_iovec_count);
-	tprintf(", driver_status=%#x", sg_io.driver_status);
-	tprintf(", transport_status=%#x", sg_io.transport_status);
-	tprintf(", device_status=%#x", sg_io.device_status);
-	tprintf(", retry_delay=%u", sg_io.retry_delay);
-	tprints(", info=");
-	printflags(sg_io_info, sg_io.info, "SG_INFO_???");
-	tprintf(", duration=%u", sg_io.duration);
-	tprintf(", response_len=%u", sg_io.response_len);
-	tprintf(", din_resid=%d", sg_io.din_resid);
-	tprintf(", dout_resid=%d", sg_io.dout_resid);
-	tprintf(", generated_tag=%#" PRI__x64, sg_io.generated_tag);
+	PRINT_FIELD_SG_IO_BUFFER(", ", sg_io, din_xferp, din_len,
+				 sg_io.din_iovec_count, tcp);
+	PRINT_FIELD_X(", ", sg_io, driver_status);
+	PRINT_FIELD_X(", ", sg_io, transport_status);
+	PRINT_FIELD_X(", ", sg_io, device_status);
+	PRINT_FIELD_U(", ", sg_io, retry_delay);
+	PRINT_FIELD_FLAGS(", ", sg_io, info, sg_io_info, "SG_INFO_???");
+	PRINT_FIELD_U(", ", sg_io, duration);
+	PRINT_FIELD_U(", ", sg_io, response_len);
+	PRINT_FIELD_D(", ", sg_io, din_resid);
+	PRINT_FIELD_D(", ", sg_io, dout_resid);
+	PRINT_FIELD_X(", ", sg_io, generated_tag);
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 #else /* !HAVE_LINUX_BSG_H */
@@ -145,7 +147,7 @@
 decode_request(struct tcb *const tcp, const kernel_ulong_t arg)
 {
 	tprints("{guard='Q', ...}");
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 static int
diff --git a/shutdown.c b/shutdown.c
new file mode 100644
index 0000000..79a677c
--- /dev/null
+++ b/shutdown.c
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+ * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+ * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * Copyright (c) 1996-2000 Wichert Akkerman <wichert@cistron.nl>
+ * Copyright (c) 1999-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#include <sys/socket.h>
+#include "xlat/shutdown_modes.h"
+
+SYS_FUNC(shutdown)
+{
+	printfd(tcp, tcp->u_arg[0]);
+	tprints(", ");
+	printxval(shutdown_modes, tcp->u_arg[1], "SHUT_???");
+
+	return RVAL_DECODED;
+}
diff --git a/sock.c b/sock.c
index 2da323d..cd13de4 100644
--- a/sock.c
+++ b/sock.c
@@ -27,6 +27,7 @@
  */
 
 #include "defs.h"
+#include "print_fields.h"
 
 #include <sys/socket.h>
 #if defined ALPHA || defined SH || defined SH64
@@ -46,13 +47,6 @@
 
 #include "xlat/iffflags.h"
 
-#define PRINT_IFREQ_ADDR(tcp, ifr, sockaddr)					\
-	do {									\
-		tprints(#sockaddr "=");						\
-		print_sockaddr(tcp, &((ifr)->sockaddr),				\
-			       sizeof((ifr)->sockaddr));			\
-	} while (0)
-
 static void
 print_ifname(const char *ifname)
 {
@@ -66,19 +60,19 @@
 	switch (code) {
 	case SIOCSIFADDR:
 	case SIOCGIFADDR:
-		PRINT_IFREQ_ADDR(tcp, ifr, ifr_addr);
+		PRINT_FIELD_SOCKADDR("", *ifr, ifr_addr);
 		break;
 	case SIOCSIFDSTADDR:
 	case SIOCGIFDSTADDR:
-		PRINT_IFREQ_ADDR(tcp, ifr, ifr_dstaddr);
+		PRINT_FIELD_SOCKADDR("", *ifr, ifr_dstaddr);
 		break;
 	case SIOCSIFBRDADDR:
 	case SIOCGIFBRDADDR:
-		PRINT_IFREQ_ADDR(tcp, ifr, ifr_broadaddr);
+		PRINT_FIELD_SOCKADDR("", *ifr, ifr_broadaddr);
 		break;
 	case SIOCSIFNETMASK:
 	case SIOCGIFNETMASK:
-		PRINT_IFREQ_ADDR(tcp, ifr, ifr_netmask);
+		PRINT_FIELD_SOCKADDR("", *ifr, ifr_netmask);
 		break;
 	case SIOCSIFHWADDR:
 	case SIOCGIFHWADDR: {
@@ -149,8 +143,7 @@
 
 	tprints("{ifr_name=");
 	print_ifname(ifr->ifr_name);
-	tprints(", ");
-	PRINT_IFREQ_ADDR(tcp, ifr, ifr_addr);
+	PRINT_FIELD_SOCKADDR(", ", *ifr, ifr_addr);
 	tprints("}");
 
 	return true;
@@ -205,7 +198,7 @@
 			tprints("}");
 		}
 
-		return RVAL_DECODED | 1;
+		return RVAL_IOCTL_DECODED;
 	}
 
 	if (entering(tcp)) {
@@ -215,7 +208,7 @@
 
 		set_tcb_priv_data(tcp, ifc, free);
 
-		return 1;
+		return 0;
 	}
 
 	/* exiting */
@@ -244,7 +237,7 @@
 
 	tprints("}");
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 MPERS_PRINTER_DECL(int, sock_ioctl,
@@ -351,7 +344,7 @@
 				tprints("{ifr_name=");
 				print_ifname(ifr.ifr_name);
 			}
-			return 1;
+			return 0;
 		} else {
 			if (syserror(tcp)) {
 				tprints("}");
@@ -378,5 +371,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/sockaddr.c b/sockaddr.c
index bfbe585..ac42e16 100644
--- a/sockaddr.c
+++ b/sockaddr.c
@@ -4,6 +4,7 @@
  * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
  * Copyright (c) 1996-2000 Wichert Akkerman <wichert@cistron.nl>
  * Copyright (c) 2005-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,6 +31,8 @@
  */
 
 #include "defs.h"
+#include "print_fields.h"
+
 #include <sys/socket.h>
 #include <sys/un.h>
 #include <netinet/in.h>
@@ -87,26 +90,73 @@
 		const unsigned int len,
 		const char *const var_name)
 {
-	const char *af_name = NULL;
 	char buf[INET6_ADDRSTRLEN];
 
 	switch (af) {
 	case AF_INET:
-		af_name = "AF_INET";
+		if (inet_ntop(af, addr, buf, sizeof(buf))) {
+			if (var_name)
+				tprintf("%s=inet_addr(\"%s\")", var_name, buf);
+			else
+				tprints(buf);
+			return true;
+		}
 		break;
 	case AF_INET6:
-		af_name = "AF_INET6";
+		if (inet_ntop(af, addr, buf, sizeof(buf))) {
+			if (var_name)
+				tprintf("inet_pton(%s, \"%s\", &%s)",
+					"AF_INET6", buf, var_name);
+			else
+				tprints(buf);
+			return true;
+		}
 		break;
 	}
 
-	if (af_name && inet_ntop(af, addr, buf, sizeof(buf))) {
-		tprintf("inet_pton(%s, \"%s\", &%s)", af_name, buf, var_name);
-		return true;
-	} else {
+	if (var_name)
 		tprintf("%s=", var_name);
-		print_quoted_string(addr, len, 0);
+	print_quoted_string(addr, len, QUOTE_FORCE_HEX);
+	return false;
+}
+
+bool
+decode_inet_addr(struct tcb *const tcp,
+		 const kernel_ulong_t addr,
+		 const unsigned int len,
+		 const int family,
+		 const char *const var_name)
+{
+	union {
+		struct in_addr  a4;
+		struct in6_addr a6;
+	} addrbuf;
+	size_t size = 0;
+
+	switch (family) {
+	case AF_INET:
+		size = sizeof(addrbuf.a4);
+		break;
+	case AF_INET6:
+		size = sizeof(addrbuf.a6);
+		break;
+	}
+
+	if (!size || len < size) {
+		if (var_name)
+			tprintf("%s=", var_name);
+		printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
 		return false;
 	}
+
+	if (umoven(tcp, addr, size, &addrbuf) < 0) {
+		if (var_name)
+			tprintf("%s=", var_name);
+		printaddr(addr);
+		return false;
+	}
+
+	return print_inet_addr(family, &addrbuf, size, var_name);
 }
 
 static void
@@ -114,8 +164,8 @@
 {
 	const struct sockaddr_in *const sa_in = buf;
 
-	tprintf("sin_port=htons(%u), sin_addr=inet_addr(\"%s\")",
-		ntohs(sa_in->sin_port), inet_ntoa(sa_in->sin_addr));
+	PRINT_FIELD_NET_PORT("", *sa_in, sin_port);
+	PRINT_FIELD_INET4_ADDR(", ", *sa_in, sin_addr);
 }
 
 #define SIN6_MIN_LEN offsetof(struct sockaddr_in6, sin6_scope_id)
@@ -125,22 +175,20 @@
 {
 	const struct sockaddr_in6 *const sa_in6 = buf;
 
-	tprintf("sin6_port=htons(%u), ", ntohs(sa_in6->sin6_port));
-	print_inet_addr(AF_INET6, &sa_in6->sin6_addr,
-			sizeof(sa_in6->sin6_addr), "sin6_addr");
+	PRINT_FIELD_NET_PORT("", *sa_in6, sin6_port);
+	PRINT_FIELD_INET_ADDR(", ", *sa_in6, sin6_addr, AF_INET6);
 	tprintf(", sin6_flowinfo=htonl(%u)", ntohl(sa_in6->sin6_flowinfo));
 
 	if (addrlen <= (int) SIN6_MIN_LEN)
 		return;
 
-	tprints(", sin6_scope_id=");
 #if defined IN6_IS_ADDR_LINKLOCAL && defined IN6_IS_ADDR_MC_LINKLOCAL
 	if (IN6_IS_ADDR_LINKLOCAL(&sa_in6->sin6_addr)
 	    || IN6_IS_ADDR_MC_LINKLOCAL(&sa_in6->sin6_addr))
-		print_ifindex(sa_in6->sin6_scope_id);
+		PRINT_FIELD_IFINDEX(", ", *sa_in6, sin6_scope_id);
 	else
 #endif
-		tprintf("%u", sa_in6->sin6_scope_id);
+		PRINT_FIELD_U(", ", *sa_in6, sin6_scope_id);
 }
 
 static void
@@ -149,16 +197,15 @@
 	const struct sockaddr_ipx *const sa_ipx = buf;
 	unsigned int i;
 
-	tprintf("sipx_port=htons(%u)"
-		", sipx_network=htonl(%#08x)"
+	PRINT_FIELD_NET_PORT("", *sa_ipx, sipx_port);
+	tprintf(", sipx_network=htonl(%#08x)"
 		", sipx_node=[",
-		ntohs(sa_ipx->sipx_port),
 		ntohl(sa_ipx->sipx_network));
 	for (i = 0; i < IPX_NODE_LEN; ++i) {
 		tprintf("%s%#02x", i ? ", " : "",
 			sa_ipx->sipx_node[i]);
 	}
-	tprintf("], sipx_type=%#02x", sa_ipx->sipx_type);
+	PRINT_FIELD_0X("], ", *sa_ipx, sipx_type);
 }
 
 static void
@@ -166,8 +213,8 @@
 {
 	const struct sockaddr_nl *const sa_nl = buf;
 
-	tprintf("nl_pid=%d, nl_groups=%#08x",
-		sa_nl->nl_pid, sa_nl->nl_groups);
+	PRINT_FIELD_D("", *sa_nl, nl_pid);
+	PRINT_FIELD_0X(", ", *sa_nl, nl_groups);
 }
 
 static void
@@ -177,8 +224,7 @@
 
 	tprints("sll_protocol=htons(");
 	printxval(ethernet_protocols, ntohs(sa_ll->sll_protocol), "ETH_P_???");
-	tprints("), sll_ifindex=");
-	print_ifindex(sa_ll->sll_ifindex);
+	PRINT_FIELD_IFINDEX("), ", *sa_ll, sll_ifindex);
 	tprints(", sll_hatype=");
 	printxval(arp_hardware_types, sa_ll->sll_hatype, "ARPHRD_???");
 	tprints(", sll_pkttype=");
@@ -281,7 +327,7 @@
 };
 
 void
-print_sockaddr(struct tcb *tcp, const void *const buf, const int addrlen)
+print_sockaddr(const void *const buf, const int addrlen)
 {
 	const struct sockaddr *const sa = buf;
 
@@ -325,7 +371,7 @@
 
 	memset(&addrbuf.pad[addrlen], 0, sizeof(addrbuf.pad) - addrlen);
 
-	print_sockaddr(tcp, &addrbuf, addrlen);
+	print_sockaddr(&addrbuf, addrlen);
 
 	return addrbuf.sa.sa_family;
 }
diff --git a/stamp-h1 b/stamp-h1
deleted file mode 100644
index 4547fe1..0000000
--- a/stamp-h1
+++ /dev/null
@@ -1 +0,0 @@
-timestamp for config.h
diff --git a/strace.1 b/strace.1
index 869da08..ca0f151 100644
--- a/strace.1
+++ b/strace.1
@@ -27,46 +27,75 @@
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .de CW
 .sp
+.in +4n
 .nf
 .ft CW
 ..
 .de CE
 .ft R
 .fi
+.in
 .sp
 ..
-.\" Macro IX is not defined in the groff macros
-.if \n(.g \{\
-.  de IX
+.\" Like .OP, but with ellipsis at the end in order to signify that option
+.\" can be provided multiple times. Based on .OP definition in groff's
+.\" an-ext.tmac.
+.de OM
+.  ie \\n(.$-1 \
+.    RI "[\fB\\$1\fP" "\ \\$2" "]...\&"
+.  el \
+.    RB "[" "\\$1" "]...\&"
 ..
-.\}
-.TH STRACE 1 "2010-03-30"
+.\" Required option.
+.de OR
+.  ie \\n(.$-1 \
+.    RI "\fB\\$1\fP" "\ \\$2"
+.  el \
+.    BR "\\$1"
+..
+.TH STRACE 1 "2017-08-28" "strace 4.19"
 .SH NAME
 strace \- trace system calls and signals
 .SH SYNOPSIS
-.B strace
-[\fB-CdffhikqrtttTvVxxy\fR]
-[\fB-I\fIn\fR]
-[\fB-b\fIexecve\fR]
-[\fB-e\fIexpr\fR]...
-[\fB-a\fIcolumn\fR]
-[\fB-o\fIfile\fR]
-[\fB-s\fIstrsize\fR]
-[\fB-P\fIpath\fR]... \fB-p\fIpid\fR... /
-[\fB-D\fR]
-[\fB-E\fIvar\fR[=\fIval\fR]]... [\fB-u\fIusername\fR]
-\fIcommand\fR [\fIargs\fR]
-.sp
-.B strace
-\fB-c\fR[\fBdf\fR]
-[\fB-I\fIn\fR]
-[\fB-b\fIexecve\fR]
-[\fB-e\fIexpr\fR]...
-[\fB-O\fIoverhead\fR]
-[\fB-S\fIsortby\fR] \fB-p\fIpid\fR... /
-[\fB-D\fR]
-[\fB-E\fIvar\fR[=\fIval\fR]]... [\fB-u\fIusername\fR]
-\fIcommand\fR [\fIargs\fR]
+.SY strace
+.OP \-CdffhikqrtttTvVxxy
+.OP \-I n
+.OP \-b execve
+.OM \-e expr
+.OP \-a column
+.OP \-o file
+.OP \-s strsize
+.OM \-P path
+.OM \-p pid
+.BR "" {
+.OR \-p pid
+.BR "" |
+.OP \-D
+.OM \-E var\fR[=\fIval\fR]
+.OP \-u username
+.IR command " [" args ]
+.BR "" }
+.YS
+.SY strace
+.B \-c
+.OP \-df
+.OP \-I n
+.OP \-b execve
+.OM \-e expr
+.OP \-O overhead
+.OP \-S sortby
+.OM \-P path
+.OM \-p pid
+.BR "" {
+.OR \-p pid
+.BR "" |
+.OP \-D
+.OM \-E var\fR[=\fIval\fR]
+.OP -u username
+.IR command " [" args ]
+.BR "" }
+.YS
+
 .SH DESCRIPTION
 .IX "strace command" "" "\fLstrace\fR command"
 .LP
@@ -395,7 +424,7 @@
 .BR regex (7)).
 .PP
 .BR "\-e\ trace" = %file
-.TP
+.TQ
 .BR "\-e\ trace" = file " (deprecated)"
 Trace all system calls which take a file name as an argument.  You
 can think of this as an abbreviation for
@@ -407,33 +436,33 @@
 in the list.  Betchya woulda forgot that one.
 .PP
 .BR "\-e\ trace" = %process
-.TP
+.TQ
 .BR "\-e\ trace" = process " (deprecated)"
 Trace all system calls which involve process management.  This
 is useful for watching the fork, wait, and exec steps of a process.
 .PP
 .BR "\-e\ trace" = %network
-.TP
+.TQ
 .BR "\-e\ trace" = network " (deprecated)"
 Trace all the network related system calls.
 .PP
 .BR "\-e\ trace" = %signal
-.TP
+.TQ
 .BR "\-e\ trace" = signal " (deprecated)"
 Trace all signal related system calls.
 .PP
 .BR "\-e\ trace" = %ipc
-.TP
+.TQ
 .BR "\-e\ trace" = ipc " (deprecated)"
 Trace all IPC related system calls.
 .PP
 .BR "\-e\ trace" = %desc
-.TP
+.TQ
 .BR "\-e\ trace" = desc " (deprecated)"
 Trace all file descriptor related system calls.
 .PP
 .BR "\-e\ trace" = %memory
-.TP
+.TQ
 .BR "\-e\ trace" = memory " (deprecated)"
 Trace all memory mapping related system calls.
 .TP
@@ -625,8 +654,9 @@
 .BR error =
 or
 .BR retval =
-specification.
-If an injection expression contains multiple
+specification, and only one
+.BR signal =
+specification.  If an injection expression contains multiple
 .BR when =
 specifications, the last one takes precedence.
 
@@ -830,14 +860,15 @@
 behavior using inputs and outputs as propositions.
 .LP
 In some cases, a system call will differ from the documented behavior
-or have a different name.  For example, on System V-derived systems
-the true
-.BR time (2)
-system call does not take an argument and the
-.B stat
-function is called
-.B xstat
-and takes an extra leading argument.  These
+or have a different name.  For example, the
+.BR faccessat (2)
+system call does not have
+.I flags
+argument, and the
+.BR setrlimit (2)
+library function uses
+.BR prlimit (2)
+system call on modern (2.6.38+) kernels.  These
 discrepancies are normal but idiosyncratic characteristics of the
 system call interface and are accounted for by C library wrapper
 functions.
@@ -877,10 +908,6 @@
 .I command
 may be left running after an interrupt signal (\c
 .SM CTRL\s0-C).
-.LP
-The
-.B \-i
-option is weakly supported.
 .SH HISTORY
 The original
 .B strace
diff --git a/strace.1.in b/strace.1.in
new file mode 100644
index 0000000..61293cf
--- /dev/null
+++ b/strace.1.in
@@ -0,0 +1,951 @@
+.\" Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+.\" Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+.\" Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+.\" Copyright (c) 1996-2017 The strace developers.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. The name of the author may not be used to endorse or promote products
+.\"    derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.de CW
+.sp
+.in +4n
+.nf
+.ft CW
+..
+.de CE
+.ft R
+.fi
+.in
+.sp
+..
+.\" Like .OP, but with ellipsis at the end in order to signify that option
+.\" can be provided multiple times. Based on .OP definition in groff's
+.\" an-ext.tmac.
+.de OM
+.  ie \\n(.$-1 \
+.    RI "[\fB\\$1\fP" "\ \\$2" "]...\&"
+.  el \
+.    RB "[" "\\$1" "]...\&"
+..
+.\" Required option.
+.de OR
+.  ie \\n(.$-1 \
+.    RI "\fB\\$1\fP" "\ \\$2"
+.  el \
+.    BR "\\$1"
+..
+.TH STRACE 1 "@MANPAGE_DATE@" "strace @VERSION@"
+.SH NAME
+strace \- trace system calls and signals
+.SH SYNOPSIS
+.SY strace
+.OP \-CdffhikqrtttTvVxxy
+.OP \-I n
+.OP \-b execve
+.OM \-e expr
+.OP \-a column
+.OP \-o file
+.OP \-s strsize
+.OM \-P path
+.OM \-p pid
+.BR "" {
+.OR \-p pid
+.BR "" |
+.OP \-D
+.OM \-E var\fR[=\fIval\fR]
+.OP \-u username
+.IR command " [" args ]
+.BR "" }
+.YS
+.SY strace
+.B \-c
+.OP \-df
+.OP \-I n
+.OP \-b execve
+.OM \-e expr
+.OP \-O overhead
+.OP \-S sortby
+.OM \-P path
+.OM \-p pid
+.BR "" {
+.OR \-p pid
+.BR "" |
+.OP \-D
+.OM \-E var\fR[=\fIval\fR]
+.OP -u username
+.IR command " [" args ]
+.BR "" }
+.YS
+
+.SH DESCRIPTION
+.IX "strace command" "" "\fLstrace\fR command"
+.LP
+In the simplest case
+.B strace
+runs the specified
+.I command
+until it exits.
+It intercepts and records the system calls which are called
+by a process and the signals which are received by a process.
+The name of each system call, its arguments and its return value
+are printed on standard error or to the file specified with the
+.B \-o
+option.
+.LP
+.B strace
+is a useful diagnostic, instructional, and debugging tool.
+System administrators, diagnosticians and trouble-shooters will find
+it invaluable for solving problems with
+programs for which the source is not readily available since
+they do not need to be recompiled in order to trace them.
+Students, hackers and the overly-curious will find that
+a great deal can be learned about a system and its system calls by
+tracing even ordinary programs.  And programmers will find that
+since system calls and signals are events that happen at the user/kernel
+interface, a close examination of this boundary is very
+useful for bug isolation, sanity checking and
+attempting to capture race conditions.
+.LP
+Each line in the trace contains the system call name, followed
+by its arguments in parentheses and its return value.
+An example from stracing the command "cat /dev/null" is:
+.CW
+open("/dev/null", O_RDONLY) = 3
+.CE
+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)
+.CE
+Signals are printed as signal symbol and decoded siginfo structure.
+An excerpt from stracing and interrupting the command "sleep 666" is:
+.CW
+sigsuspend([] <unfinished ...>
+--- SIGINT {si_signo=SIGINT, si_code=SI_USER, si_pid=...} ---
++++ killed by SIGINT +++
+.CE
+If a system call is being executed and meanwhile another one is being called
+from a different thread/process then
+.B strace
+will try to preserve the order of those events and mark the ongoing call as
+being
+.IR unfinished .
+When the call returns it will be marked as
+.IR resumed .
+.CW
+[pid 28772] select(4, [3], NULL, NULL, NULL <unfinished ...>
+[pid 28779] clock_gettime(CLOCK_REALTIME, {1130322148, 939977000}) = 0
+[pid 28772] <... select resumed> )      = 1 (in [3])
+.CE
+Interruption of a (restartable) system call by a signal delivery is processed
+differently as kernel terminates the system call and also arranges its
+immediate reexecution after the signal handler completes.
+.CW
+read(0, 0x7ffff72cf5cf, 1)              = ? ERESTARTSYS (To be restarted)
+--- SIGALRM ... ---
+rt_sigreturn(0xe)                       = 0
+read(0, "", 1)                          = 0
+.CE
+Arguments are printed in symbolic form with a passion.
+This example shows the shell performing ">>xyzzy" output redirection:
+.CW
+open("xyzzy", O_WRONLY|O_APPEND|O_CREAT, 0666) = 3
+.CE
+Here the third argument of open is decoded by breaking down the
+flag argument into its three bitwise-OR constituents and printing the
+mode value in octal by tradition.  Where traditional or native
+usage differs from ANSI or POSIX, the latter forms are preferred.
+In some cases,
+.B strace
+output has proven to be more readable than the source.
+.LP
+Structure pointers are dereferenced and the members are displayed
+as appropriate.  In all cases arguments are formatted in the most C-like
+fashion possible.
+For example, the essence of the command "ls \-l /dev/null" is captured as:
+.CW
+lstat("/dev/null", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
+.CE
+Notice how the 'struct stat' argument is dereferenced and how each member is
+displayed symbolically.  In particular, observe how the st_mode member
+is carefully decoded into a bitwise-OR of symbolic and numeric values.
+Also notice in this example that the first argument to lstat is an input
+to the system call and the second argument is an output.  Since output
+arguments are not modified if the system call fails, arguments may not
+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)
+.CE
+In this case the porch light is on but nobody is home.
+.LP
+Character pointers are dereferenced and printed as C strings.
+Non-printing characters in strings are normally represented by
+ordinary C escape codes.
+Only the first
+.I strsize
+(32 by default) bytes of strings are printed;
+longer strings have an ellipsis appended following the closing quote.
+Here is a line from "ls \-l" where the
+.B getpwuid
+library routine is reading the password file:
+.CW
+read(3, "root::0:0:System Administrator:/"..., 1024) = 422
+.CE
+While structures are annotated using curly braces, simple pointers
+and arrays are printed using square brackets with commas separating
+elements.  Here is an example from the command "id" on a system with
+supplementary group ids:
+.CW
+getgroups(32, [100, 0]) = 2
+.CE
+On the other hand, bit-sets are also shown using square brackets
+but set elements are separated only by a space.  Here is the shell
+preparing to execute an external command:
+.CW
+sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0
+.CE
+Here the second argument is a bit-set of two signals, SIGCHLD and SIGTTOU.
+In some cases the bit-set is so full that printing out the unset
+elements is more valuable.  In that case, the bit-set is prefixed by
+a tilde like this:
+.CW
+sigprocmask(SIG_UNBLOCK, ~[], NULL) = 0
+.CE
+Here the second argument represents the full set of all signals.
+.SH OPTIONS
+.SS Output format
+.TP 12
+.BI "\-a " column
+Align return values in a specific column (default column 40).
+.TP
+.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 (experimental).
+This option is available only if
+.B strace
+is built with libunwind.
+.TP
+.BI "\-o " filename
+Write the trace output to the file
+.I filename
+rather than to stderr.
+Use
+.I filename.pid
+if
+.B \-ff
+is used.
+If the argument begins with '|' or with '!' then the rest of the
+argument is treated as a command and all output is piped to it.
+This is convenient for piping the debugging output to a program
+without affecting the redirections of executed programs.
+.TP
+.B \-q
+Suppress messages about attaching, detaching etc.  This happens
+automatically when output is redirected to a file and the command
+is run directly instead of attaching.
+.TP
+.B \-qq
+If given twice, suppress messages about process exit status.
+.TP
+.B \-r
+Print a relative timestamp upon entry to each system call.  This
+records the time difference between the beginning of successive
+system calls.
+.TP
+.BI "\-s " strsize
+Specify the maximum string size to print (the default is 32).  Note
+that filenames are not considered strings and are always printed in
+full.
+.TP
+.B \-t
+Prefix each line of the trace with the time of day.
+.TP
+.B \-tt
+If given twice, the time printed will include the microseconds.
+.TP
+.B \-ttt
+If given thrice, the time printed will include the microseconds
+and the leading portion will be printed as the number
+of seconds since the epoch.
+.TP
+.B \-T
+Show the time spent in system calls.  This records the time
+difference between the beginning and the end of each system call.
+.TP
+.B \-x
+Print all non-ASCII strings in hexadecimal string format.
+.TP
+.B \-xx
+Print all strings in hexadecimal string format.
+.TP
+.B \-y
+Print paths associated with file descriptor arguments.
+.TP
+.B \-yy
+Print protocol specific information associated with socket file descriptors.
+.SS Statistics
+.TP 12
+.B \-c
+Count time, calls, and errors for each system call and report a summary on
+program exit.  On Linux, this attempts to show system time (CPU time spent
+running in the kernel) independent of wall clock time.  If
+.B \-c
+is used with
+.B \-f
+or
+.B \-F
+, only aggregate totals for all traced processes are kept.
+.TP
+.B \-C
+Like
+.B \-c
+but also print regular output while processes are running.
+.TP
+.BI "\-O " overhead
+Set the overhead for tracing system calls to
+.I overhead
+microseconds.
+This is useful for overriding the default heuristic for guessing
+how much time is spent in mere measuring when timing system calls using
+the
+.B \-c
+option.  The accuracy of the heuristic can be gauged by timing a given
+program run without tracing (using
+.BR time (1))
+and comparing the accumulated
+system call time to the total produced using
+.BR \-c .
+.TP
+.BI "\-S " sortby
+Sort the output of the histogram printed by the
+.B \-c
+option by the specified criterion.  Legal values are
+.BR time ,
+.BR calls ,
+.BR name ,
+and
+.B nothing
+(default is
+.BR time ).
+.TP
+.B \-w
+Summarise the time difference between the beginning and end of
+each system call.  The default is to summarise the system time.
+.SS Filtering
+.TP 12
+.BI "\-e " expr
+A qualifying expression which modifies which events to trace
+or how to trace them.  The format of the expression is:
+.RS 15
+.IP
+[\,\fIqualifier\/\fB=\fR][\fB!\fR][\fB?\fR]\,\fIvalue1\/\fR[\fB,\fR[\fB?\fR]\,\fIvalue2\/\fR]...
+.RE
+.IP
+where
+.I qualifier
+is one of
+.BR trace ,
+.BR abbrev ,
+.BR verbose ,
+.BR raw ,
+.BR signal ,
+.BR read ,
+.BR write ,
+.BR fault ,
+or
+.B inject
+and
+.I value
+is a qualifier-dependent symbol or number.  The default
+qualifier is
+.BR trace .
+Using an exclamation mark negates the set of values.  For example,
+.BR \-e "\ " open
+means literally
+.BR \-e "\ " trace = open
+which in turn means trace only the
+.B open
+system call.  By contrast,
+.BR \-e "\ " trace "=!" open
+means to trace every system call except
+.BR open .
+Question mark before the syscall qualification allows suppression of error
+in case no syscalls matched the qualification provided.
+In addition, the special values
+.B all
+and
+.B none
+have the obvious meanings.
+.IP
+Note that some shells use the exclamation point for history
+expansion even inside quoted arguments.  If so, you must escape
+the exclamation point with a backslash.
+.TP
+\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
+to trace.  For example,
+.BR trace = open,close,read,write
+means to only
+trace those four system calls.  Be careful when making inferences
+about the user/kernel boundary if only a subset of system calls
+are being monitored.  The default is
+.BR trace = all .
+.TP
+\fB\-e\ trace\fR=/\,\fIregex\fR
+Trace only those system calls that match the
+.IR regex .
+You can use
+.B POSIX
+Extended Regular Expression syntax (see
+.BR regex (7)).
+.PP
+.BR "\-e\ trace" = %file
+.TQ
+.BR "\-e\ trace" = file " (deprecated)"
+Trace all system calls which take a file name as an argument.  You
+can think of this as an abbreviation for
+.BR "\-e\ trace" = open , stat , chmod , unlink ,...
+which is useful to seeing what files the process is referencing.
+Furthermore, using the abbreviation will ensure that you don't
+accidentally forget to include a call like
+.B lstat
+in the list.  Betchya woulda forgot that one.
+.PP
+.BR "\-e\ trace" = %process
+.TQ
+.BR "\-e\ trace" = process " (deprecated)"
+Trace all system calls which involve process management.  This
+is useful for watching the fork, wait, and exec steps of a process.
+.PP
+.BR "\-e\ trace" = %network
+.TQ
+.BR "\-e\ trace" = network " (deprecated)"
+Trace all the network related system calls.
+.PP
+.BR "\-e\ trace" = %signal
+.TQ
+.BR "\-e\ trace" = signal " (deprecated)"
+Trace all signal related system calls.
+.PP
+.BR "\-e\ trace" = %ipc
+.TQ
+.BR "\-e\ trace" = ipc " (deprecated)"
+Trace all IPC related system calls.
+.PP
+.BR "\-e\ trace" = %desc
+.TQ
+.BR "\-e\ trace" = desc " (deprecated)"
+Trace all file descriptor related system calls.
+.PP
+.BR "\-e\ trace" = %memory
+.TQ
+.BR "\-e\ trace" = memory " (deprecated)"
+Trace all memory mapping related system calls.
+.TP
+.BR "\-e\ trace" = %stat
+Trace stat syscall variants.
+.TP
+.BR "\-e\ trace" = %lstat
+Trace lstat syscall variants.
+.TP
+.BR "\-e\ trace" = %fstat
+Trace fstat and fstatat syscall variants.
+.TP
+.BR "\-e\ trace" = %%stat
+Trace syscalls used for requesting file status (stat, lstat, fstat, fstatat,
+statx, and their variants).
+.TP
+.BR "\-e\ trace" = %statfs
+Trace statfs, statfs64, statvfs, osf_statfs, and osf_statfs64 system calls.
+The same effect can be achieved with
+.BR "\-e\ trace" = /^(.*_)?statv?fs
+regular expression.
+.TP
+.BR "\-e\ trace" = %fstatfs
+Trace fstatfs, fstatfs64, fstatvfs, osf_fstatfs, and osf_fstatfs64 system calls.
+The same effect can be achieved with
+.BR "\-e\ trace" = /fstatv?fs
+regular expression.
+.TP
+.BR "\-e\ trace" = %%statfs
+Trace syscalls related to file system statistics (statfs-like, fstatfs-like,
+and ustat).  The same effect can be achieved with
+.BR "\-e\ trace" = /statv?fs|fsstat|ustat
+regular expression.
+.TP
+\fB\-e\ abbrev\fR=\,\fIset\fR
+Abbreviate the output from printing each member of large structures.
+The default is
+.BR abbrev = all .
+The
+.B \-v
+option has the effect of
+.BR abbrev = none .
+.TP
+\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
+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
+Trace only the specified subset of signals.  The default is
+.BR signal = all .
+For example,
+.B signal "=!" SIGIO
+(or
+.BR signal "=!" io )
+causes SIGIO signals not to be traced.
+.TP
+\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
+.I 3
+and
+.I 5
+use
+\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
+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
+.I 3
+and
+.I 5
+use
+\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
+.BR -e "\ " trace = write .
+.TP
+\fB\-e\ inject\fR=\,\fIset\/\fR[:\fBerror\fR=\,\fIerrno\/\fR|:\fBretval\fR=\,\fIvalue\/\fR][:\fBsignal\fR=\,\fIsig\/\fR][:\fBwhen\fR=\,\fIexpr\/\fR]
+Perform syscall tampering for the specified set of syscalls.
+
+At least one of
+.BR error ,
+.BR retval ,
+or
+.B signal
+options has to be specified.
+.B error
+and
+.B retval
+are mutually exclusive.
+
+If :\fBerror\fR=\,\fIerrno\/\fR option is specified,
+a fault is injected into a syscall invocation:
+the syscall number is replaced by -1 which corresponds to an invalid syscall,
+and the error code is specified using a symbolic
+.I errno
+value like
+.B ENOSYS
+or a numeric value within 1..4095 range.
+
+If :\fBretval\fR=\,\fIvalue\/\fR option is specified,
+success injection is performed: the syscall number is replaced by -1,
+but a bogus success value is returned to the callee.
+
+If :\fBsignal\fR=\,\fIsig\/\fR option is specified with either a symbolic value
+like
+.B SIGSEGV
+or a numeric value within 1..\fBSIGRTMAX\fR range,
+that signal is delivered on entering every syscall specified by the
+.IR set .
+
+If :\fBsignal\fR=\,\fIsig\/\fR option is specified without
+:\fBerror\fR=\,\fIerrno\/\fR or :\fBretval\fR=\,\fIvalue\/\fR options,
+then only a signal
+.I sig
+is delivered without a syscall fault injection.
+Conversely, :\fBerror\fR=\,\fIerrno\/\fR or
+:\fBretval\fR=\,\fIvalue\/\fR option without
+:\fBsignal\fR=\,\fIsig\/\fR option injects a fault without delivering a signal.
+
+If both :\fBerror\fR=\,\fIerrno\/\fR or :\fBretval\fR=\,\fIvalue\/\fR
+and :\fBsignal\fR=\,\fIsig\/\fR options are specified, then both
+a fault or success is injected and a signal is delivered.
+
+Unless a :\fBwhen\fR=\,\fIexpr\fR subexpression is specified,
+an injection is being made into every invocation of each syscall from the
+.IR set .
+
+The format of the subexpression is one of the following:
+.RS
+.IP "" 2
+.I first
+.RS 4
+For every syscall from the
+.IR set ,
+perform an injection for the syscall invocation number
+.I first
+only.
+.RE
+.IP "" 2
+\fIfirst\/\fB+\fR
+.RS 4
+For every syscall from the
+.IR set ,
+perform injections for the syscall invocation number
+.I first
+and all subsequent invocations.
+.RE
+.IP "" 2
+\fIfirst\/\fB+\fIstep\fR
+.RS 4
+For every syscall from the
+.IR set ,
+perform injections for syscall invocations number
+.IR first ,
+.IR first + step ,
+.IR first + step + step ,
+and so on.
+.RE
+.RE
+.IP
+For example, to fail each third and subsequent chdir syscalls with
+.BR ENOENT ,
+use
+\fB\-e\ inject\fR=\,\fIchdir\/\fR:\fBerror\fR=\,\fIENOENT\/\fR:\fBwhen\fR=\,\fI3\/\fB+\fR.
+
+The valid range for numbers
+.I first
+and
+.I step
+is 1..65535.
+
+An injection expression can contain only one
+.BR error =
+or
+.BR retval =
+specification, and only one
+.BR signal =
+specification.  If an injection expression contains multiple
+.BR when =
+specifications, the last one takes precedence.
+
+Accounting of syscalls that are subject to injection
+is done per syscall and per tracee.
+
+Specification of syscall injection can be combined
+with other syscall filtering options, for example,
+\fB\-P \fI/dev/urandom \fB\-e inject\fR=\,\fIfile\/\fR:\fBerror\fR=\,\fIENOENT\fR.
+
+.TP
+\fB\-e\ fault\fR=\,\fIset\/\fR[:\fBerror\fR=\,\fIerrno\/\fR][:\fBwhen\fR=\,\fIexpr\/\fR]
+Perform syscall fault injection for the specified set of syscalls.
+
+This is equivalent to more generic
+\fB\-e\ inject\fR= expression with default value of
+.I errno
+option set to
+.IR ENOSYS .
+
+.TP
+.BI "\-P " path
+Trace only system calls accessing
+.IR path .
+Multiple
+.B \-P
+options can be used to specify several paths.
+.TP
+.B \-v
+Print unabbreviated versions of environment, stat, termios, etc.
+calls.  These structures are very common in calls and so the default
+behavior displays a reasonable subset of structure members.  Use
+this option to get all of the gory details.
+.SS Tracing
+.TP 12
+.BI "\-b " syscall
+If specified syscall is reached, detach from traced process.
+Currently, only
+.I execve
+syscall is supported.  This option is useful if you want to trace
+multi-threaded process and therefore require -f, but don't want
+to trace its (potentially very complex) children.
+.TP
+.B \-D
+Run tracer process as a detached grandchild, not as parent of the
+tracee.  This reduces the visible effect of
+.B strace
+by keeping the tracee a direct child of the calling process.
+.TP
+.B \-f
+Trace child processes as they are created by currently traced
+processes as a result of the
+.BR fork (2),
+.BR vfork (2)
+and
+.BR clone (2)
+system calls.  Note that
+.B \-p
+.I PID
+.B \-f
+will attach all threads of process PID if it is multi-threaded,
+not only thread with thread_id = PID.
+.TP
+.B \-ff
+If the
+.B \-o
+.I filename
+option is in effect, each processes trace is written to
+.I filename.pid
+where pid is the numeric process id of each process.
+This is incompatible with
+.BR \-c ,
+since no per-process counts are kept.
+.TP
+.BI "\-I " interruptible
+When strace can be interrupted by signals (such as pressing ^C).
+1: no signals are blocked; 2: fatal signals are blocked while decoding syscall
+(default); 3: fatal signals are always blocked (default if '-o FILE PROG');
+4: fatal signals and SIGTSTP (^Z) are always blocked (useful to make
+strace -o FILE PROG not stop on ^Z).
+.SS Startup
+.TP 12
+\fB\-E\ \fIvar\fR=\,\fIval\fR
+Run command with
+.IR var = val
+in its list of environment variables.
+.TP
+.BI "\-E " var
+Remove
+.IR var
+from the inherited list of environment variables before passing it on to
+the command.
+.TP
+.BI "\-p " pid
+Attach to the process with the process
+.SM ID
+.I pid
+and begin tracing.
+The trace may be terminated
+at any time by a keyboard interrupt signal (\c
+.SM CTRL\s0-C).
+.B strace
+will respond by detaching itself from the traced process(es)
+leaving it (them) to continue running.
+Multiple
+.B \-p
+options can be used to attach to many processes in addition to
+.I command
+(which is optional if at least one
+.B \-p
+option is given).
+.B \-p
+"`pidof PROG`" syntax is supported.
+.TP
+.BI "\-u " username
+Run command with the user \s-1ID\s0, group \s-2ID\s0, and
+supplementary groups of
+.IR username .
+This option is only useful when running as root and enables the
+correct execution of setuid and/or setgid binaries.
+Unless this option is used setuid and setgid programs are executed
+without effective privileges.
+.SS Miscellaneous
+.TP 12
+.B \-d
+Show some debugging output of
+.B strace
+itself on the standard error.
+.TP
+.B \-F
+This option is now obsolete and it has the same functionality as
+.BR \-f .
+.TP
+.B \-h
+Print the help summary.
+.TP
+.B \-V
+Print the version number of
+.BR strace .
+.SH DIAGNOSTICS
+When
+.I command
+exits,
+.B strace
+exits with the same exit status.
+If
+.I command
+is terminated by a signal,
+.B strace
+terminates itself with the same signal, so that
+.B strace
+can be used as a wrapper process transparent to the invoking parent process.
+Note that parent-child relationship (signal stop notifications,
+getppid() value, etc) between traced process and its parent are not preserved
+unless
+.B \-D
+is used.
+.LP
+When using
+.B \-p
+without a
+.IR command ,
+the exit status of
+.B strace
+is zero unless no processes has been attached or there was an unexpected error
+in doing the tracing.
+.SH "SETUID INSTALLATION"
+If
+.B strace
+is installed setuid to root then the invoking user will be able to
+attach to and trace processes owned by any user.
+In addition setuid and setgid programs will be executed and traced
+with the correct effective privileges.
+Since only users trusted with full root privileges should be allowed
+to do these things,
+it only makes sense to install
+.B strace
+as setuid to root when the users who can execute it are restricted
+to those users who have this trust.
+For example, it makes sense to install a special version of
+.B strace
+with mode 'rwsr-xr--', user
+.B root
+and group
+.BR trace ,
+where members of the
+.B trace
+group are trusted users.
+If you do use this feature, please remember to install
+a non-setuid version of
+.B strace
+for ordinary lusers to use.
+.SH NOTES
+It is a pity that so much tracing clutter is produced by systems
+employing shared libraries.
+.LP
+It is instructive to think about system call inputs and outputs
+as data-flow across the user/kernel boundary.  Because user-space
+and kernel-space are separate and address-protected, it is
+sometimes possible to make deductive inferences about process
+behavior using inputs and outputs as propositions.
+.LP
+In some cases, a system call will differ from the documented behavior
+or have a different name.  For example, the
+.BR faccessat (2)
+system call does not have
+.I flags
+argument, and the
+.BR setrlimit (2)
+library function uses
+.BR prlimit (2)
+system call on modern (2.6.38+) kernels.  These
+discrepancies are normal but idiosyncratic characteristics of the
+system call interface and are accounted for by C library wrapper
+functions.
+.LP
+Some system calls have different names in different architectures and
+personalities.  In these cases, system call filtering and printing
+uses the names that match corresponding
+.BR __NR_ *
+kernel macros of the tracee's architecture and personality.
+There are two exceptions from this general rule:
+.BR arm_fadvise64_64 (2)
+ARM syscall and
+.BR xtensa_fadvise64_64 (2)
+Xtensa syscall are filtered and printed as
+.BR fadvise64_64 (2).
+.LP
+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
+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.)
+This may have an unpredictable effect on the process
+if the process takes no action to restart the system call.
+.SH BUGS
+Programs that use the
+.I setuid
+bit do not have
+effective user
+.SM ID
+privileges while being traced.
+.LP
+A traced process runs slowly.
+.LP
+Traced processes which are descended from
+.I command
+may be left running after an interrupt signal (\c
+.SM CTRL\s0-C).
+.SH HISTORY
+The original
+.B strace
+was written by Paul Kranenburg
+for SunOS and was inspired by its trace utility.
+The SunOS version of
+.B strace
+was ported to Linux and enhanced
+by Branko Lankester, who also wrote the Linux kernel support.
+Even though Paul released
+.B strace
+2.5 in 1992,
+Branko's work was based on Paul's
+.B strace
+1.5 release from 1991.
+In 1993, Rick Sladkey merged
+.B strace
+2.5 for SunOS and the second release of
+.B strace
+for Linux, added many of the features of
+.BR truss (1)
+from SVR4, and produced an
+.B strace
+that worked on both platforms.  In 1994 Rick ported
+.B strace
+to SVR4 and Solaris and wrote the
+automatic configuration support.  In 1995 he ported
+.B strace
+to Irix
+and tired of writing about himself in the third person.
+.SH REPORTING BUGS
+Problems with
+.B strace
+should be reported to the
+.B strace
+mailing list at <strace\-devel@lists.sourceforge.net>.
+.SH "SEE ALSO"
+.BR ltrace (1),
+.BR time (1),
+.BR ptrace (2),
+.BR proc (5)
diff --git a/strace.c b/strace.c
index 955a1c9..6ed86a6 100644
--- a/strace.c
+++ b/strace.c
@@ -46,6 +46,7 @@
 #endif
 #include <asm/unistd.h>
 
+#include "number_set.h"
 #include "scno.h"
 #include "ptrace.h"
 #include "printsiginfo.h"
@@ -134,7 +135,7 @@
 static int strace_child;
 static int strace_tracer_pid;
 
-static char *username;
+static const char *username;
 static uid_t run_uid;
 static gid_t run_gid;
 
@@ -142,7 +143,7 @@
 static int acolumn = DEFAULT_ACOLUMN;
 static char *acolumn_spaces;
 
-static char *outfname;
+static const char *outfname;
 /* If -ff, points to stderr. Else, it's our common output log */
 static FILE *shared_log;
 
@@ -193,11 +194,19 @@
 static void
 print_version(void)
 {
+	static const char features[] =
+#ifdef USE_LIBUNWIND
+		" stack-unwind"
+#endif /* USE_LIBUNWIND */
+		"";
+
 	printf("%s -- version %s\n"
 	       "Copyright (c) 1991-%s The strace developers <%s>.\n"
 	       "This is free software; see the source for copying conditions.  There is NO\n"
 	       "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
 	       PACKAGE_NAME, PACKAGE_VERSION, COPYRIGHT_YEAR, PACKAGE_URL);
+	printf("\nOptional features enabled:%s\n",
+	       features[0] ? features : " (none)");
 }
 
 static void
@@ -278,7 +287,7 @@
 	exit(0);
 }
 
-static void ATTRIBUTE_NORETURN
+void ATTRIBUTE_NORETURN
 die(void)
 {
 	if (strace_tracer_pid == getpid()) {
@@ -288,83 +297,6 @@
 	exit(1);
 }
 
-static void verror_msg(int err_no, const char *fmt, va_list p)
-{
-	char *msg;
-
-	fflush(NULL);
-
-	/* We want to print entire message with single fprintf to ensure
-	 * message integrity if stderr is shared with other programs.
-	 * Thus we use vasprintf + single fprintf.
-	 */
-	msg = NULL;
-	if (vasprintf(&msg, fmt, p) >= 0) {
-		if (err_no)
-			fprintf(stderr, "%s: %s: %s\n",
-				program_invocation_name, msg, strerror(err_no));
-		else
-			fprintf(stderr, "%s: %s\n",
-				program_invocation_name, msg);
-		free(msg);
-	} else {
-		/* malloc in vasprintf failed, try it without malloc */
-		fprintf(stderr, "%s: ", program_invocation_name);
-		vfprintf(stderr, fmt, p);
-		if (err_no)
-			fprintf(stderr, ": %s\n", strerror(err_no));
-		else
-			putc('\n', stderr);
-	}
-	/* We don't switch stderr to buffered, thus fprintf(stderr)
-	 * always flushes its output and this is not necessary: */
-	/* fflush(stderr); */
-}
-
-void error_msg(const char *fmt, ...)
-{
-	va_list p;
-	va_start(p, fmt);
-	verror_msg(0, fmt, p);
-	va_end(p);
-}
-
-void error_msg_and_die(const char *fmt, ...)
-{
-	va_list p;
-	va_start(p, fmt);
-	verror_msg(0, fmt, p);
-	die();
-}
-
-void error_msg_and_help(const char *fmt, ...)
-{
-	if (fmt != NULL) {
-		va_list p;
-		va_start(p, fmt);
-		verror_msg(0, fmt, p);
-	}
-	fprintf(stderr, "Try '%s -h' for more information.\n",
-		program_invocation_name);
-	die();
-}
-
-void perror_msg(const char *fmt, ...)
-{
-	va_list p;
-	va_start(p, fmt);
-	verror_msg(errno, fmt, p);
-	va_end(p);
-}
-
-void perror_msg_and_die(const char *fmt, ...)
-{
-	va_list p;
-	va_start(p, fmt);
-	verror_msg(errno, fmt, p);
-	die();
-}
-
 static void
 error_opt_arg(int opt, const char *arg)
 {
@@ -583,6 +515,7 @@
 	if (current_tcp) {
 		int n = vfprintf(current_tcp->outf, fmt, args);
 		if (n < 0) {
+			/* very unlikely due to vfprintf buffering */
 			if (current_tcp->outf != stderr)
 				perror_msg("%s", outfname);
 		} else
@@ -612,6 +545,7 @@
 			current_tcp->curcol += strlen(str);
 			return;
 		}
+		/* very unlikely due to fputs_unlocked buffering */
 		if (current_tcp->outf != stderr)
 			perror_msg("%s", outfname);
 	}
@@ -638,12 +572,19 @@
 	va_end(args);
 }
 
+static void
+flush_tcp_output(const struct tcb *const tcp)
+{
+	if (fflush(tcp->outf) && tcp->outf != stderr)
+		perror_msg("%s", outfname);
+}
+
 void
 line_ended(void)
 {
 	if (current_tcp) {
 		current_tcp->curcol = 0;
-		fflush(current_tcp->outf);
+		flush_tcp_output(current_tcp);
 	}
 	if (printing_tcp) {
 		printing_tcp->curcol = 0;
@@ -853,7 +794,7 @@
 		} else {
 			if (printing_tcp == tcp && tcp->curcol != 0)
 				fprintf(tcp->outf, " <detached ...>\n");
-			fflush(tcp->outf);
+			flush_tcp_output(tcp);
 		}
 	}
 
@@ -1727,7 +1668,7 @@
 			qualify(optarg);
 			break;
 		case 'o':
-			outfname = xstrdup(optarg);
+			outfname = optarg;
 			break;
 		case 'O':
 			i = string_to_uint(optarg);
@@ -1751,7 +1692,7 @@
 			set_sortby(optarg);
 			break;
 		case 'u':
-			username = xstrdup(optarg);
+			username = optarg;
 			break;
 #ifdef USE_LIBUNWIND
 		case 'k':
@@ -2074,11 +2015,15 @@
 			error_msg("Process %d attached", pid);
 		return tcp;
 	} else {
-		/* This can happen if a clone call used
-		 * CLONE_PTRACE itself.
+		/*
+		 * This can happen if a clone call misused CLONE_PTRACE itself.
+		 *
+		 * There used to be a dance around possible re-injection of
+		 * WSTOPSIG(status), but it was later removed as the only
+		 * observable stop here is the initial ptrace-stop.
 		 */
-		ptrace(PTRACE_CONT, pid, NULL, 0);
-		error_msg("Stop of unknown pid %u seen, PTRACE_CONTed it", pid);
+		ptrace(PTRACE_DETACH, pid, NULL, 0L);
+		error_msg("Detached unknown pid %d", pid);
 		return NULL;
 	}
 }
@@ -2141,7 +2086,7 @@
 	}
 
 	if (cflag != CFLAG_ONLY_STATS
-	    && is_number_in_set(WTERMSIG(status), &signal_set)) {
+	    && is_number_in_set(WTERMSIG(status), signal_set)) {
 		printleader(tcp);
 #ifdef WCOREDUMP
 		tprintf("+++ killed by %s %s+++\n",
@@ -2176,7 +2121,7 @@
 {
 	if (cflag != CFLAG_ONLY_STATS
 	    && !hide_log(tcp)
-	    && is_number_in_set(sig, &signal_set)) {
+	    && is_number_in_set(sig, signal_set)) {
 		printleader(tcp);
 		if (si) {
 			tprintf("--- %s ", signame(sig));
@@ -2224,7 +2169,7 @@
 	    && printing_tcp->curcol != 0) {
 		current_tcp = printing_tcp;
 		tprints(" <unfinished ...>\n");
-		fflush(printing_tcp->outf);
+		flush_tcp_output(printing_tcp);
 		printing_tcp->curcol = 0;
 		current_tcp = tcp;
 	}
diff --git a/strace.spec b/strace.spec
index 963b2f2..0937354 100644
--- a/strace.spec
+++ b/strace.spec
@@ -1,6 +1,6 @@
 Summary: Tracks and displays system calls associated with a running process
 Name: strace
-Version: 4.18
+Version: 4.19
 Release: 1%{?dist}
 License: BSD
 Group: Development/Debuggers
@@ -49,6 +49,7 @@
 %setup -q
 echo -n %version-%release > .tarball-version
 echo -n 2017 > .year
+echo -n 2017-08-28 > .strace.1.in.date
 
 %build
 echo 'BEGIN OF BUILD ENVIRONMENT INFORMATION'
@@ -101,8 +102,11 @@
 %endif
 
 %changelog
-* Wed Jul 05 2017 strace-devel@lists.sourceforge.net - 4.18-1
-- strace 4.18 snapshot.
+* Tue Sep 05 2017 strace-devel@lists.sourceforge.net - 4.19-1
+- strace 4.19 snapshot.
+
+* Wed Jul 05 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.18-1
+- v4.17 -> v4.18.
 
 * Wed May 24 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.17-1
 - v4.16 -> v4.17.
diff --git a/strace.spec.in b/strace.spec.in
index 76f28bb..0556f78 100644
--- a/strace.spec.in
+++ b/strace.spec.in
@@ -49,6 +49,7 @@
 %setup -q
 echo -n %version-%release > .tarball-version
 echo -n @COPYRIGHT_YEAR@ > .year
+echo -n @MANPAGE_DATE@ > .strace.1.in.date
 
 %build
 echo 'BEGIN OF BUILD ENVIRONMENT INFORMATION'
@@ -104,6 +105,9 @@
 * @RPM_CHANGELOGTIME@ @PACKAGE_BUGREPORT@ - @PACKAGE_VERSION@-1
 - @PACKAGE_STRING@ snapshot.
 
+* Wed Jul 05 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.18-1
+- v4.17 -> v4.18.
+
 * Wed May 24 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.17-1
 - v4.16 -> v4.17.
 
diff --git a/string_to_uint.c b/string_to_uint.c
new file mode 100644
index 0000000..223f68a
--- /dev/null
+++ b/string_to_uint.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2001-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "string_to_uint.h"
+
+int
+string_to_uint_ex(const char *const str, char **const endptr,
+		  const unsigned int max_val, const char *const accepted_ending)
+{
+	char *end;
+	long val;
+
+	if (!*str)
+		return -1;
+
+	errno = 0;
+	val = strtol(str, &end, 10);
+
+	if (str == end || val < 0 || (unsigned long) val > max_val
+	    || (val == LONG_MAX && errno == ERANGE))
+		return -1;
+
+	if (*end && (!accepted_ending || !strchr(accepted_ending, *end)))
+		return -1;
+
+	if (endptr)
+		*endptr = end;
+
+	return (int) val;
+}
+
+int
+string_to_uint(const char *const str)
+{
+	return string_to_uint_upto(str, INT_MAX);
+}
diff --git a/string_to_uint.h b/string_to_uint.h
new file mode 100644
index 0000000..6d26776
--- /dev/null
+++ b/string_to_uint.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2001-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_STRING_TO_UINT_H
+#define STRACE_STRING_TO_UINT_H
+
+extern int
+string_to_uint(const char *str);
+
+extern int
+string_to_uint_ex(const char *str, char **endptr,
+		  unsigned int max_val, const char *accepted_ending);
+
+static inline int
+string_to_uint_upto(const char *const str, const unsigned int max_val)
+{
+	return string_to_uint_ex(str, NULL, max_val, NULL);
+}
+
+#endif /* !STRACE_STRING_TO_UINT_H */
diff --git a/supported_personalities.h b/supported_personalities.h
new file mode 100644
index 0000000..6f18ed3
--- /dev/null
+++ b/supported_personalities.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2001-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_SUPPORTED_PERSONALITIES_H
+#define STRACE_SUPPORTED_PERSONALITIES_H
+
+#if defined X86_64
+# define SUPPORTED_PERSONALITIES 3
+#elif defined AARCH64 \
+   || defined POWERPC64 \
+   || defined RISCV \
+   || defined SPARC64 \
+   || defined TILE \
+   || defined X32
+# define SUPPORTED_PERSONALITIES 2
+#else
+# define SUPPORTED_PERSONALITIES 1
+#endif
+
+#if defined TILE && defined __tilepro__
+# define DEFAULT_PERSONALITY 1
+#else
+# define DEFAULT_PERSONALITY 0
+#endif
+
+#endif /* !STRACE_SUPPORTED_PERSONALITIES_H */
diff --git a/sys_func.h b/sys_func.h
index 3257eb4..f8a4f24 100644
--- a/sys_func.h
+++ b/sys_func.h
@@ -162,6 +162,7 @@
 extern SYS_FUNC(osf_select);
 extern SYS_FUNC(osf_setitimer);
 extern SYS_FUNC(osf_settimeofday);
+extern SYS_FUNC(osf_sigprocmask);
 extern SYS_FUNC(osf_statfs);
 extern SYS_FUNC(osf_utimes);
 extern SYS_FUNC(osf_wait4);
diff --git a/syscall.c b/syscall.c
index 02626c7..b1047fe 100644
--- a/syscall.c
+++ b/syscall.c
@@ -35,6 +35,7 @@
 #include "defs.h"
 #include "native_defs.h"
 #include "nsig.h"
+#include "number_set.h"
 #include <sys/param.h>
 
 /* for struct iovec */
@@ -70,25 +71,7 @@
 #include "syscall.h"
 
 /* Define these shorthand notations to simplify the syscallent files. */
-#define TD TRACE_DESC
-#define TF TRACE_FILE
-#define TI TRACE_IPC
-#define TN TRACE_NETWORK
-#define TP TRACE_PROCESS
-#define TS TRACE_SIGNAL
-#define TM TRACE_MEMORY
-#define TST TRACE_STAT
-#define TLST TRACE_LSTAT
-#define TFST TRACE_FSTAT
-#define TSTA TRACE_STAT_LIKE
-#define TSF TRACE_STATFS
-#define TFSF TRACE_FSTATFS
-#define TSFA TRACE_STATFS_LIKE
-#define NF SYSCALL_NEVER_FAILS
-#define MA MAX_ARGS
-#define SI STACKTRACE_INVALIDATE_CACHE
-#define SE STACKTRACE_CAPTURE_ON_ENTER
-#define CST COMPAT_SYSCALL_TYPES
+#include "sysent_shorthand_defs.h"
 
 #define SEN(syscall_name) SEN_ ## syscall_name, SYS_FUNC_NAME(sys_ ## syscall_name)
 
@@ -111,26 +94,7 @@
 #endif
 
 /* Now undef them since short defines cause wicked namespace pollution. */
-#undef SEN
-#undef TD
-#undef TF
-#undef TI
-#undef TN
-#undef TP
-#undef TS
-#undef TM
-#undef TST
-#undef TLST
-#undef TFST
-#undef TSTA
-#undef TSF
-#undef TFSF
-#undef TSFA
-#undef NF
-#undef MA
-#undef SI
-#undef SE
-#undef CST
+#include "sysent_shorthand_undefs.h"
 
 /*
  * `ioctlent[012].h' files are automatically generated by the auxiliary
@@ -344,16 +308,12 @@
 	tcp->currpers = personality;
 
 # undef PERSONALITY_NAMES
-# if defined POWERPC64
-#  define PERSONALITY_NAMES {"64 bit", "32 bit"}
-# elif defined X86_64
+# if defined X86_64
 #  define PERSONALITY_NAMES {"64 bit", "32 bit", "x32"}
 # elif defined X32
 #  define PERSONALITY_NAMES {"x32", "32 bit"}
-# elif defined AARCH64
+# elif SUPPORTED_PERSONALITIES == 2
 #  define PERSONALITY_NAMES {"64 bit", "32 bit"}
-# elif defined TILE
-#  define PERSONALITY_NAMES {"64-bit", "32-bit"}
 # endif
 # ifdef PERSONALITY_NAMES
 	if (!qflag) {
@@ -468,7 +428,7 @@
 	if (fd < 0)
 		return;
 
-	if (is_number_in_set(fd, &read_set)) {
+	if (is_number_in_set(fd, read_set)) {
 		switch (tcp->s_ent->sen) {
 		case SEN_read:
 		case SEN_pread:
@@ -491,7 +451,7 @@
 			return;
 		}
 	}
-	if (is_number_in_set(fd, &write_set)) {
+	if (is_number_in_set(fd, write_set)) {
 		switch (tcp->s_ent->sen) {
 		case SEN_write:
 		case SEN_pwrite:
@@ -610,9 +570,9 @@
 
 	opts->first = opts->step;
 
-	if (opts->signo > 0)
-		*signo = opts->signo;
-	if (opts->rval != INJECT_OPTS_RVAL_DEFAULT && !arch_set_scno(tcp, -1))
+	if (opts->data.flags & INJECT_F_SIGNAL)
+		*signo = opts->data.signo;
+	if (opts->data.flags & INJECT_F_RETVAL && !arch_set_scno(tcp, -1))
 		tcp->flags |= TCB_TAMPERED;
 
 	return 0;
@@ -626,17 +586,17 @@
 	if (!opts)
 		return 0;
 
-	if (opts->rval >= 0) {
+	if (opts->data.rval >= 0) {
 		kernel_long_t u_rval = tcp->u_rval;
 
-		tcp->u_rval = opts->rval;
+		tcp->u_rval = opts->data.rval;
 		if (arch_set_success(tcp)) {
 			tcp->u_rval = u_rval;
 		} else {
 			tcp->u_error = 0;
 		}
 	} else {
-		unsigned long new_error = -opts->rval;
+		unsigned long new_error = -opts->data.rval;
 
 		if (new_error != tcp->u_error && new_error <= MAX_ERRNO_VALUE) {
 			unsigned long u_error = tcp->u_error;
@@ -717,9 +677,7 @@
 			break;
 	}
 
-	if (!(tcp->qual_flg & QUAL_TRACE)
-	 || (tracing_paths && !pathtrace_match(tcp))
-	) {
+	if (!traced(tcp) || (tracing_paths && !pathtrace_match(tcp))) {
 		tcp->flags |= TCB_FILTERED;
 		return 0;
 	}
@@ -730,7 +688,7 @@
 		return 0;
 	}
 
-	if (tcp->qual_flg & QUAL_INJECT)
+	if (inject(tcp))
 		tamper_with_syscall_entering(tcp, sig);
 
 	if (cflag == CFLAG_ONLY_STATS) {
@@ -746,8 +704,7 @@
 
 	printleader(tcp);
 	tprintf("%s(", tcp->s_ent->sys_name);
-	int res = (tcp->qual_flg & QUAL_RAW)
-		? printargs(tcp) : tcp->s_ent->sys_func(tcp);
+	int res = raw(tcp) ? printargs(tcp) : tcp->s_ent->sys_func(tcp);
 	fflush(tcp->outf);
 	return res;
 }
@@ -841,7 +798,7 @@
 	tcp->s_prev_ent = tcp->s_ent;
 
 	int sys_res = 0;
-	if (tcp->qual_flg & QUAL_RAW) {
+	if (raw(tcp)) {
 		/* sys_res = printargs(tcp); - but it's nop on sysexit */
 	} else {
 	/* FIXME: not_failing_only (IOW, option -z) is broken:
@@ -864,7 +821,7 @@
 	tabto();
 	unsigned long u_error = tcp->u_error;
 
-	if (tcp->qual_flg & QUAL_RAW) {
+	if (raw(tcp)) {
 		if (u_error) {
 			tprintf("= -1 (errno %lu)", u_error);
 		} else {
@@ -1047,26 +1004,6 @@
 	tcp->u_error = saved_u_error;
 }
 
-/*
- * Check the syscall return value register value for whether it is
- * a negated errno code indicating an error, or a success return value.
- */
-static inline bool
-is_negated_errno(kernel_ulong_t val)
-{
-	/* Linux kernel defines MAX_ERRNO to 4095. */
-	kernel_ulong_t max = -(kernel_long_t) 4095;
-
-#ifndef current_klongsize
-	if (current_klongsize < sizeof(val)) {
-		val = (uint32_t) val;
-		max = (uint32_t) max;
-	}
-#endif /* !current_klongsize */
-
-	return val >= max;
-}
-
 #include "arch_regs.c"
 
 #ifdef HAVE_GETRVAL2
diff --git a/sysent_shorthand_defs.h b/sysent_shorthand_defs.h
new file mode 100644
index 0000000..911fc33
--- /dev/null
+++ b/sysent_shorthand_defs.h
@@ -0,0 +1,47 @@
+#ifdef	STRACE_TESTS_H
+
+# define TD	0
+# define TF	0
+# define TI	0
+# define TN	0
+# define TP	0
+# define TS	0
+# define TM	0
+# define TST	0
+# define TLST	0
+# define TFST	0
+# define TSTA	0
+# define TSF	0
+# define TFSF	0
+# define TSFA	0
+# define NF	0
+# define MA	0
+# define SI	0
+# define SE	0
+# define CST	0
+# define SEN(a)	0, 0
+
+#else	/*	!STRACE_TESTS_H	*/
+
+# define TD	TRACE_DESC
+# define TF	TRACE_FILE
+# define TI	TRACE_IPC
+# define TN	TRACE_NETWORK
+# define TP	TRACE_PROCESS
+# define TS	TRACE_SIGNAL
+# define TM	TRACE_MEMORY
+# define TST	TRACE_STAT
+# define TLST	TRACE_LSTAT
+# define TFST	TRACE_FSTAT
+# define TSTA	TRACE_STAT_LIKE
+# define TSF	TRACE_STATFS
+# define TFSF	TRACE_FSTATFS
+# define TSFA	TRACE_STATFS_LIKE
+# define NF	SYSCALL_NEVER_FAILS
+# define MA	MAX_ARGS
+# define SI	STACKTRACE_INVALIDATE_CACHE
+# define SE	STACKTRACE_CAPTURE_ON_ENTER
+# define CST	COMPAT_SYSCALL_TYPES
+/* SEN(a) is defined elsewhere */
+
+#endif
diff --git a/sysent_shorthand_undefs.h b/sysent_shorthand_undefs.h
new file mode 100644
index 0000000..5232b64
--- /dev/null
+++ b/sysent_shorthand_undefs.h
@@ -0,0 +1,20 @@
+#undef TD
+#undef TF
+#undef TI
+#undef TN
+#undef TP
+#undef TS
+#undef TM
+#undef TST
+#undef TLST
+#undef TFST
+#undef TSTA
+#undef TSF
+#undef TFSF
+#undef TSFA
+#undef NF
+#undef MA
+#undef SI
+#undef SE
+#undef CST
+#undef SEN
diff --git a/sysmips.c b/sysmips.c
index a0ed557..e095cb3 100644
--- a/sysmips.c
+++ b/sysmips.c
@@ -59,8 +59,7 @@
 			     nodename) < 0) {
 			printaddr(tcp->u_arg[1]);
 		} else {
-			print_quoted_string(nodename, __NEW_UTS_LEN + 1,
-					    QUOTE_0_TERMINATED);
+			print_quoted_cstring(nodename, __NEW_UTS_LEN + 1);
 		}
 		return RVAL_DECODED;
 	}
diff --git a/term.c b/term.c
index 6a7a65b..9368e5f 100644
--- a/term.c
+++ b/term.c
@@ -42,7 +42,6 @@
 decode_termios(struct tcb *const tcp, const kernel_ulong_t addr)
 {
 	struct termios tios;
-	int i;
 
 	tprints(", ");
 	if (umove_or_printaddr(tcp, addr, &tios))
@@ -65,10 +64,9 @@
 	if (!(tios.c_lflag & ICANON))
 		tprintf("c_cc[VMIN]=%d, c_cc[VTIME]=%d, ",
 			tios.c_cc[VMIN], tios.c_cc[VTIME]);
-	tprints("c_cc=\"");
-	for (i = 0; i < NCCS; i++)
-		tprintf("\\x%02x", tios.c_cc[i]);
-	tprints("\"}");
+	tprints("c_cc=");
+	print_quoted_string((char *) tios.c_cc, NCCS, QUOTE_FORCE_HEX);
+	tprints("}");
 }
 
 static void
@@ -288,5 +286,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/tests-m32/Makefile.am b/tests-m32/Makefile.am
index c255fd6..741fd8d 100644
--- a/tests-m32/Makefile.am
+++ b/tests-m32/Makefile.am
@@ -50,6 +50,7 @@
 	get_sigset_size.c \
 	hexdump_strdup.c \
 	hexquote_strndup.c \
+	ifindex.c \
 	inode_of_sockfd.c \
 	libmmsg.c \
 	libsocketcall.c \
@@ -63,7 +64,12 @@
 	skip_unavailable.c \
 	sprintrc.c \
 	tail_alloc.c \
+	test_netlink.h \
 	test_nlattr.h \
+	test_printpath.c \
+	test_printstrn.c \
+	test_ucopy.c \
+	test_ucopy.h \
 	tests.h \
 	tprintf.c \
 	# end of libtests_a_SOURCES
@@ -81,6 +87,8 @@
 	attach-p-cmd-p \
 	block_reset_raise_run \
 	caps-abbrev \
+	clone_parent \
+	clone_ptrace \
 	count-f \
 	execve-v \
 	execveat-v \
@@ -96,6 +104,7 @@
 	ioctl_loop-v \
 	ioctl_nsfs \
 	ioctl_rtc-v \
+	is_linux_mips_n64 \
 	ksysent \
 	mmsg-silent \
 	mmsg_name-v \
@@ -241,18 +250,23 @@
 	attach-f-p.test \
 	attach-p-cmd.test \
 	bexecve.test \
+	clone_parent.test \
+	clone_ptrace.test \
 	count-f.test \
 	count.test \
 	detach-running.test \
 	detach-sleeping.test \
 	detach-stopped.test \
 	filter-unavailable.test \
+	fflush.test \
 	get_regs.test \
 	interactive_block.test \
 	ksysent.test \
 	opipe.test \
 	options-syntax.test \
 	pc.test \
+	printpath-umovestr-legacy.test \
+	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
 	qual_inject-error-signal.test \
@@ -292,7 +306,7 @@
 
 @VALGRIND_CHECK_RULES@
 VALGRIND_FLAGS = --quiet
-VALGRIND_SUPPRESSIONS_FILES = $(srcdir)/strace.supp
+VALGRIND_SUPPRESSIONS_FILES = $(abs_srcdir)/strace.supp
 
 EXTRA_DIST = \
 	caps-abbrev.awk \
@@ -317,6 +331,7 @@
 	lstatx.c \
 	match.awk \
 	net.expected \
+	netlink_sock_diag-v.sh \
 	oldselect.expected \
 	pipe.expected \
 	process_vm_readv_writev.c \
@@ -345,6 +360,7 @@
 	strace.supp \
 	struct_flock.c \
 	sun_path.expected \
+	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
@@ -385,6 +401,10 @@
 clean-local-check:
 	-rm -rf -- $(TESTS:.test=.dir) $(GEN_TESTS:.gen.test=.dir)
 
+.PHONY: check-valgrind-local
+check-valgrind-local: $(check_LIBRARIES) $(check_PROGRAMS)
+
+BUILT_SOURCES = ksysent.h
 CLEANFILES = ksysent.h
 
 include ../scno.am
diff --git a/tests-m32/Makefile.in b/tests-m32/Makefile.in
index 0181934..f6955de 100644
--- a/tests-m32/Makefile.in
+++ b/tests-m32/Makefile.in
@@ -139,13 +139,15 @@
 check_PROGRAMS = $(am__EXEEXT_1) answer$(EXEEXT) attach-f-p$(EXEEXT) \
 	attach-f-p-cmd$(EXEEXT) attach-p-cmd-cmd$(EXEEXT) \
 	attach-p-cmd-p$(EXEEXT) block_reset_raise_run$(EXEEXT) \
-	caps-abbrev$(EXEEXT) count-f$(EXEEXT) execve-v$(EXEEXT) \
+	caps-abbrev$(EXEEXT) clone_parent$(EXEEXT) \
+	clone_ptrace$(EXEEXT) count-f$(EXEEXT) execve-v$(EXEEXT) \
 	execveat-v$(EXEEXT) filter-unavailable$(EXEEXT) \
 	fork-f$(EXEEXT) getpid$(EXEEXT) getppid$(EXEEXT) \
 	gettid$(EXEEXT) int_0x80$(EXEEXT) ioctl_dm-v$(EXEEXT) \
 	ioctl_evdev-v$(EXEEXT) ioctl_loop-nv$(EXEEXT) \
 	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
-	ksysent$(EXEEXT) mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
+	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
+	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
 	msg_control-v$(EXEEXT) net-accept-connect$(EXEEXT) \
 	netlink_inet_diag$(EXEEXT) netlink_netlink_diag$(EXEEXT) \
 	netlink_unix_diag$(EXEEXT) nsyscalls$(EXEEXT) pc$(EXEEXT) \
@@ -170,7 +172,7 @@
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_code_coverage.m4 \
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
-	$(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/mpers.m4 $(top_srcdir)/m4/st_bpf.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
 	$(top_srcdir)/m4/st_warn_cflags.m4 \
 	$(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
@@ -195,6 +197,7 @@
 	libtests_a-get_sigset_size.$(OBJEXT) \
 	libtests_a-hexdump_strdup.$(OBJEXT) \
 	libtests_a-hexquote_strndup.$(OBJEXT) \
+	libtests_a-ifindex.$(OBJEXT) \
 	libtests_a-inode_of_sockfd.$(OBJEXT) \
 	libtests_a-libmmsg.$(OBJEXT) \
 	libtests_a-libsocketcall.$(OBJEXT) \
@@ -206,13 +209,15 @@
 	libtests_a-signal2name.$(OBJEXT) \
 	libtests_a-skip_unavailable.$(OBJEXT) \
 	libtests_a-sprintrc.$(OBJEXT) libtests_a-tail_alloc.$(OBJEXT) \
-	libtests_a-tprintf.$(OBJEXT)
+	libtests_a-test_printpath.$(OBJEXT) \
+	libtests_a-test_printstrn.$(OBJEXT) \
+	libtests_a-test_ucopy.$(OBJEXT) libtests_a-tprintf.$(OBJEXT)
 libtests_a_OBJECTS = $(am_libtests_a_OBJECTS)
 am__EXEEXT_1 = _newselect$(EXEEXT) accept$(EXEEXT) accept4$(EXEEXT) \
 	access$(EXEEXT) acct$(EXEEXT) add_key$(EXEEXT) \
 	adjtimex$(EXEEXT) aio$(EXEEXT) alarm$(EXEEXT) bpf$(EXEEXT) \
-	brk$(EXEEXT) btrfs$(EXEEXT) caps$(EXEEXT) chmod$(EXEEXT) \
-	chown$(EXEEXT) chown32$(EXEEXT) chroot$(EXEEXT) \
+	bpf-v$(EXEEXT) brk$(EXEEXT) btrfs$(EXEEXT) caps$(EXEEXT) \
+	chmod$(EXEEXT) chown$(EXEEXT) chown32$(EXEEXT) chroot$(EXEEXT) \
 	clock_adjtime$(EXEEXT) clock_nanosleep$(EXEEXT) \
 	clock_xettime$(EXEEXT) copy_file_range$(EXEEXT) creat$(EXEEXT) \
 	delete_module$(EXEEXT) dup$(EXEEXT) dup2$(EXEEXT) \
@@ -224,53 +229,66 @@
 	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) fchdir$(EXEEXT) \
 	fchmod$(EXEEXT) fchmodat$(EXEEXT) fchown$(EXEEXT) \
 	fchown32$(EXEEXT) fchownat$(EXEEXT) fcntl$(EXEEXT) \
-	fcntl64$(EXEEXT) fdatasync$(EXEEXT) file_handle$(EXEEXT) \
-	file_ioctl$(EXEEXT) finit_module$(EXEEXT) flock$(EXEEXT) \
-	fstat$(EXEEXT) fstat64$(EXEEXT) fstatat64$(EXEEXT) \
-	fstatfs$(EXEEXT) fstatfs64$(EXEEXT) fsync$(EXEEXT) \
-	ftruncate$(EXEEXT) ftruncate64$(EXEEXT) futex$(EXEEXT) \
-	futimesat$(EXEEXT) get_mempolicy$(EXEEXT) getcpu$(EXEEXT) \
-	getcwd$(EXEEXT) getdents$(EXEEXT) getdents64$(EXEEXT) \
-	getegid$(EXEEXT) getegid32$(EXEEXT) geteuid$(EXEEXT) \
-	geteuid32$(EXEEXT) getgid$(EXEEXT) getgid32$(EXEEXT) \
-	getgroups$(EXEEXT) getgroups32$(EXEEXT) getpeername$(EXEEXT) \
-	getpgrp$(EXEEXT) getpid$(EXEEXT) getppid$(EXEEXT) \
-	getrandom$(EXEEXT) getresgid$(EXEEXT) getresgid32$(EXEEXT) \
-	getresuid$(EXEEXT) getresuid32$(EXEEXT) getrlimit$(EXEEXT) \
-	getrusage$(EXEEXT) getsid$(EXEEXT) getsockname$(EXEEXT) \
-	getuid$(EXEEXT) getuid32$(EXEEXT) getxxid$(EXEEXT) \
-	inet-cmsg$(EXEEXT) init_module$(EXEEXT) inotify$(EXEEXT) \
-	inotify_init1$(EXEEXT) ioctl$(EXEEXT) ioctl_block$(EXEEXT) \
-	ioctl_dm$(EXEEXT) ioctl_evdev$(EXEEXT) ioctl_loop$(EXEEXT) \
-	ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) ioctl_scsi$(EXEEXT) \
-	ioctl_sg_io_v3$(EXEEXT) ioctl_sg_io_v4$(EXEEXT) \
-	ioctl_sock_gifconf$(EXEEXT) ioctl_uffdio$(EXEEXT) \
-	ioctl_v4l2$(EXEEXT) ioperm$(EXEEXT) iopl$(EXEEXT) \
-	ioprio$(EXEEXT) ip_mreq$(EXEEXT) ipc$(EXEEXT) ipc_msg$(EXEEXT) \
-	ipc_msgbuf$(EXEEXT) ipc_sem$(EXEEXT) ipc_shm$(EXEEXT) \
-	kcmp$(EXEEXT) kexec_file_load$(EXEEXT) kexec_load$(EXEEXT) \
-	keyctl$(EXEEXT) kill$(EXEEXT) lchown$(EXEEXT) \
-	lchown32$(EXEEXT) link$(EXEEXT) linkat$(EXEEXT) \
-	llseek$(EXEEXT) lookup_dcookie$(EXEEXT) lseek$(EXEEXT) \
-	lstat$(EXEEXT) lstat64$(EXEEXT) madvise$(EXEEXT) \
-	mbind$(EXEEXT) membarrier$(EXEEXT) memfd_create$(EXEEXT) \
-	migrate_pages$(EXEEXT) mincore$(EXEEXT) mkdir$(EXEEXT) \
-	mkdirat$(EXEEXT) mknod$(EXEEXT) mknodat$(EXEEXT) \
-	mlock$(EXEEXT) mlock2$(EXEEXT) mlockall$(EXEEXT) mmap$(EXEEXT) \
-	mmap64$(EXEEXT) mmsg$(EXEEXT) mmsg_name$(EXEEXT) \
-	mount$(EXEEXT) move_pages$(EXEEXT) mq$(EXEEXT) \
-	mq_sendrecv$(EXEEXT) mq_sendrecv-read$(EXEEXT) \
+	fcntl64$(EXEEXT) fdatasync$(EXEEXT) fflush$(EXEEXT) \
+	file_handle$(EXEEXT) file_ioctl$(EXEEXT) finit_module$(EXEEXT) \
+	flock$(EXEEXT) fstat$(EXEEXT) fstat64$(EXEEXT) \
+	fstatat64$(EXEEXT) fstatfs$(EXEEXT) fstatfs64$(EXEEXT) \
+	fsync$(EXEEXT) ftruncate$(EXEEXT) ftruncate64$(EXEEXT) \
+	futex$(EXEEXT) futimesat$(EXEEXT) get_mempolicy$(EXEEXT) \
+	getcpu$(EXEEXT) getcwd$(EXEEXT) getdents$(EXEEXT) \
+	getdents64$(EXEEXT) getegid$(EXEEXT) getegid32$(EXEEXT) \
+	geteuid$(EXEEXT) geteuid32$(EXEEXT) getgid$(EXEEXT) \
+	getgid32$(EXEEXT) getgroups$(EXEEXT) getgroups32$(EXEEXT) \
+	getpeername$(EXEEXT) getpgrp$(EXEEXT) getpid$(EXEEXT) \
+	getppid$(EXEEXT) getrandom$(EXEEXT) getresgid$(EXEEXT) \
+	getresgid32$(EXEEXT) getresuid$(EXEEXT) getresuid32$(EXEEXT) \
+	getrlimit$(EXEEXT) getrusage$(EXEEXT) getsid$(EXEEXT) \
+	getsockname$(EXEEXT) getuid$(EXEEXT) getuid32$(EXEEXT) \
+	getxxid$(EXEEXT) group_req$(EXEEXT) inet-cmsg$(EXEEXT) \
+	init_module$(EXEEXT) inotify$(EXEEXT) inotify_init1$(EXEEXT) \
+	ioctl$(EXEEXT) ioctl_block$(EXEEXT) ioctl_dm$(EXEEXT) \
+	ioctl_evdev$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
+	ioctl_rtc$(EXEEXT) ioctl_scsi$(EXEEXT) ioctl_sg_io_v3$(EXEEXT) \
+	ioctl_sg_io_v4$(EXEEXT) ioctl_sock_gifconf$(EXEEXT) \
+	ioctl_uffdio$(EXEEXT) ioctl_v4l2$(EXEEXT) ioperm$(EXEEXT) \
+	iopl$(EXEEXT) ioprio$(EXEEXT) ip_mreq$(EXEEXT) ipc$(EXEEXT) \
+	ipc_msg$(EXEEXT) ipc_msgbuf$(EXEEXT) ipc_sem$(EXEEXT) \
+	ipc_shm$(EXEEXT) kcmp$(EXEEXT) kexec_file_load$(EXEEXT) \
+	kexec_load$(EXEEXT) keyctl$(EXEEXT) kill$(EXEEXT) \
+	lchown$(EXEEXT) lchown32$(EXEEXT) link$(EXEEXT) \
+	linkat$(EXEEXT) llseek$(EXEEXT) lookup_dcookie$(EXEEXT) \
+	lseek$(EXEEXT) lstat$(EXEEXT) lstat64$(EXEEXT) \
+	madvise$(EXEEXT) mbind$(EXEEXT) membarrier$(EXEEXT) \
+	memfd_create$(EXEEXT) migrate_pages$(EXEEXT) mincore$(EXEEXT) \
+	mkdir$(EXEEXT) mkdirat$(EXEEXT) mknod$(EXEEXT) \
+	mknodat$(EXEEXT) mlock$(EXEEXT) mlock2$(EXEEXT) \
+	mlockall$(EXEEXT) mmap$(EXEEXT) mmap64$(EXEEXT) mmsg$(EXEEXT) \
+	mmsg_name$(EXEEXT) mount$(EXEEXT) move_pages$(EXEEXT) \
+	mq$(EXEEXT) mq_sendrecv$(EXEEXT) mq_sendrecv-read$(EXEEXT) \
 	mq_sendrecv-write$(EXEEXT) msg_control$(EXEEXT) \
 	msg_name$(EXEEXT) munlockall$(EXEEXT) nanosleep$(EXEEXT) \
 	net-icmp_filter$(EXEEXT) net-sockaddr$(EXEEXT) \
 	net-y-unix$(EXEEXT) net-yy-inet$(EXEEXT) \
 	net-yy-netlink$(EXEEXT) net-yy-unix$(EXEEXT) \
-	netlink_audit$(EXEEXT) netlink_generic$(EXEEXT) \
+	netlink_audit$(EXEEXT) netlink_crypto$(EXEEXT) \
+	netlink_generic$(EXEEXT) netlink_kobject_uevent$(EXEEXT) \
 	netlink_netfilter$(EXEEXT) netlink_protocol$(EXEEXT) \
 	netlink_route$(EXEEXT) netlink_selinux$(EXEEXT) \
 	netlink_sock_diag$(EXEEXT) netlink_xfrm$(EXEEXT) \
 	newfstatat$(EXEEXT) nlattr$(EXEEXT) \
-	nlattr_inet_diag_msg$(EXEEXT) nlattr_netlink_diag_msg$(EXEEXT) \
+	nlattr_crypto_user_alg$(EXEEXT) nlattr_br_port_msg$(EXEEXT) \
+	nlattr_dcbmsg$(EXEEXT) nlattr_fib_rule_hdr$(EXEEXT) \
+	nlattr_ifaddrlblmsg$(EXEEXT) nlattr_ifaddrmsg$(EXEEXT) \
+	nlattr_ifinfomsg$(EXEEXT) nlattr_ifla_brport$(EXEEXT) \
+	nlattr_ifla_port$(EXEEXT) nlattr_ifla_xdp$(EXEEXT) \
+	nlattr_inet_diag_msg$(EXEEXT) \
+	nlattr_inet_diag_req_compat$(EXEEXT) \
+	nlattr_inet_diag_req_v2$(EXEEXT) nlattr_ndmsg$(EXEEXT) \
+	nlattr_ndtmsg$(EXEEXT) nlattr_netconfmsg$(EXEEXT) \
+	nlattr_netlink_diag_msg$(EXEEXT) nlattr_nlmsgerr$(EXEEXT) \
+	nlattr_packet_diag_msg$(EXEEXT) nlattr_rtgenmsg$(EXEEXT) \
+	nlattr_rtmsg$(EXEEXT) nlattr_smc_diag_msg$(EXEEXT) \
+	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
 	oldfstat$(EXEEXT) oldlstat$(EXEEXT) oldselect$(EXEEXT) \
 	oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
@@ -283,15 +301,20 @@
 	prctl-securebits$(EXEEXT) prctl-tid_address$(EXEEXT) \
 	prctl-tsc$(EXEEXT) pread64-pwrite64$(EXEEXT) preadv$(EXEEXT) \
 	preadv-pwritev$(EXEEXT) preadv2-pwritev2$(EXEEXT) \
-	printstr$(EXEEXT) prlimit64$(EXEEXT) process_vm_readv$(EXEEXT) \
-	process_vm_writev$(EXEEXT) pselect6$(EXEEXT) ptrace$(EXEEXT) \
-	pwritev$(EXEEXT) quotactl$(EXEEXT) quotactl-xfs$(EXEEXT) \
-	read-write$(EXEEXT) readahead$(EXEEXT) readdir$(EXEEXT) \
-	readlink$(EXEEXT) readlinkat$(EXEEXT) readv$(EXEEXT) \
-	reboot$(EXEEXT) recvfrom$(EXEEXT) recvmmsg-timeout$(EXEEXT) \
-	recvmsg$(EXEEXT) remap_file_pages$(EXEEXT) rename$(EXEEXT) \
-	renameat$(EXEEXT) renameat2$(EXEEXT) request_key$(EXEEXT) \
-	rmdir$(EXEEXT) rt_sigaction$(EXEEXT) rt_sigpending$(EXEEXT) \
+	printpath-umovestr$(EXEEXT) \
+	printpath-umovestr-peekdata$(EXEEXT) \
+	printpath-umovestr-undumpable$(EXEEXT) printstr$(EXEEXT) \
+	printstrn-umoven$(EXEEXT) printstrn-umoven-peekdata$(EXEEXT) \
+	printstrn-umoven-undumpable$(EXEEXT) prlimit64$(EXEEXT) \
+	process_vm_readv$(EXEEXT) process_vm_writev$(EXEEXT) \
+	pselect6$(EXEEXT) ptrace$(EXEEXT) pwritev$(EXEEXT) \
+	quotactl$(EXEEXT) quotactl-xfs$(EXEEXT) read-write$(EXEEXT) \
+	readahead$(EXEEXT) readdir$(EXEEXT) readlink$(EXEEXT) \
+	readlinkat$(EXEEXT) readv$(EXEEXT) reboot$(EXEEXT) \
+	recvfrom$(EXEEXT) recvmmsg-timeout$(EXEEXT) recvmsg$(EXEEXT) \
+	remap_file_pages$(EXEEXT) rename$(EXEEXT) renameat$(EXEEXT) \
+	renameat2$(EXEEXT) request_key$(EXEEXT) rmdir$(EXEEXT) \
+	rt_sigaction$(EXEEXT) rt_sigpending$(EXEEXT) \
 	rt_sigprocmask$(EXEEXT) rt_sigqueueinfo$(EXEEXT) \
 	rt_sigreturn$(EXEEXT) rt_sigsuspend$(EXEEXT) \
 	rt_sigtimedwait$(EXEEXT) rt_tgsigqueueinfo$(EXEEXT) \
@@ -311,23 +334,25 @@
 	shmxt$(EXEEXT) shutdown$(EXEEXT) sigaction$(EXEEXT) \
 	sigaltstack$(EXEEXT) siginfo$(EXEEXT) signal$(EXEEXT) \
 	signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
-	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) socketcall$(EXEEXT) \
-	splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
-	statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
-	sxetmask$(EXEEXT) symlink$(EXEEXT) symlinkat$(EXEEXT) \
-	sync$(EXEEXT) sync_file_range$(EXEEXT) \
-	sync_file_range2$(EXEEXT) sysinfo$(EXEEXT) syslog$(EXEEXT) \
-	tee$(EXEEXT) time$(EXEEXT) timer_create$(EXEEXT) \
-	timer_xettime$(EXEEXT) timerfd_xettime$(EXEEXT) times$(EXEEXT) \
-	times-fail$(EXEEXT) truncate$(EXEEXT) truncate64$(EXEEXT) \
-	ugetrlimit$(EXEEXT) uio$(EXEEXT) umask$(EXEEXT) \
-	umount$(EXEEXT) umount2$(EXEEXT) umoven-illptr$(EXEEXT) \
-	umovestr$(EXEEXT) umovestr-illptr$(EXEEXT) umovestr2$(EXEEXT) \
-	umovestr3$(EXEEXT) uname$(EXEEXT) unlink$(EXEEXT) \
-	unlinkat$(EXEEXT) unshare$(EXEEXT) userfaultfd$(EXEEXT) \
-	ustat$(EXEEXT) utime$(EXEEXT) utimensat$(EXEEXT) \
-	utimes$(EXEEXT) vhangup$(EXEEXT) vmsplice$(EXEEXT) \
-	wait4$(EXEEXT) waitid$(EXEEXT) waitpid$(EXEEXT) xattr$(EXEEXT) \
+	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
+	so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
+	socketcall$(EXEEXT) splice$(EXEEXT) stat$(EXEEXT) \
+	stat64$(EXEEXT) statfs$(EXEEXT) statfs64$(EXEEXT) \
+	statx$(EXEEXT) swap$(EXEEXT) sxetmask$(EXEEXT) \
+	symlink$(EXEEXT) symlinkat$(EXEEXT) sync$(EXEEXT) \
+	sync_file_range$(EXEEXT) sync_file_range2$(EXEEXT) \
+	sysinfo$(EXEEXT) syslog$(EXEEXT) tee$(EXEEXT) time$(EXEEXT) \
+	timer_create$(EXEEXT) timer_xettime$(EXEEXT) \
+	timerfd_xettime$(EXEEXT) times$(EXEEXT) times-fail$(EXEEXT) \
+	truncate$(EXEEXT) truncate64$(EXEEXT) ugetrlimit$(EXEEXT) \
+	uio$(EXEEXT) umask$(EXEEXT) umount$(EXEEXT) umount2$(EXEEXT) \
+	umoven-illptr$(EXEEXT) umovestr$(EXEEXT) \
+	umovestr-illptr$(EXEEXT) umovestr2$(EXEEXT) umovestr3$(EXEEXT) \
+	uname$(EXEEXT) unlink$(EXEEXT) unlinkat$(EXEEXT) \
+	unshare$(EXEEXT) userfaultfd$(EXEEXT) ustat$(EXEEXT) \
+	utime$(EXEEXT) utimensat$(EXEEXT) utimes$(EXEEXT) \
+	vhangup$(EXEEXT) vmsplice$(EXEEXT) wait4$(EXEEXT) \
+	waitid$(EXEEXT) waitpid$(EXEEXT) xattr$(EXEEXT) \
 	xattr-strings$(EXEEXT) xet_robust_list$(EXEEXT) \
 	xetitimer$(EXEEXT) xetpgid$(EXEEXT) xetpriority$(EXEEXT) \
 	xettimeofday$(EXEEXT)
@@ -394,6 +419,10 @@
 bpf_OBJECTS = bpf.$(OBJEXT)
 bpf_LDADD = $(LDADD)
 bpf_DEPENDENCIES = libtests.a
+bpf_v_SOURCES = bpf-v.c
+bpf_v_OBJECTS = bpf-v.$(OBJEXT)
+bpf_v_LDADD = $(LDADD)
+bpf_v_DEPENDENCIES = libtests.a
 brk_SOURCES = brk.c
 brk_OBJECTS = brk.$(OBJEXT)
 brk_LDADD = $(LDADD)
@@ -437,6 +466,14 @@
 clock_xettime_SOURCES = clock_xettime.c
 clock_xettime_OBJECTS = clock_xettime.$(OBJEXT)
 clock_xettime_DEPENDENCIES = $(LDADD)
+clone_parent_SOURCES = clone_parent.c
+clone_parent_OBJECTS = clone_parent.$(OBJEXT)
+clone_parent_LDADD = $(LDADD)
+clone_parent_DEPENDENCIES = libtests.a
+clone_ptrace_SOURCES = clone_ptrace.c
+clone_ptrace_OBJECTS = clone_ptrace.$(OBJEXT)
+clone_ptrace_LDADD = $(LDADD)
+clone_ptrace_DEPENDENCIES = libtests.a
 copy_file_range_SOURCES = copy_file_range.c
 copy_file_range_OBJECTS = copy_file_range.$(OBJEXT)
 copy_file_range_LDADD = $(LDADD)
@@ -568,6 +605,10 @@
 fdatasync_OBJECTS = fdatasync.$(OBJEXT)
 fdatasync_LDADD = $(LDADD)
 fdatasync_DEPENDENCIES = libtests.a
+fflush_SOURCES = fflush.c
+fflush_OBJECTS = fflush.$(OBJEXT)
+fflush_LDADD = $(LDADD)
+fflush_DEPENDENCIES = libtests.a
 file_handle_SOURCES = file_handle.c
 file_handle_OBJECTS = file_handle.$(OBJEXT)
 file_handle_LDADD = $(LDADD)
@@ -751,6 +792,10 @@
 getxxid_OBJECTS = getxxid.$(OBJEXT)
 getxxid_LDADD = $(LDADD)
 getxxid_DEPENDENCIES = libtests.a
+group_req_SOURCES = group_req.c
+group_req_OBJECTS = group_req.$(OBJEXT)
+group_req_LDADD = $(LDADD)
+group_req_DEPENDENCIES = libtests.a
 inet_cmsg_SOURCES = inet-cmsg.c
 inet_cmsg_OBJECTS = inet-cmsg.$(OBJEXT)
 inet_cmsg_LDADD = $(LDADD)
@@ -883,6 +928,10 @@
 ipc_shm_OBJECTS = ipc_shm.$(OBJEXT)
 ipc_shm_LDADD = $(LDADD)
 ipc_shm_DEPENDENCIES = libtests.a
+is_linux_mips_n64_SOURCES = is_linux_mips_n64.c
+is_linux_mips_n64_OBJECTS = is_linux_mips_n64.$(OBJEXT)
+is_linux_mips_n64_LDADD = $(LDADD)
+is_linux_mips_n64_DEPENDENCIES = libtests.a
 kcmp_SOURCES = kcmp.c
 kcmp_OBJECTS = kcmp.$(OBJEXT)
 kcmp_LDADD = $(LDADD)
@@ -1091,6 +1140,10 @@
 netlink_audit_OBJECTS = netlink_audit.$(OBJEXT)
 netlink_audit_LDADD = $(LDADD)
 netlink_audit_DEPENDENCIES = libtests.a
+netlink_crypto_SOURCES = netlink_crypto.c
+netlink_crypto_OBJECTS = netlink_crypto.$(OBJEXT)
+netlink_crypto_LDADD = $(LDADD)
+netlink_crypto_DEPENDENCIES = libtests.a
 netlink_generic_SOURCES = netlink_generic.c
 netlink_generic_OBJECTS = netlink_generic.$(OBJEXT)
 netlink_generic_LDADD = $(LDADD)
@@ -1099,6 +1152,10 @@
 netlink_inet_diag_OBJECTS = netlink_inet_diag.$(OBJEXT)
 netlink_inet_diag_LDADD = $(LDADD)
 netlink_inet_diag_DEPENDENCIES = libtests.a
+netlink_kobject_uevent_SOURCES = netlink_kobject_uevent.c
+netlink_kobject_uevent_OBJECTS = netlink_kobject_uevent.$(OBJEXT)
+netlink_kobject_uevent_LDADD = $(LDADD)
+netlink_kobject_uevent_DEPENDENCIES = libtests.a
 netlink_netfilter_SOURCES = netlink_netfilter.c
 netlink_netfilter_OBJECTS = netlink_netfilter.$(OBJEXT)
 netlink_netfilter_LDADD = $(LDADD)
@@ -1139,14 +1196,103 @@
 nlattr_OBJECTS = nlattr.$(OBJEXT)
 nlattr_LDADD = $(LDADD)
 nlattr_DEPENDENCIES = libtests.a
+nlattr_br_port_msg_SOURCES = nlattr_br_port_msg.c
+nlattr_br_port_msg_OBJECTS = nlattr_br_port_msg.$(OBJEXT)
+nlattr_br_port_msg_LDADD = $(LDADD)
+nlattr_br_port_msg_DEPENDENCIES = libtests.a
+nlattr_crypto_user_alg_SOURCES = nlattr_crypto_user_alg.c
+nlattr_crypto_user_alg_OBJECTS = nlattr_crypto_user_alg.$(OBJEXT)
+nlattr_crypto_user_alg_LDADD = $(LDADD)
+nlattr_crypto_user_alg_DEPENDENCIES = libtests.a
+nlattr_dcbmsg_SOURCES = nlattr_dcbmsg.c
+nlattr_dcbmsg_OBJECTS = nlattr_dcbmsg.$(OBJEXT)
+nlattr_dcbmsg_LDADD = $(LDADD)
+nlattr_dcbmsg_DEPENDENCIES = libtests.a
+nlattr_fib_rule_hdr_SOURCES = nlattr_fib_rule_hdr.c
+nlattr_fib_rule_hdr_OBJECTS = nlattr_fib_rule_hdr.$(OBJEXT)
+nlattr_fib_rule_hdr_LDADD = $(LDADD)
+nlattr_fib_rule_hdr_DEPENDENCIES = libtests.a
+nlattr_ifaddrlblmsg_SOURCES = nlattr_ifaddrlblmsg.c
+nlattr_ifaddrlblmsg_OBJECTS = nlattr_ifaddrlblmsg.$(OBJEXT)
+nlattr_ifaddrlblmsg_LDADD = $(LDADD)
+nlattr_ifaddrlblmsg_DEPENDENCIES = libtests.a
+nlattr_ifaddrmsg_SOURCES = nlattr_ifaddrmsg.c
+nlattr_ifaddrmsg_OBJECTS = nlattr_ifaddrmsg.$(OBJEXT)
+nlattr_ifaddrmsg_LDADD = $(LDADD)
+nlattr_ifaddrmsg_DEPENDENCIES = libtests.a
+nlattr_ifinfomsg_SOURCES = nlattr_ifinfomsg.c
+nlattr_ifinfomsg_OBJECTS = nlattr_ifinfomsg.$(OBJEXT)
+nlattr_ifinfomsg_LDADD = $(LDADD)
+nlattr_ifinfomsg_DEPENDENCIES = libtests.a
+nlattr_ifla_brport_SOURCES = nlattr_ifla_brport.c
+nlattr_ifla_brport_OBJECTS = nlattr_ifla_brport.$(OBJEXT)
+nlattr_ifla_brport_LDADD = $(LDADD)
+nlattr_ifla_brport_DEPENDENCIES = libtests.a
+nlattr_ifla_port_SOURCES = nlattr_ifla_port.c
+nlattr_ifla_port_OBJECTS = nlattr_ifla_port.$(OBJEXT)
+nlattr_ifla_port_LDADD = $(LDADD)
+nlattr_ifla_port_DEPENDENCIES = libtests.a
+nlattr_ifla_xdp_SOURCES = nlattr_ifla_xdp.c
+nlattr_ifla_xdp_OBJECTS = nlattr_ifla_xdp.$(OBJEXT)
+nlattr_ifla_xdp_LDADD = $(LDADD)
+nlattr_ifla_xdp_DEPENDENCIES = libtests.a
 nlattr_inet_diag_msg_SOURCES = nlattr_inet_diag_msg.c
 nlattr_inet_diag_msg_OBJECTS = nlattr_inet_diag_msg.$(OBJEXT)
 nlattr_inet_diag_msg_LDADD = $(LDADD)
 nlattr_inet_diag_msg_DEPENDENCIES = libtests.a
+nlattr_inet_diag_req_compat_SOURCES = nlattr_inet_diag_req_compat.c
+nlattr_inet_diag_req_compat_OBJECTS =  \
+	nlattr_inet_diag_req_compat.$(OBJEXT)
+nlattr_inet_diag_req_compat_LDADD = $(LDADD)
+nlattr_inet_diag_req_compat_DEPENDENCIES = libtests.a
+nlattr_inet_diag_req_v2_SOURCES = nlattr_inet_diag_req_v2.c
+nlattr_inet_diag_req_v2_OBJECTS = nlattr_inet_diag_req_v2.$(OBJEXT)
+nlattr_inet_diag_req_v2_LDADD = $(LDADD)
+nlattr_inet_diag_req_v2_DEPENDENCIES = libtests.a
+nlattr_ndmsg_SOURCES = nlattr_ndmsg.c
+nlattr_ndmsg_OBJECTS = nlattr_ndmsg.$(OBJEXT)
+nlattr_ndmsg_LDADD = $(LDADD)
+nlattr_ndmsg_DEPENDENCIES = libtests.a
+nlattr_ndtmsg_SOURCES = nlattr_ndtmsg.c
+nlattr_ndtmsg_OBJECTS = nlattr_ndtmsg.$(OBJEXT)
+nlattr_ndtmsg_LDADD = $(LDADD)
+nlattr_ndtmsg_DEPENDENCIES = libtests.a
+nlattr_netconfmsg_SOURCES = nlattr_netconfmsg.c
+nlattr_netconfmsg_OBJECTS = nlattr_netconfmsg.$(OBJEXT)
+nlattr_netconfmsg_LDADD = $(LDADD)
+nlattr_netconfmsg_DEPENDENCIES = libtests.a
 nlattr_netlink_diag_msg_SOURCES = nlattr_netlink_diag_msg.c
 nlattr_netlink_diag_msg_OBJECTS = nlattr_netlink_diag_msg.$(OBJEXT)
 nlattr_netlink_diag_msg_LDADD = $(LDADD)
 nlattr_netlink_diag_msg_DEPENDENCIES = libtests.a
+nlattr_nlmsgerr_SOURCES = nlattr_nlmsgerr.c
+nlattr_nlmsgerr_OBJECTS = nlattr_nlmsgerr.$(OBJEXT)
+nlattr_nlmsgerr_LDADD = $(LDADD)
+nlattr_nlmsgerr_DEPENDENCIES = libtests.a
+nlattr_packet_diag_msg_SOURCES = nlattr_packet_diag_msg.c
+nlattr_packet_diag_msg_OBJECTS = nlattr_packet_diag_msg.$(OBJEXT)
+nlattr_packet_diag_msg_LDADD = $(LDADD)
+nlattr_packet_diag_msg_DEPENDENCIES = libtests.a
+nlattr_rtgenmsg_SOURCES = nlattr_rtgenmsg.c
+nlattr_rtgenmsg_OBJECTS = nlattr_rtgenmsg.$(OBJEXT)
+nlattr_rtgenmsg_LDADD = $(LDADD)
+nlattr_rtgenmsg_DEPENDENCIES = libtests.a
+nlattr_rtmsg_SOURCES = nlattr_rtmsg.c
+nlattr_rtmsg_OBJECTS = nlattr_rtmsg.$(OBJEXT)
+nlattr_rtmsg_LDADD = $(LDADD)
+nlattr_rtmsg_DEPENDENCIES = libtests.a
+nlattr_smc_diag_msg_SOURCES = nlattr_smc_diag_msg.c
+nlattr_smc_diag_msg_OBJECTS = nlattr_smc_diag_msg.$(OBJEXT)
+nlattr_smc_diag_msg_LDADD = $(LDADD)
+nlattr_smc_diag_msg_DEPENDENCIES = libtests.a
+nlattr_tcamsg_SOURCES = nlattr_tcamsg.c
+nlattr_tcamsg_OBJECTS = nlattr_tcamsg.$(OBJEXT)
+nlattr_tcamsg_LDADD = $(LDADD)
+nlattr_tcamsg_DEPENDENCIES = libtests.a
+nlattr_tcmsg_SOURCES = nlattr_tcmsg.c
+nlattr_tcmsg_OBJECTS = nlattr_tcmsg.$(OBJEXT)
+nlattr_tcmsg_LDADD = $(LDADD)
+nlattr_tcmsg_DEPENDENCIES = libtests.a
 nlattr_unix_diag_msg_SOURCES = nlattr_unix_diag_msg.c
 nlattr_unix_diag_msg_OBJECTS = nlattr_unix_diag_msg.$(OBJEXT)
 nlattr_unix_diag_msg_LDADD = $(LDADD)
@@ -1305,10 +1451,39 @@
 print_maxfd_OBJECTS = print_maxfd.$(OBJEXT)
 print_maxfd_LDADD = $(LDADD)
 print_maxfd_DEPENDENCIES = libtests.a
+printpath_umovestr_SOURCES = printpath-umovestr.c
+printpath_umovestr_OBJECTS = printpath-umovestr.$(OBJEXT)
+printpath_umovestr_LDADD = $(LDADD)
+printpath_umovestr_DEPENDENCIES = libtests.a
+printpath_umovestr_peekdata_SOURCES = printpath-umovestr-peekdata.c
+printpath_umovestr_peekdata_OBJECTS =  \
+	printpath-umovestr-peekdata.$(OBJEXT)
+printpath_umovestr_peekdata_LDADD = $(LDADD)
+printpath_umovestr_peekdata_DEPENDENCIES = libtests.a
+printpath_umovestr_undumpable_SOURCES =  \
+	printpath-umovestr-undumpable.c
+printpath_umovestr_undumpable_OBJECTS =  \
+	printpath-umovestr-undumpable.$(OBJEXT)
+printpath_umovestr_undumpable_LDADD = $(LDADD)
+printpath_umovestr_undumpable_DEPENDENCIES = libtests.a
 printstr_SOURCES = printstr.c
 printstr_OBJECTS = printstr.$(OBJEXT)
 printstr_LDADD = $(LDADD)
 printstr_DEPENDENCIES = libtests.a
+printstrn_umoven_SOURCES = printstrn-umoven.c
+printstrn_umoven_OBJECTS = printstrn-umoven.$(OBJEXT)
+printstrn_umoven_LDADD = $(LDADD)
+printstrn_umoven_DEPENDENCIES = libtests.a
+printstrn_umoven_peekdata_SOURCES = printstrn-umoven-peekdata.c
+printstrn_umoven_peekdata_OBJECTS =  \
+	printstrn-umoven-peekdata.$(OBJEXT)
+printstrn_umoven_peekdata_LDADD = $(LDADD)
+printstrn_umoven_peekdata_DEPENDENCIES = libtests.a
+printstrn_umoven_undumpable_SOURCES = printstrn-umoven-undumpable.c
+printstrn_umoven_undumpable_OBJECTS =  \
+	printstrn-umoven-undumpable.$(OBJEXT)
+printstrn_umoven_undumpable_LDADD = $(LDADD)
+printstrn_umoven_undumpable_DEPENDENCIES = libtests.a
 prlimit64_SOURCES = prlimit64.c
 prlimit64_OBJECTS = prlimit64.$(OBJEXT)
 prlimit64_LDADD = $(LDADD)
@@ -1685,6 +1860,18 @@
 sleep_OBJECTS = sleep.$(OBJEXT)
 sleep_LDADD = $(LDADD)
 sleep_DEPENDENCIES = libtests.a
+so_linger_SOURCES = so_linger.c
+so_linger_OBJECTS = so_linger.$(OBJEXT)
+so_linger_LDADD = $(LDADD)
+so_linger_DEPENDENCIES = libtests.a
+so_peercred_SOURCES = so_peercred.c
+so_peercred_OBJECTS = so_peercred.$(OBJEXT)
+so_peercred_LDADD = $(LDADD)
+so_peercred_DEPENDENCIES = libtests.a
+sock_filter_v_SOURCES = sock_filter-v.c
+sock_filter_v_OBJECTS = sock_filter-v.$(OBJEXT)
+sock_filter_v_LDADD = $(LDADD)
+sock_filter_v_DEPENDENCIES = libtests.a
 socketcall_SOURCES = socketcall.c
 socketcall_OBJECTS = socketcall.$(OBJEXT)
 socketcall_LDADD = $(LDADD)
@@ -1981,16 +2168,17 @@
 SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
 	access.c acct.c add_key.c adjtimex.c aio.c alarm.c answer.c \
 	attach-f-p.c attach-f-p-cmd.c attach-p-cmd-cmd.c \
-	attach-p-cmd-p.c block_reset_raise_run.c bpf.c brk.c btrfs.c \
-	caps.c caps-abbrev.c chmod.c chown.c chown32.c chroot.c \
-	clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	copy_file_range.c count-f.c creat.c delete_module.c dup.c \
-	dup2.c dup3.c epoll_create.c epoll_create1.c epoll_ctl.c \
-	epoll_pwait.c epoll_wait.c erestartsys.c eventfd.c execve.c \
-	execve-v.c execveat.c execveat-v.c faccessat.c fadvise64.c \
-	fadvise64_64.c fallocate.c fanotify_init.c fanotify_mark.c \
-	fchdir.c fchmod.c fchmodat.c fchown.c fchown32.c fchownat.c \
-	fcntl.c fcntl64.c fdatasync.c file_handle.c file_ioctl.c \
+	attach-p-cmd-p.c block_reset_raise_run.c bpf.c bpf-v.c brk.c \
+	btrfs.c caps.c caps-abbrev.c chmod.c chown.c chown32.c \
+	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
+	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
+	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
+	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
+	fallocate.c fanotify_init.c fanotify_mark.c fchdir.c fchmod.c \
+	fchmodat.c fchown.c fchown32.c fchownat.c fcntl.c fcntl64.c \
+	fdatasync.c fflush.c file_handle.c file_ioctl.c \
 	filter-unavailable.c finit_module.c flock.c fork-f.c fstat.c \
 	fstat64.c fstatat64.c fstatfs.c fstatfs64.c fsync.c \
 	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
@@ -1999,7 +2187,7 @@
 	getgroups.c getgroups32.c getpeername.c getpgrp.c getpid.c \
 	getppid.c getrandom.c getresgid.c getresgid32.c getresuid.c \
 	getresuid32.c getrlimit.c getrusage.c getsid.c getsockname.c \
-	gettid.c getuid.c getuid32.c getxxid.c inet-cmsg.c \
+	gettid.c getuid.c getuid32.c getxxid.c group_req.c inet-cmsg.c \
 	init_module.c inotify.c inotify_init1.c int_0x80.c ioctl.c \
 	ioctl_block.c ioctl_dm.c ioctl_dm-v.c ioctl_evdev.c \
 	ioctl_evdev-v.c ioctl_loop.c ioctl_loop-nv.c ioctl_loop-v.c \
@@ -2007,56 +2195,69 @@
 	ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
 	ioctl_sock_gifconf.c ioctl_uffdio.c ioctl_v4l2.c ioperm.c \
 	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msgbuf.c \
-	ipc_sem.c ipc_shm.c kcmp.c kexec_file_load.c kexec_load.c \
-	keyctl.c kill.c ksysent.c lchown.c lchown32.c link.c linkat.c \
-	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
-	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
-	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
-	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
-	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
-	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
-	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
-	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
-	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
-	netlink_audit.c netlink_generic.c netlink_inet_diag.c \
-	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
-	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
-	netlink_unix_diag.c netlink_xfrm.c newfstatat.c nlattr.c \
-	nlattr_inet_diag_msg.c nlattr_netlink_diag_msg.c \
-	nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c oldfstat.c \
-	oldlstat.c oldselect.c oldstat.c open.c openat.c osf_utimes.c \
-	pause.c pc.c perf_event_open.c perf_event_open_nonverbose.c \
-	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
-	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
-	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
-	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c \
+	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
+	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
+	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
+	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
+	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
+	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
+	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
+	munlockall.c nanosleep.c net-accept-connect.c \
+	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
+	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
+	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
+	netlink_kobject_uevent.c netlink_netfilter.c \
+	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
+	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
+	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
+	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
+	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
+	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
+	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
+	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
+	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
+	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
+	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
+	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
+	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
+	osf_utimes.c pause.c pc.c perf_event_open.c \
+	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
+	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
+	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
+	prctl-dumpable.c prctl-name.c prctl-no-args.c \
+	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
-	preadv2-pwritev2.c print_maxfd.c printstr.c prlimit64.c \
-	process_vm_readv.c process_vm_writev.c pselect6.c ptrace.c \
-	pwritev.c qual_fault.c qual_inject-error-signal.c \
-	qual_inject-retval.c qual_inject-signal.c qual_signal.c \
-	quotactl.c quotactl-v.c quotactl-xfs.c quotactl-xfs-v.c \
-	read-write.c readahead.c readdir.c readlink.c readlinkat.c \
-	readv.c reboot.c recvfrom.c recvmmsg-timeout.c recvmsg.c \
-	redirect-fds.c remap_file_pages.c rename.c renameat.c \
-	renameat2.c request_key.c restart_syscall.c rmdir.c \
-	rt_sigaction.c rt_sigpending.c rt_sigprocmask.c \
-	rt_sigqueueinfo.c rt_sigreturn.c rt_sigsuspend.c \
-	rt_sigtimedwait.c rt_tgsigqueueinfo.c run_expect_termsig.c \
-	sched_get_priority_mxx.c sched_rr_get_interval.c \
-	sched_xetaffinity.c sched_xetattr.c sched_xetparam.c \
-	sched_xetscheduler.c sched_yield.c scm_rights.c \
-	seccomp-filter.c seccomp-filter-v.c seccomp-strict.c select.c \
-	semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c setdomainname.c setfsgid.c setfsgid32.c \
-	setfsuid.c setfsuid32.c setgid.c setgid32.c setgroups.c \
-	setgroups32.c sethostname.c setns.c setregid.c setregid32.c \
-	setresgid.c setresgid32.c setresuid.c setresuid32.c setreuid.c \
-	setreuid32.c setrlimit.c setuid.c setuid32.c shmxt.c \
-	shutdown.c sigaction.c sigaltstack.c siginfo.c signal.c \
-	signal_receive.c signalfd4.c sigpending.c sigprocmask.c \
-	sigreturn.c sigsuspend.c sleep.c socketcall.c splice.c \
+	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
+	printpath-umovestr-peekdata.c printpath-umovestr-undumpable.c \
+	printstr.c printstrn-umoven.c printstrn-umoven-peekdata.c \
+	printstrn-umoven-undumpable.c prlimit64.c process_vm_readv.c \
+	process_vm_writev.c pselect6.c ptrace.c pwritev.c qual_fault.c \
+	qual_inject-error-signal.c qual_inject-retval.c \
+	qual_inject-signal.c qual_signal.c quotactl.c quotactl-v.c \
+	quotactl-xfs.c quotactl-xfs-v.c read-write.c readahead.c \
+	readdir.c readlink.c readlinkat.c readv.c reboot.c recvfrom.c \
+	recvmmsg-timeout.c recvmsg.c redirect-fds.c remap_file_pages.c \
+	rename.c renameat.c renameat2.c request_key.c \
+	restart_syscall.c rmdir.c rt_sigaction.c rt_sigpending.c \
+	rt_sigprocmask.c rt_sigqueueinfo.c rt_sigreturn.c \
+	rt_sigsuspend.c rt_sigtimedwait.c rt_tgsigqueueinfo.c \
+	run_expect_termsig.c sched_get_priority_mxx.c \
+	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
+	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
+	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
+	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
+	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	setfsgid32.c setfsuid.c setfsuid32.c setgid.c setgid32.c \
+	setgroups.c setgroups32.c sethostname.c setns.c setregid.c \
+	setregid32.c setresgid.c setresgid32.c setresuid.c \
+	setresuid32.c setreuid.c setreuid32.c setrlimit.c setuid.c \
+	setuid32.c shmxt.c shutdown.c sigaction.c sigaltstack.c \
+	siginfo.c signal.c signal_receive.c signalfd4.c sigpending.c \
+	sigprocmask.c sigreturn.c sigsuspend.c sleep.c so_linger.c \
+	so_peercred.c sock_filter-v.c socketcall.c splice.c \
 	$(stack_fcall_SOURCES) stat.c stat64.c statfs.c statfs64.c \
 	statx.c swap.c sxetmask.c symlink.c symlinkat.c sync.c \
 	sync_file_range.c sync_file_range2.c sysinfo.c syslog.c tee.c \
@@ -2073,16 +2274,17 @@
 DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
 	access.c acct.c add_key.c adjtimex.c aio.c alarm.c answer.c \
 	attach-f-p.c attach-f-p-cmd.c attach-p-cmd-cmd.c \
-	attach-p-cmd-p.c block_reset_raise_run.c bpf.c brk.c btrfs.c \
-	caps.c caps-abbrev.c chmod.c chown.c chown32.c chroot.c \
-	clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	copy_file_range.c count-f.c creat.c delete_module.c dup.c \
-	dup2.c dup3.c epoll_create.c epoll_create1.c epoll_ctl.c \
-	epoll_pwait.c epoll_wait.c erestartsys.c eventfd.c execve.c \
-	execve-v.c execveat.c execveat-v.c faccessat.c fadvise64.c \
-	fadvise64_64.c fallocate.c fanotify_init.c fanotify_mark.c \
-	fchdir.c fchmod.c fchmodat.c fchown.c fchown32.c fchownat.c \
-	fcntl.c fcntl64.c fdatasync.c file_handle.c file_ioctl.c \
+	attach-p-cmd-p.c block_reset_raise_run.c bpf.c bpf-v.c brk.c \
+	btrfs.c caps.c caps-abbrev.c chmod.c chown.c chown32.c \
+	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
+	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
+	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
+	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
+	fallocate.c fanotify_init.c fanotify_mark.c fchdir.c fchmod.c \
+	fchmodat.c fchown.c fchown32.c fchownat.c fcntl.c fcntl64.c \
+	fdatasync.c fflush.c file_handle.c file_ioctl.c \
 	filter-unavailable.c finit_module.c flock.c fork-f.c fstat.c \
 	fstat64.c fstatat64.c fstatfs.c fstatfs64.c fsync.c \
 	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
@@ -2091,7 +2293,7 @@
 	getgroups.c getgroups32.c getpeername.c getpgrp.c getpid.c \
 	getppid.c getrandom.c getresgid.c getresgid32.c getresuid.c \
 	getresuid32.c getrlimit.c getrusage.c getsid.c getsockname.c \
-	gettid.c getuid.c getuid32.c getxxid.c inet-cmsg.c \
+	gettid.c getuid.c getuid32.c getxxid.c group_req.c inet-cmsg.c \
 	init_module.c inotify.c inotify_init1.c int_0x80.c ioctl.c \
 	ioctl_block.c ioctl_dm.c ioctl_dm-v.c ioctl_evdev.c \
 	ioctl_evdev-v.c ioctl_loop.c ioctl_loop-nv.c ioctl_loop-v.c \
@@ -2099,56 +2301,69 @@
 	ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
 	ioctl_sock_gifconf.c ioctl_uffdio.c ioctl_v4l2.c ioperm.c \
 	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msgbuf.c \
-	ipc_sem.c ipc_shm.c kcmp.c kexec_file_load.c kexec_load.c \
-	keyctl.c kill.c ksysent.c lchown.c lchown32.c link.c linkat.c \
-	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
-	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
-	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
-	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
-	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
-	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
-	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
-	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
-	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
-	netlink_audit.c netlink_generic.c netlink_inet_diag.c \
-	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
-	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
-	netlink_unix_diag.c netlink_xfrm.c newfstatat.c nlattr.c \
-	nlattr_inet_diag_msg.c nlattr_netlink_diag_msg.c \
-	nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c oldfstat.c \
-	oldlstat.c oldselect.c oldstat.c open.c openat.c osf_utimes.c \
-	pause.c pc.c perf_event_open.c perf_event_open_nonverbose.c \
-	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
-	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
-	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
-	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c \
+	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
+	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
+	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
+	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
+	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
+	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
+	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
+	munlockall.c nanosleep.c net-accept-connect.c \
+	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
+	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
+	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
+	netlink_kobject_uevent.c netlink_netfilter.c \
+	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
+	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
+	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
+	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
+	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
+	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
+	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
+	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
+	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
+	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
+	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
+	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
+	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
+	osf_utimes.c pause.c pc.c perf_event_open.c \
+	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
+	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
+	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
+	prctl-dumpable.c prctl-name.c prctl-no-args.c \
+	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
-	preadv2-pwritev2.c print_maxfd.c printstr.c prlimit64.c \
-	process_vm_readv.c process_vm_writev.c pselect6.c ptrace.c \
-	pwritev.c qual_fault.c qual_inject-error-signal.c \
-	qual_inject-retval.c qual_inject-signal.c qual_signal.c \
-	quotactl.c quotactl-v.c quotactl-xfs.c quotactl-xfs-v.c \
-	read-write.c readahead.c readdir.c readlink.c readlinkat.c \
-	readv.c reboot.c recvfrom.c recvmmsg-timeout.c recvmsg.c \
-	redirect-fds.c remap_file_pages.c rename.c renameat.c \
-	renameat2.c request_key.c restart_syscall.c rmdir.c \
-	rt_sigaction.c rt_sigpending.c rt_sigprocmask.c \
-	rt_sigqueueinfo.c rt_sigreturn.c rt_sigsuspend.c \
-	rt_sigtimedwait.c rt_tgsigqueueinfo.c run_expect_termsig.c \
-	sched_get_priority_mxx.c sched_rr_get_interval.c \
-	sched_xetaffinity.c sched_xetattr.c sched_xetparam.c \
-	sched_xetscheduler.c sched_yield.c scm_rights.c \
-	seccomp-filter.c seccomp-filter-v.c seccomp-strict.c select.c \
-	semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c setdomainname.c setfsgid.c setfsgid32.c \
-	setfsuid.c setfsuid32.c setgid.c setgid32.c setgroups.c \
-	setgroups32.c sethostname.c setns.c setregid.c setregid32.c \
-	setresgid.c setresgid32.c setresuid.c setresuid32.c setreuid.c \
-	setreuid32.c setrlimit.c setuid.c setuid32.c shmxt.c \
-	shutdown.c sigaction.c sigaltstack.c siginfo.c signal.c \
-	signal_receive.c signalfd4.c sigpending.c sigprocmask.c \
-	sigreturn.c sigsuspend.c sleep.c socketcall.c splice.c \
+	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
+	printpath-umovestr-peekdata.c printpath-umovestr-undumpable.c \
+	printstr.c printstrn-umoven.c printstrn-umoven-peekdata.c \
+	printstrn-umoven-undumpable.c prlimit64.c process_vm_readv.c \
+	process_vm_writev.c pselect6.c ptrace.c pwritev.c qual_fault.c \
+	qual_inject-error-signal.c qual_inject-retval.c \
+	qual_inject-signal.c qual_signal.c quotactl.c quotactl-v.c \
+	quotactl-xfs.c quotactl-xfs-v.c read-write.c readahead.c \
+	readdir.c readlink.c readlinkat.c readv.c reboot.c recvfrom.c \
+	recvmmsg-timeout.c recvmsg.c redirect-fds.c remap_file_pages.c \
+	rename.c renameat.c renameat2.c request_key.c \
+	restart_syscall.c rmdir.c rt_sigaction.c rt_sigpending.c \
+	rt_sigprocmask.c rt_sigqueueinfo.c rt_sigreturn.c \
+	rt_sigsuspend.c rt_sigtimedwait.c rt_tgsigqueueinfo.c \
+	run_expect_termsig.c sched_get_priority_mxx.c \
+	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
+	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
+	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
+	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
+	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	setfsgid32.c setfsuid.c setfsuid32.c setgid.c setgid32.c \
+	setgroups.c setgroups32.c sethostname.c setns.c setregid.c \
+	setregid32.c setresgid.c setresgid32.c setresuid.c \
+	setresuid32.c setreuid.c setreuid32.c setrlimit.c setuid.c \
+	setuid32.c shmxt.c shutdown.c sigaction.c sigaltstack.c \
+	siginfo.c signal.c signal_receive.c signalfd4.c sigpending.c \
+	sigprocmask.c sigreturn.c sigsuspend.c sleep.c so_linger.c \
+	so_peercred.c sock_filter-v.c socketcall.c splice.c \
 	$(stack_fcall_SOURCES) stat.c stat64.c statfs.c statfs64.c \
 	statx.c swap.c sxetmask.c symlink.c symlinkat.c sync.c \
 	sync_file_range.c sync_file_range2.c sysinfo.c syslog.c tee.c \
@@ -2167,7 +2382,10 @@
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-am__extra_recursive_targets = check-valgrind-recursive
+am__extra_recursive_targets = check-valgrind-recursive \
+	check-valgrind-memcheck-recursive \
+	check-valgrind-helgrind-recursive check-valgrind-drd-recursive \
+	check-valgrind-sgcheck-recursive
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
@@ -2410,6 +2628,7 @@
 CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
 CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
 CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
 COPYRIGHT_YEAR = @COPYRIGHT_YEAR@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
@@ -2444,6 +2663,7 @@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANPAGE_DATE = @MANPAGE_DATE@
 MIPS_ABI = @MIPS_ABI@
 MKDIR_P = @MKDIR_P@
 OBJEXT = @OBJEXT@
@@ -2551,6 +2771,7 @@
 	get_sigset_size.c \
 	hexdump_strdup.c \
 	hexquote_strndup.c \
+	ifindex.c \
 	inode_of_sockfd.c \
 	libmmsg.c \
 	libsocketcall.c \
@@ -2564,7 +2785,12 @@
 	skip_unavailable.c \
 	sprintrc.c \
 	tail_alloc.c \
+	test_netlink.h \
 	test_nlattr.h \
+	test_printpath.c \
+	test_printstrn.c \
+	test_ucopy.c \
+	test_ucopy.h \
 	tests.h \
 	tprintf.c \
 	# end of libtests_a_SOURCES
@@ -2585,6 +2811,7 @@
   aio \
   alarm \
   bpf \
+  bpf-v \
   brk \
   btrfs \
   caps \
@@ -2625,6 +2852,7 @@
   fcntl \
   fcntl64 \
   fdatasync \
+  fflush \
   file_handle \
   file_ioctl \
   finit_module \
@@ -2668,6 +2896,7 @@
   getuid \
   getuid32 \
   getxxid \
+  group_req \
   inet-cmsg \
   init_module \
   inotify \
@@ -2742,7 +2971,9 @@
   net-yy-netlink \
   net-yy-unix \
   netlink_audit \
+  netlink_crypto \
   netlink_generic \
+  netlink_kobject_uevent \
   netlink_netfilter \
   netlink_protocol \
   netlink_route \
@@ -2751,8 +2982,30 @@
   netlink_xfrm \
   newfstatat \
   nlattr \
+  nlattr_crypto_user_alg \
+  nlattr_br_port_msg \
+  nlattr_dcbmsg \
+  nlattr_fib_rule_hdr \
+  nlattr_ifaddrlblmsg \
+  nlattr_ifaddrmsg \
+  nlattr_ifinfomsg \
+  nlattr_ifla_brport \
+  nlattr_ifla_port \
+  nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
+  nlattr_inet_diag_req_compat \
+  nlattr_inet_diag_req_v2 \
+  nlattr_ndmsg \
+  nlattr_ndtmsg \
+  nlattr_netconfmsg \
   nlattr_netlink_diag_msg \
+  nlattr_nlmsgerr \
+  nlattr_packet_diag_msg \
+  nlattr_rtgenmsg \
+  nlattr_rtmsg \
+  nlattr_smc_diag_msg \
+  nlattr_tcamsg \
+  nlattr_tcmsg \
   nlattr_unix_diag_msg \
   old_mmap \
   oldfstat \
@@ -2784,7 +3037,13 @@
   preadv \
   preadv-pwritev \
   preadv2-pwritev2 \
+  printpath-umovestr \
+  printpath-umovestr-peekdata \
+  printpath-umovestr-undumpable \
   printstr \
+  printstrn-umoven \
+  printstrn-umoven-peekdata \
+  printstrn-umoven-undumpable \
   prlimit64 \
   process_vm_readv \
   process_vm_writev \
@@ -2863,6 +3122,9 @@
   sigprocmask \
   sigreturn \
   sigsuspend \
+  so_linger \
+  so_peercred \
+  sock_filter-v \
   socketcall \
   splice \
   stat \
@@ -2954,35 +3216,36 @@
 GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test \
 	access.gen.test acct.gen.test add_key.gen.test \
 	adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test \
-	btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test \
-	chroot.gen.test clock.gen.test clock_adjtime.gen.test \
-	clock_nanosleep.gen.test clock_xettime.gen.test \
-	copy_file_range.gen.test creat.gen.test delete_module.gen.test \
-	dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test \
-	epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test \
-	epoll_wait.gen.test erestartsys.gen.test execveat.gen.test \
-	execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test \
-	fallocate.gen.test fanotify_init.gen.test \
-	fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test \
-	fchmodat.gen.test fchown.gen.test fchown32.gen.test \
-	fchownat.gen.test fcntl.gen.test fcntl64.gen.test \
-	fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test \
-	finit_module.gen.test flock.gen.test fork-f.gen.test \
-	fstat.gen.test fstat64.gen.test fstatat64.gen.test \
-	fstatfs.gen.test fstatfs64.gen.test fsync.gen.test \
-	ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test \
-	get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test \
-	getdents.gen.test getdents64.gen.test getegid.gen.test \
-	getegid32.gen.test geteuid.gen.test geteuid32.gen.test \
-	getgid.gen.test getgid32.gen.test getgroups.gen.test \
-	getgroups32.gen.test getpeername.gen.test getpgrp.gen.test \
-	getpid.gen.test getppid.gen.test getrandom.gen.test \
-	getresgid.gen.test getresgid32.gen.test getresuid.gen.test \
-	getresuid32.gen.test getrlimit.gen.test getrusage.gen.test \
-	getsid.gen.test getsockname.gen.test gettid.gen.test \
-	getuid32.gen.test getxxid.gen.test inet-cmsg.gen.test \
-	init_module.gen.test inotify.gen.test inotify_init1.gen.test \
-	int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test \
+	bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test \
+	chown32.gen.test chroot.gen.test clock.gen.test \
+	clock_adjtime.gen.test clock_nanosleep.gen.test \
+	clock_xettime.gen.test copy_file_range.gen.test creat.gen.test \
+	delete_module.gen.test dup.gen.test dup2.gen.test \
+	dup3.gen.test epoll_create.gen.test epoll_create1.gen.test \
+	epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test \
+	erestartsys.gen.test execveat.gen.test execveat-v.gen.test \
+	faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test \
+	fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test \
+	fchmod.gen.test fchmodat.gen.test fchown.gen.test \
+	fchown32.gen.test fchownat.gen.test fcntl.gen.test \
+	fcntl64.gen.test fdatasync.gen.test file_handle.gen.test \
+	file_ioctl.gen.test finit_module.gen.test flock.gen.test \
+	fork-f.gen.test fstat.gen.test fstat64.gen.test \
+	fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test \
+	fsync.gen.test ftruncate.gen.test ftruncate64.gen.test \
+	futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test \
+	getcwd.gen.test getdents.gen.test getdents64.gen.test \
+	getegid.gen.test getegid32.gen.test geteuid.gen.test \
+	geteuid32.gen.test getgid.gen.test getgid32.gen.test \
+	getgroups.gen.test getgroups32.gen.test getpeername.gen.test \
+	getpgrp.gen.test getpid.gen.test getppid.gen.test \
+	getrandom.gen.test getresgid.gen.test getresgid32.gen.test \
+	getresuid.gen.test getresuid32.gen.test getrlimit.gen.test \
+	getrusage.gen.test getsid.gen.test getsockname.gen.test \
+	gettid.gen.test getuid32.gen.test getxxid.gen.test \
+	group_req.gen.test inet-cmsg.gen.test init_module.gen.test \
+	inotify.gen.test inotify_init1.gen.test int_0x80.gen.test \
+	ioctl_block.gen.test ioctl_evdev.gen.test \
 	ioctl_evdev-v.gen.test ioctl_loop.gen.test \
 	ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test \
 	ioctl_rtc-v.gen.test ioctl_scsi.gen.test \
@@ -3006,11 +3269,24 @@
 	msg_control-v.gen.test msg_name.gen.test munlockall.gen.test \
 	nanosleep.gen.test net-icmp_filter.gen.test \
 	net-sockaddr.gen.test netlink_audit.gen.test \
-	netlink_generic.gen.test netlink_netfilter.gen.test \
+	netlink_crypto.gen.test netlink_generic.gen.test \
+	netlink_kobject_uevent.gen.test netlink_netfilter.gen.test \
 	netlink_protocol.gen.test netlink_route.gen.test \
 	netlink_selinux.gen.test netlink_xfrm.gen.test \
 	newfstatat.gen.test nlattr.gen.test \
-	nlattr_inet_diag_msg.gen.test nlattr_netlink_diag_msg.gen.test \
+	nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test \
+	nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test \
+	nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test \
+	nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test \
+	nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test \
+	nlattr_inet_diag_msg.gen.test \
+	nlattr_inet_diag_req_compat.gen.test \
+	nlattr_inet_diag_req_v2.gen.test nlattr_ndmsg.gen.test \
+	nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test \
+	nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test \
+	nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test \
+	nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test \
+	nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
 	nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
 	oldfstat.gen.test oldlstat.gen.test oldstat.gen.test \
 	open.gen.test openat.gen.test osf_utimes.gen.test \
@@ -3020,7 +3296,12 @@
 	pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test \
 	ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test \
 	preadv.gen.test preadv-pwritev.gen.test \
-	preadv2-pwritev2.gen.test printstr.gen.test prlimit64.gen.test \
+	preadv2-pwritev2.gen.test printstr.gen.test \
+	printpath-umovestr.gen.test \
+	printpath-umovestr-peekdata.gen.test \
+	printpath-umovestr-undumpable.gen.test \
+	printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test \
+	printstrn-umoven-undumpable.gen.test prlimit64.gen.test \
 	process_vm_readv.gen.test process_vm_writev.gen.test \
 	pselect6.gen.test ptrace.gen.test pwritev.gen.test \
 	quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test \
@@ -3051,6 +3332,7 @@
 	sigaction.gen.test siginfo.gen.test signal.gen.test \
 	signal_receive.gen.test signalfd4.gen.test sigpending.gen.test \
 	sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test \
+	so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test \
 	socketcall.gen.test splice.gen.test stat.gen.test \
 	stat64.gen.test statfs.gen.test statfs64.gen.test \
 	statx.gen.test swap.gen.test sxetmask.gen.test \
@@ -3141,18 +3423,23 @@
 	attach-f-p.test \
 	attach-p-cmd.test \
 	bexecve.test \
+	clone_parent.test \
+	clone_ptrace.test \
 	count-f.test \
 	count.test \
 	detach-running.test \
 	detach-sleeping.test \
 	detach-stopped.test \
 	filter-unavailable.test \
+	fflush.test \
 	get_regs.test \
 	interactive_block.test \
 	ksysent.test \
 	opipe.test \
 	options-syntax.test \
 	pc.test \
+	printpath-umovestr-legacy.test \
+	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
 	qual_inject-error-signal.test \
@@ -3187,7 +3474,7 @@
 TEST_LOG_COMPILER = env
 AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) MIPS_ABI=$(MIPS_ABI) $(srcdir)/run.sh
 VALGRIND_FLAGS = --quiet
-VALGRIND_SUPPRESSIONS_FILES = $(srcdir)/strace.supp
+VALGRIND_SUPPRESSIONS_FILES = $(abs_srcdir)/strace.supp
 EXTRA_DIST = \
 	caps-abbrev.awk \
 	caps.awk \
@@ -3211,6 +3498,7 @@
 	lstatx.c \
 	match.awk \
 	net.expected \
+	netlink_sock_diag-v.sh \
 	oldselect.expected \
 	pipe.expected \
 	process_vm_readv_writev.c \
@@ -3239,6 +3527,7 @@
 	strace.supp \
 	struct_flock.c \
 	sun_path.expected \
+	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
@@ -3263,6 +3552,7 @@
 	$(TESTS)
 
 objects = $(filter %.$(OBJEXT),$(SOURCES:.c=.$(OBJEXT)))
+BUILT_SOURCES = ksysent.h scno.h
 CLEANFILES = ksysent.h syscallent.i scno.h
 SCNO_CPPFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 		$(ARCH_MFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS)
@@ -3270,7 +3560,8 @@
 digits = [[:digit:]][[:digit:]]*
 al_nums = [[:alnum:]_][[:alnum:]_]*
 SCNO_SED = /TRACE_INDIRECT_SUBCALL/d; s/^\[[[:space:]]*\($(digits)\)\][[:space:]]*=[[:space:]]*{[^,]*,[^,]*,[^,]*,[[:space:]]*"\($(al_nums)\)"[[:space:]]*},.*/\#ifndef __NR_\2\n\# define __NR_\2 (SYSCALL_BIT | \1)\n\#endif/p
-all: all-am
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs
@@ -3381,6 +3672,10 @@
 	@rm -f bpf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bpf_OBJECTS) $(bpf_LDADD) $(LIBS)
 
+bpf-v$(EXEEXT): $(bpf_v_OBJECTS) $(bpf_v_DEPENDENCIES) $(EXTRA_bpf_v_DEPENDENCIES) 
+	@rm -f bpf-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_v_OBJECTS) $(bpf_v_LDADD) $(LIBS)
+
 brk$(EXEEXT): $(brk_OBJECTS) $(brk_DEPENDENCIES) $(EXTRA_brk_DEPENDENCIES) 
 	@rm -f brk$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(brk_OBJECTS) $(brk_LDADD) $(LIBS)
@@ -3425,6 +3720,14 @@
 	@rm -f clock_xettime$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(clock_xettime_OBJECTS) $(clock_xettime_LDADD) $(LIBS)
 
+clone_parent$(EXEEXT): $(clone_parent_OBJECTS) $(clone_parent_DEPENDENCIES) $(EXTRA_clone_parent_DEPENDENCIES) 
+	@rm -f clone_parent$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(clone_parent_OBJECTS) $(clone_parent_LDADD) $(LIBS)
+
+clone_ptrace$(EXEEXT): $(clone_ptrace_OBJECTS) $(clone_ptrace_DEPENDENCIES) $(EXTRA_clone_ptrace_DEPENDENCIES) 
+	@rm -f clone_ptrace$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(clone_ptrace_OBJECTS) $(clone_ptrace_LDADD) $(LIBS)
+
 copy_file_range$(EXEEXT): $(copy_file_range_OBJECTS) $(copy_file_range_DEPENDENCIES) $(EXTRA_copy_file_range_DEPENDENCIES) 
 	@rm -f copy_file_range$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(copy_file_range_OBJECTS) $(copy_file_range_LDADD) $(LIBS)
@@ -3557,6 +3860,10 @@
 	@rm -f fdatasync$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fdatasync_OBJECTS) $(fdatasync_LDADD) $(LIBS)
 
+fflush$(EXEEXT): $(fflush_OBJECTS) $(fflush_DEPENDENCIES) $(EXTRA_fflush_DEPENDENCIES) 
+	@rm -f fflush$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fflush_OBJECTS) $(fflush_LDADD) $(LIBS)
+
 file_handle$(EXEEXT): $(file_handle_OBJECTS) $(file_handle_DEPENDENCIES) $(EXTRA_file_handle_DEPENDENCIES) 
 	@rm -f file_handle$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(file_handle_OBJECTS) $(file_handle_LDADD) $(LIBS)
@@ -3741,6 +4048,10 @@
 	@rm -f getxxid$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(getxxid_OBJECTS) $(getxxid_LDADD) $(LIBS)
 
+group_req$(EXEEXT): $(group_req_OBJECTS) $(group_req_DEPENDENCIES) $(EXTRA_group_req_DEPENDENCIES) 
+	@rm -f group_req$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(group_req_OBJECTS) $(group_req_LDADD) $(LIBS)
+
 inet-cmsg$(EXEEXT): $(inet_cmsg_OBJECTS) $(inet_cmsg_DEPENDENCIES) $(EXTRA_inet_cmsg_DEPENDENCIES) 
 	@rm -f inet-cmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(inet_cmsg_OBJECTS) $(inet_cmsg_LDADD) $(LIBS)
@@ -3873,6 +4184,10 @@
 	@rm -f ipc_shm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_shm_OBJECTS) $(ipc_shm_LDADD) $(LIBS)
 
+is_linux_mips_n64$(EXEEXT): $(is_linux_mips_n64_OBJECTS) $(is_linux_mips_n64_DEPENDENCIES) $(EXTRA_is_linux_mips_n64_DEPENDENCIES) 
+	@rm -f is_linux_mips_n64$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(is_linux_mips_n64_OBJECTS) $(is_linux_mips_n64_LDADD) $(LIBS)
+
 kcmp$(EXEEXT): $(kcmp_OBJECTS) $(kcmp_DEPENDENCIES) $(EXTRA_kcmp_DEPENDENCIES) 
 	@rm -f kcmp$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kcmp_OBJECTS) $(kcmp_LDADD) $(LIBS)
@@ -4085,6 +4400,10 @@
 	@rm -f netlink_audit$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_audit_OBJECTS) $(netlink_audit_LDADD) $(LIBS)
 
+netlink_crypto$(EXEEXT): $(netlink_crypto_OBJECTS) $(netlink_crypto_DEPENDENCIES) $(EXTRA_netlink_crypto_DEPENDENCIES) 
+	@rm -f netlink_crypto$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(netlink_crypto_OBJECTS) $(netlink_crypto_LDADD) $(LIBS)
+
 netlink_generic$(EXEEXT): $(netlink_generic_OBJECTS) $(netlink_generic_DEPENDENCIES) $(EXTRA_netlink_generic_DEPENDENCIES) 
 	@rm -f netlink_generic$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_generic_OBJECTS) $(netlink_generic_LDADD) $(LIBS)
@@ -4093,6 +4412,10 @@
 	@rm -f netlink_inet_diag$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_inet_diag_OBJECTS) $(netlink_inet_diag_LDADD) $(LIBS)
 
+netlink_kobject_uevent$(EXEEXT): $(netlink_kobject_uevent_OBJECTS) $(netlink_kobject_uevent_DEPENDENCIES) $(EXTRA_netlink_kobject_uevent_DEPENDENCIES) 
+	@rm -f netlink_kobject_uevent$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(netlink_kobject_uevent_OBJECTS) $(netlink_kobject_uevent_LDADD) $(LIBS)
+
 netlink_netfilter$(EXEEXT): $(netlink_netfilter_OBJECTS) $(netlink_netfilter_DEPENDENCIES) $(EXTRA_netlink_netfilter_DEPENDENCIES) 
 	@rm -f netlink_netfilter$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_netfilter_OBJECTS) $(netlink_netfilter_LDADD) $(LIBS)
@@ -4133,14 +4456,102 @@
 	@rm -f nlattr$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_OBJECTS) $(nlattr_LDADD) $(LIBS)
 
+nlattr_br_port_msg$(EXEEXT): $(nlattr_br_port_msg_OBJECTS) $(nlattr_br_port_msg_DEPENDENCIES) $(EXTRA_nlattr_br_port_msg_DEPENDENCIES) 
+	@rm -f nlattr_br_port_msg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_br_port_msg_OBJECTS) $(nlattr_br_port_msg_LDADD) $(LIBS)
+
+nlattr_crypto_user_alg$(EXEEXT): $(nlattr_crypto_user_alg_OBJECTS) $(nlattr_crypto_user_alg_DEPENDENCIES) $(EXTRA_nlattr_crypto_user_alg_DEPENDENCIES) 
+	@rm -f nlattr_crypto_user_alg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_crypto_user_alg_OBJECTS) $(nlattr_crypto_user_alg_LDADD) $(LIBS)
+
+nlattr_dcbmsg$(EXEEXT): $(nlattr_dcbmsg_OBJECTS) $(nlattr_dcbmsg_DEPENDENCIES) $(EXTRA_nlattr_dcbmsg_DEPENDENCIES) 
+	@rm -f nlattr_dcbmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_dcbmsg_OBJECTS) $(nlattr_dcbmsg_LDADD) $(LIBS)
+
+nlattr_fib_rule_hdr$(EXEEXT): $(nlattr_fib_rule_hdr_OBJECTS) $(nlattr_fib_rule_hdr_DEPENDENCIES) $(EXTRA_nlattr_fib_rule_hdr_DEPENDENCIES) 
+	@rm -f nlattr_fib_rule_hdr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_fib_rule_hdr_OBJECTS) $(nlattr_fib_rule_hdr_LDADD) $(LIBS)
+
+nlattr_ifaddrlblmsg$(EXEEXT): $(nlattr_ifaddrlblmsg_OBJECTS) $(nlattr_ifaddrlblmsg_DEPENDENCIES) $(EXTRA_nlattr_ifaddrlblmsg_DEPENDENCIES) 
+	@rm -f nlattr_ifaddrlblmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifaddrlblmsg_OBJECTS) $(nlattr_ifaddrlblmsg_LDADD) $(LIBS)
+
+nlattr_ifaddrmsg$(EXEEXT): $(nlattr_ifaddrmsg_OBJECTS) $(nlattr_ifaddrmsg_DEPENDENCIES) $(EXTRA_nlattr_ifaddrmsg_DEPENDENCIES) 
+	@rm -f nlattr_ifaddrmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifaddrmsg_OBJECTS) $(nlattr_ifaddrmsg_LDADD) $(LIBS)
+
+nlattr_ifinfomsg$(EXEEXT): $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_DEPENDENCIES) $(EXTRA_nlattr_ifinfomsg_DEPENDENCIES) 
+	@rm -f nlattr_ifinfomsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_LDADD) $(LIBS)
+
+nlattr_ifla_brport$(EXEEXT): $(nlattr_ifla_brport_OBJECTS) $(nlattr_ifla_brport_DEPENDENCIES) $(EXTRA_nlattr_ifla_brport_DEPENDENCIES) 
+	@rm -f nlattr_ifla_brport$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_brport_OBJECTS) $(nlattr_ifla_brport_LDADD) $(LIBS)
+
+nlattr_ifla_port$(EXEEXT): $(nlattr_ifla_port_OBJECTS) $(nlattr_ifla_port_DEPENDENCIES) $(EXTRA_nlattr_ifla_port_DEPENDENCIES) 
+	@rm -f nlattr_ifla_port$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_port_OBJECTS) $(nlattr_ifla_port_LDADD) $(LIBS)
+
+nlattr_ifla_xdp$(EXEEXT): $(nlattr_ifla_xdp_OBJECTS) $(nlattr_ifla_xdp_DEPENDENCIES) $(EXTRA_nlattr_ifla_xdp_DEPENDENCIES) 
+	@rm -f nlattr_ifla_xdp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_xdp_OBJECTS) $(nlattr_ifla_xdp_LDADD) $(LIBS)
+
 nlattr_inet_diag_msg$(EXEEXT): $(nlattr_inet_diag_msg_OBJECTS) $(nlattr_inet_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_inet_diag_msg_DEPENDENCIES) 
 	@rm -f nlattr_inet_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_msg_OBJECTS) $(nlattr_inet_diag_msg_LDADD) $(LIBS)
 
+nlattr_inet_diag_req_compat$(EXEEXT): $(nlattr_inet_diag_req_compat_OBJECTS) $(nlattr_inet_diag_req_compat_DEPENDENCIES) $(EXTRA_nlattr_inet_diag_req_compat_DEPENDENCIES) 
+	@rm -f nlattr_inet_diag_req_compat$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_req_compat_OBJECTS) $(nlattr_inet_diag_req_compat_LDADD) $(LIBS)
+
+nlattr_inet_diag_req_v2$(EXEEXT): $(nlattr_inet_diag_req_v2_OBJECTS) $(nlattr_inet_diag_req_v2_DEPENDENCIES) $(EXTRA_nlattr_inet_diag_req_v2_DEPENDENCIES) 
+	@rm -f nlattr_inet_diag_req_v2$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_req_v2_OBJECTS) $(nlattr_inet_diag_req_v2_LDADD) $(LIBS)
+
+nlattr_ndmsg$(EXEEXT): $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_DEPENDENCIES) $(EXTRA_nlattr_ndmsg_DEPENDENCIES) 
+	@rm -f nlattr_ndmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_LDADD) $(LIBS)
+
+nlattr_ndtmsg$(EXEEXT): $(nlattr_ndtmsg_OBJECTS) $(nlattr_ndtmsg_DEPENDENCIES) $(EXTRA_nlattr_ndtmsg_DEPENDENCIES) 
+	@rm -f nlattr_ndtmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ndtmsg_OBJECTS) $(nlattr_ndtmsg_LDADD) $(LIBS)
+
+nlattr_netconfmsg$(EXEEXT): $(nlattr_netconfmsg_OBJECTS) $(nlattr_netconfmsg_DEPENDENCIES) $(EXTRA_nlattr_netconfmsg_DEPENDENCIES) 
+	@rm -f nlattr_netconfmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_netconfmsg_OBJECTS) $(nlattr_netconfmsg_LDADD) $(LIBS)
+
 nlattr_netlink_diag_msg$(EXEEXT): $(nlattr_netlink_diag_msg_OBJECTS) $(nlattr_netlink_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_netlink_diag_msg_DEPENDENCIES) 
 	@rm -f nlattr_netlink_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_netlink_diag_msg_OBJECTS) $(nlattr_netlink_diag_msg_LDADD) $(LIBS)
 
+nlattr_nlmsgerr$(EXEEXT): $(nlattr_nlmsgerr_OBJECTS) $(nlattr_nlmsgerr_DEPENDENCIES) $(EXTRA_nlattr_nlmsgerr_DEPENDENCIES) 
+	@rm -f nlattr_nlmsgerr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_nlmsgerr_OBJECTS) $(nlattr_nlmsgerr_LDADD) $(LIBS)
+
+nlattr_packet_diag_msg$(EXEEXT): $(nlattr_packet_diag_msg_OBJECTS) $(nlattr_packet_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_packet_diag_msg_DEPENDENCIES) 
+	@rm -f nlattr_packet_diag_msg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_packet_diag_msg_OBJECTS) $(nlattr_packet_diag_msg_LDADD) $(LIBS)
+
+nlattr_rtgenmsg$(EXEEXT): $(nlattr_rtgenmsg_OBJECTS) $(nlattr_rtgenmsg_DEPENDENCIES) $(EXTRA_nlattr_rtgenmsg_DEPENDENCIES) 
+	@rm -f nlattr_rtgenmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_rtgenmsg_OBJECTS) $(nlattr_rtgenmsg_LDADD) $(LIBS)
+
+nlattr_rtmsg$(EXEEXT): $(nlattr_rtmsg_OBJECTS) $(nlattr_rtmsg_DEPENDENCIES) $(EXTRA_nlattr_rtmsg_DEPENDENCIES) 
+	@rm -f nlattr_rtmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_rtmsg_OBJECTS) $(nlattr_rtmsg_LDADD) $(LIBS)
+
+nlattr_smc_diag_msg$(EXEEXT): $(nlattr_smc_diag_msg_OBJECTS) $(nlattr_smc_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_smc_diag_msg_DEPENDENCIES) 
+	@rm -f nlattr_smc_diag_msg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_smc_diag_msg_OBJECTS) $(nlattr_smc_diag_msg_LDADD) $(LIBS)
+
+nlattr_tcamsg$(EXEEXT): $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_DEPENDENCIES) $(EXTRA_nlattr_tcamsg_DEPENDENCIES) 
+	@rm -f nlattr_tcamsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_LDADD) $(LIBS)
+
+nlattr_tcmsg$(EXEEXT): $(nlattr_tcmsg_OBJECTS) $(nlattr_tcmsg_DEPENDENCIES) $(EXTRA_nlattr_tcmsg_DEPENDENCIES) 
+	@rm -f nlattr_tcmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tcmsg_OBJECTS) $(nlattr_tcmsg_LDADD) $(LIBS)
+
 nlattr_unix_diag_msg$(EXEEXT): $(nlattr_unix_diag_msg_OBJECTS) $(nlattr_unix_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_unix_diag_msg_DEPENDENCIES) 
 	@rm -f nlattr_unix_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_unix_diag_msg_OBJECTS) $(nlattr_unix_diag_msg_LDADD) $(LIBS)
@@ -4297,10 +4708,34 @@
 	@rm -f print_maxfd$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(print_maxfd_OBJECTS) $(print_maxfd_LDADD) $(LIBS)
 
+printpath-umovestr$(EXEEXT): $(printpath_umovestr_OBJECTS) $(printpath_umovestr_DEPENDENCIES) $(EXTRA_printpath_umovestr_DEPENDENCIES) 
+	@rm -f printpath-umovestr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printpath_umovestr_OBJECTS) $(printpath_umovestr_LDADD) $(LIBS)
+
+printpath-umovestr-peekdata$(EXEEXT): $(printpath_umovestr_peekdata_OBJECTS) $(printpath_umovestr_peekdata_DEPENDENCIES) $(EXTRA_printpath_umovestr_peekdata_DEPENDENCIES) 
+	@rm -f printpath-umovestr-peekdata$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printpath_umovestr_peekdata_OBJECTS) $(printpath_umovestr_peekdata_LDADD) $(LIBS)
+
+printpath-umovestr-undumpable$(EXEEXT): $(printpath_umovestr_undumpable_OBJECTS) $(printpath_umovestr_undumpable_DEPENDENCIES) $(EXTRA_printpath_umovestr_undumpable_DEPENDENCIES) 
+	@rm -f printpath-umovestr-undumpable$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printpath_umovestr_undumpable_OBJECTS) $(printpath_umovestr_undumpable_LDADD) $(LIBS)
+
 printstr$(EXEEXT): $(printstr_OBJECTS) $(printstr_DEPENDENCIES) $(EXTRA_printstr_DEPENDENCIES) 
 	@rm -f printstr$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(printstr_OBJECTS) $(printstr_LDADD) $(LIBS)
 
+printstrn-umoven$(EXEEXT): $(printstrn_umoven_OBJECTS) $(printstrn_umoven_DEPENDENCIES) $(EXTRA_printstrn_umoven_DEPENDENCIES) 
+	@rm -f printstrn-umoven$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printstrn_umoven_OBJECTS) $(printstrn_umoven_LDADD) $(LIBS)
+
+printstrn-umoven-peekdata$(EXEEXT): $(printstrn_umoven_peekdata_OBJECTS) $(printstrn_umoven_peekdata_DEPENDENCIES) $(EXTRA_printstrn_umoven_peekdata_DEPENDENCIES) 
+	@rm -f printstrn-umoven-peekdata$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printstrn_umoven_peekdata_OBJECTS) $(printstrn_umoven_peekdata_LDADD) $(LIBS)
+
+printstrn-umoven-undumpable$(EXEEXT): $(printstrn_umoven_undumpable_OBJECTS) $(printstrn_umoven_undumpable_DEPENDENCIES) $(EXTRA_printstrn_umoven_undumpable_DEPENDENCIES) 
+	@rm -f printstrn-umoven-undumpable$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printstrn_umoven_undumpable_OBJECTS) $(printstrn_umoven_undumpable_LDADD) $(LIBS)
+
 prlimit64$(EXEEXT): $(prlimit64_OBJECTS) $(prlimit64_DEPENDENCIES) $(EXTRA_prlimit64_DEPENDENCIES) 
 	@rm -f prlimit64$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prlimit64_OBJECTS) $(prlimit64_LDADD) $(LIBS)
@@ -4677,6 +5112,18 @@
 	@rm -f sleep$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(sleep_OBJECTS) $(sleep_LDADD) $(LIBS)
 
+so_linger$(EXEEXT): $(so_linger_OBJECTS) $(so_linger_DEPENDENCIES) $(EXTRA_so_linger_DEPENDENCIES) 
+	@rm -f so_linger$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_linger_OBJECTS) $(so_linger_LDADD) $(LIBS)
+
+so_peercred$(EXEEXT): $(so_peercred_OBJECTS) $(so_peercred_DEPENDENCIES) $(EXTRA_so_peercred_DEPENDENCIES) 
+	@rm -f so_peercred$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_OBJECTS) $(so_peercred_LDADD) $(LIBS)
+
+sock_filter-v$(EXEEXT): $(sock_filter_v_OBJECTS) $(sock_filter_v_DEPENDENCIES) $(EXTRA_sock_filter_v_DEPENDENCIES) 
+	@rm -f sock_filter-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_OBJECTS) $(sock_filter_v_LDADD) $(LIBS)
+
 socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_socketcall_DEPENDENCIES) 
 	@rm -f socketcall$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
@@ -4958,6 +5405,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach-p-cmd-cmd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach-p-cmd-p.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/block_reset_raise_run.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/brk.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btrfs.Po@am__quote@
@@ -4970,6 +5418,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_adjtime.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_nanosleep.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_xettime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clone_parent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clone_ptrace.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy_file_range.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count-f.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/creat.Po@am__quote@
@@ -5003,6 +5453,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdatasync.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fflush.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_handle.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_ioctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filter-unavailable.Po@am__quote@
@@ -5049,6 +5500,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getuid.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getuid32.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getxxid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/group_req.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet-cmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init_module.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inotify.Po@am__quote@
@@ -5082,6 +5534,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_linux_mips_n64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcmp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_file_load.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_load.Po@am__quote@
@@ -5098,6 +5551,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-get_sigset_size.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-hexdump_strdup.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-hexquote_strndup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-ifindex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-inode_of_sockfd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libmmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libsocketcall.Po@am__quote@
@@ -5111,6 +5565,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-skip_unavailable.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-sprintrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-tail_alloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-test_printpath.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-test_printstrn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-test_ucopy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-tprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linkat.Po@am__quote@
@@ -5157,8 +5614,10 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net-yy-netlink.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net-yy-unix.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_audit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_crypto.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_generic.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_inet_diag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_kobject_uevent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_netfilter.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_netlink_diag.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_protocol.Po@am__quote@
@@ -5169,8 +5628,30 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_xfrm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newfstatat-newfstatat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_br_port_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_crypto_user_alg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_dcbmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_fib_rule_hdr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifaddrlblmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifaddrmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifinfomsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifla_brport.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifla_port.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifla_xdp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_compat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_v2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndtmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_netconfmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_netlink_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_nlmsgerr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_packet_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtgenmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_smc_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcamsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_unix_diag_msg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap.Po@am__quote@
@@ -5210,7 +5691,13 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preadv2-pwritev2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preadv_pwritev-preadv-pwritev.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_maxfd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printpath-umovestr-peekdata.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printpath-umovestr-undumpable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printpath-umovestr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstrn-umoven-peekdata.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstrn-umoven-undumpable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstrn-umoven.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prlimit64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process_vm_readv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process_vm_writev.Po@am__quote@
@@ -5305,6 +5792,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigreturn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigsuspend.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_linger.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socketcall.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splice.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-0.Po@am__quote@
@@ -5501,6 +5991,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-hexquote_strndup.obj `if test -f 'hexquote_strndup.c'; then $(CYGPATH_W) 'hexquote_strndup.c'; else $(CYGPATH_W) '$(srcdir)/hexquote_strndup.c'; fi`
 
+libtests_a-ifindex.o: ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-ifindex.o -MD -MP -MF $(DEPDIR)/libtests_a-ifindex.Tpo -c -o libtests_a-ifindex.o `test -f 'ifindex.c' || echo '$(srcdir)/'`ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-ifindex.Tpo $(DEPDIR)/libtests_a-ifindex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='ifindex.c' object='libtests_a-ifindex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-ifindex.o `test -f 'ifindex.c' || echo '$(srcdir)/'`ifindex.c
+
+libtests_a-ifindex.obj: ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-ifindex.obj -MD -MP -MF $(DEPDIR)/libtests_a-ifindex.Tpo -c -o libtests_a-ifindex.obj `if test -f 'ifindex.c'; then $(CYGPATH_W) 'ifindex.c'; else $(CYGPATH_W) '$(srcdir)/ifindex.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-ifindex.Tpo $(DEPDIR)/libtests_a-ifindex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='ifindex.c' object='libtests_a-ifindex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-ifindex.obj `if test -f 'ifindex.c'; then $(CYGPATH_W) 'ifindex.c'; else $(CYGPATH_W) '$(srcdir)/ifindex.c'; fi`
+
 libtests_a-inode_of_sockfd.o: inode_of_sockfd.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-inode_of_sockfd.o -MD -MP -MF $(DEPDIR)/libtests_a-inode_of_sockfd.Tpo -c -o libtests_a-inode_of_sockfd.o `test -f 'inode_of_sockfd.c' || echo '$(srcdir)/'`inode_of_sockfd.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-inode_of_sockfd.Tpo $(DEPDIR)/libtests_a-inode_of_sockfd.Po
@@ -5683,6 +6187,48 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-tail_alloc.obj `if test -f 'tail_alloc.c'; then $(CYGPATH_W) 'tail_alloc.c'; else $(CYGPATH_W) '$(srcdir)/tail_alloc.c'; fi`
 
+libtests_a-test_printpath.o: test_printpath.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printpath.o -MD -MP -MF $(DEPDIR)/libtests_a-test_printpath.Tpo -c -o libtests_a-test_printpath.o `test -f 'test_printpath.c' || echo '$(srcdir)/'`test_printpath.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printpath.Tpo $(DEPDIR)/libtests_a-test_printpath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printpath.c' object='libtests_a-test_printpath.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printpath.o `test -f 'test_printpath.c' || echo '$(srcdir)/'`test_printpath.c
+
+libtests_a-test_printpath.obj: test_printpath.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printpath.obj -MD -MP -MF $(DEPDIR)/libtests_a-test_printpath.Tpo -c -o libtests_a-test_printpath.obj `if test -f 'test_printpath.c'; then $(CYGPATH_W) 'test_printpath.c'; else $(CYGPATH_W) '$(srcdir)/test_printpath.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printpath.Tpo $(DEPDIR)/libtests_a-test_printpath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printpath.c' object='libtests_a-test_printpath.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printpath.obj `if test -f 'test_printpath.c'; then $(CYGPATH_W) 'test_printpath.c'; else $(CYGPATH_W) '$(srcdir)/test_printpath.c'; fi`
+
+libtests_a-test_printstrn.o: test_printstrn.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printstrn.o -MD -MP -MF $(DEPDIR)/libtests_a-test_printstrn.Tpo -c -o libtests_a-test_printstrn.o `test -f 'test_printstrn.c' || echo '$(srcdir)/'`test_printstrn.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printstrn.Tpo $(DEPDIR)/libtests_a-test_printstrn.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printstrn.c' object='libtests_a-test_printstrn.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printstrn.o `test -f 'test_printstrn.c' || echo '$(srcdir)/'`test_printstrn.c
+
+libtests_a-test_printstrn.obj: test_printstrn.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printstrn.obj -MD -MP -MF $(DEPDIR)/libtests_a-test_printstrn.Tpo -c -o libtests_a-test_printstrn.obj `if test -f 'test_printstrn.c'; then $(CYGPATH_W) 'test_printstrn.c'; else $(CYGPATH_W) '$(srcdir)/test_printstrn.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printstrn.Tpo $(DEPDIR)/libtests_a-test_printstrn.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printstrn.c' object='libtests_a-test_printstrn.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printstrn.obj `if test -f 'test_printstrn.c'; then $(CYGPATH_W) 'test_printstrn.c'; else $(CYGPATH_W) '$(srcdir)/test_printstrn.c'; fi`
+
+libtests_a-test_ucopy.o: test_ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_ucopy.o -MD -MP -MF $(DEPDIR)/libtests_a-test_ucopy.Tpo -c -o libtests_a-test_ucopy.o `test -f 'test_ucopy.c' || echo '$(srcdir)/'`test_ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_ucopy.Tpo $(DEPDIR)/libtests_a-test_ucopy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_ucopy.c' object='libtests_a-test_ucopy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_ucopy.o `test -f 'test_ucopy.c' || echo '$(srcdir)/'`test_ucopy.c
+
+libtests_a-test_ucopy.obj: test_ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_ucopy.obj -MD -MP -MF $(DEPDIR)/libtests_a-test_ucopy.Tpo -c -o libtests_a-test_ucopy.obj `if test -f 'test_ucopy.c'; then $(CYGPATH_W) 'test_ucopy.c'; else $(CYGPATH_W) '$(srcdir)/test_ucopy.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_ucopy.Tpo $(DEPDIR)/libtests_a-test_ucopy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_ucopy.c' object='libtests_a-test_ucopy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_ucopy.obj `if test -f 'test_ucopy.c'; then $(CYGPATH_W) 'test_ucopy.c'; else $(CYGPATH_W) '$(srcdir)/test_ucopy.c'; fi`
+
 libtests_a-tprintf.o: tprintf.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-tprintf.o -MD -MP -MF $(DEPDIR)/libtests_a-tprintf.Tpo -c -o libtests_a-tprintf.o `test -f 'tprintf.c' || echo '$(srcdir)/'`tprintf.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-tprintf.Tpo $(DEPDIR)/libtests_a-tprintf.Po
@@ -5893,6 +6439,10 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o uio-uio.obj `if test -f 'uio.c'; then $(CYGPATH_W) 'uio.c'; else $(CYGPATH_W) '$(srcdir)/uio.c'; fi`
 check-valgrind-local: 
+check-valgrind-memcheck-local: 
+check-valgrind-helgrind-local: 
+check-valgrind-drd-local: 
+check-valgrind-sgcheck-local: 
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -6135,10 +6685,12 @@
 check-am: all-am
 	$(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) $(check_PROGRAMS)
 	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: check-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
 all-am: Makefile
 installdirs:
-install: install-am
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
 install-exec: install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
@@ -6172,10 +6724,27 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 check-valgrind: check-valgrind-am
 
 check-valgrind-am: check-valgrind-local
 
+check-valgrind-drd: check-valgrind-drd-am
+
+check-valgrind-drd-am: check-valgrind-drd-local
+
+check-valgrind-helgrind: check-valgrind-helgrind-am
+
+check-valgrind-helgrind-am: check-valgrind-helgrind-local
+
+check-valgrind-memcheck: check-valgrind-memcheck-am
+
+check-valgrind-memcheck-am: check-valgrind-memcheck-local
+
+check-valgrind-sgcheck: check-valgrind-sgcheck-am
+
+check-valgrind-sgcheck-am: check-valgrind-sgcheck-local
+
 clean: clean-am
 
 clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \
@@ -6246,10 +6815,14 @@
 
 uninstall-am:
 
-.MAKE: check-am install-am install-strip
+.MAKE: all check check-am install install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am \
-	check-valgrind-am check-valgrind-local clean \
+	check-valgrind-am check-valgrind-drd-am \
+	check-valgrind-drd-local check-valgrind-helgrind-am \
+	check-valgrind-helgrind-local check-valgrind-local \
+	check-valgrind-memcheck-am check-valgrind-memcheck-local \
+	check-valgrind-sgcheck-am check-valgrind-sgcheck-local clean \
 	clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \
 	clean-local cscopelist-am ctags ctags-am distclean \
 	distclean-compile distclean-generic distclean-tags distdir dvi \
@@ -6294,6 +6867,9 @@
 $(srcdir)/bpf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/btrfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6534,6 +7110,9 @@
 $(srcdir)/getxxid.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/group_req.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/inet-cmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6744,9 +7323,15 @@
 $(srcdir)/netlink_audit.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_crypto.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_generic.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_kobject_uevent.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_netfilter.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6768,12 +7353,78 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_br_port_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_dcbmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_fib_rule_hdr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrlblmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_brport.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_xdp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_inet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_inet_diag_req_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_netconfmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_netlink_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_nlmsgerr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_packet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtgenmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_unix_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6843,6 +7494,24 @@
 $(srcdir)/printstr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/printpath-umovestr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/prlimit64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7086,6 +7755,15 @@
 $(srcdir)/sigsuspend.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_linger.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/socketcall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7286,6 +7964,9 @@
 clean-local-check:
 	-rm -rf -- $(TESTS:.test=.dir) $(GEN_TESTS:.gen.test=.dir)
 
+.PHONY: check-valgrind-local
+check-valgrind-local: $(check_LIBRARIES) $(check_PROGRAMS)
+
 syscallent.i: $(top_builddir)/config.h $(top_srcdir)/$(OS)/$(ARCH)/syscallent.h
 	$(CPP) -P $(SCNO_CPPFLAGS) -include $^ -o $@
 
diff --git a/tests-m32/add_key.c b/tests-m32/add_key.c
index 1de0cc3..999da03 100644
--- a/tests-m32/add_key.c
+++ b/tests-m32/add_key.c
@@ -2,6 +2,7 @@
  * Check decoding of add_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/aio.c b/tests-m32/aio.c
index 77b6c05..335bb31 100644
--- a/tests-m32/aio.c
+++ b/tests-m32/aio.c
@@ -239,11 +239,12 @@
 	if (rc != (long) nr)
 		perror_msg_and_skip("io_submit");
 	printf("io_submit(%#lx, %u, ["
-	       "{data=%#" PRI__x64 ", pread, reqprio=11, fildes=0, "
-		"buf=%p, nbytes=%u, offset=%" PRI__d64 "}, "
-	       "{data=%#" PRI__x64 ", pread, reqprio=22, fildes=0, "
-		"buf=%p, nbytes=%u, offset=%" PRI__d64 "}"
-	       "]) = %s\n",
+	       "{aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREAD"
+		", aio_reqprio=11, aio_fildes=0, aio_buf=%p, aio_nbytes=%u"
+		", aio_offset=%" PRI__d64
+	       "}, {aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREAD"
+		", aio_reqprio=22, aio_fildes=0, aio_buf=%p, aio_nbytes=%u"
+		", aio_offset=%" PRI__d64 "}]) = %s\n",
 	       *ctx, nr,
 	       cb[0].aio_data, data0, sizeof_data0, cb[0].aio_offset,
 	       cb[1].aio_data, data1, sizeof_data1, cb[1].aio_offset,
@@ -299,8 +300,9 @@
 	       sprintrc(rc));
 
 	rc = syscall(__NR_io_cancel, *ctx, cbc, ev);
-	printf("io_cancel(%#lx, {data=%#" PRI__x64
-	       ", pread, reqprio=99, fildes=-42}, %p) = %s\n",
+	printf("io_cancel(%#lx, {aio_data=%#" PRI__x64
+		", aio_lio_opcode=IOCB_CMD_PREAD, aio_reqprio=99"
+		", aio_fildes=-42}, %p) = %s\n",
 	       *ctx, cbc->aio_data, ev, sprintrc(rc));
 
 	rc = syscall(__NR_io_submit, (unsigned long) 0xfacef157beeff00dULL,
@@ -315,21 +317,25 @@
 
 	rc = syscall(__NR_io_submit, *ctx, 1057L, cbvs2);
 	printf("io_submit(%#lx, %ld, ["
-	       "{data=%#" PRI__x64 ", key=%u, %hu /* SUB_??? */, fildes=%d}, "
-	       "{key=%u, pwrite, reqprio=%hd, fildes=%d, str=NULL"
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64
+	       "{aio_data=%#" PRI__x64 ", aio_key=%u"
+		", aio_lio_opcode=%hu /* IOCB_CMD_??? */, aio_fildes=%d}"
+		", {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITE, aio_reqprio=%hd"
+		", aio_fildes=%d, aio_buf=NULL"
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
 # ifdef IOCB_FLAG_RESFD
-		", resfd=%d, flags=%#x"
+		", aio_resfd=%d, aio_flags=%#x"
 # endif
-		"}, "
-	       "{key=%u, pwrite, reqprio=%hd, fildes=%d, buf=%#" PRI__x64
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}, "
-	       "{key=%u, pwrite, reqprio=%hd, fildes=%d"
-		", str=\"\\0\\1\\2\\3%.28s\"..."
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}, "
-	       "{key=%u, pwritev, reqprio=%hd, fildes=%d, buf=%#" PRI__x64
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}"
-	       ", {NULL}, {%#lx}, %p]) = %s\n",
+	       "}, {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITE"
+		", aio_reqprio=%hd, aio_fildes=%d, aio_buf=%#" PRI__x64
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
+	       "}, {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITE"
+		", aio_reqprio=%hd, aio_fildes=%d"
+		", aio_buf=\"\\0\\1\\2\\3%.28s\"..."
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
+	       "}, {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITEV"
+		", aio_reqprio=%hd, aio_fildes=%d, aio_buf=%#" PRI__x64
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
+	       "}, {NULL}, {%#lx}, %p]) = %s\n",
 	       *ctx, 1057L,
 	       cbv2[0].aio_data, cbv2[0].aio_key,
 	       cbv2[0].aio_lio_opcode, cbv2[0].aio_fildes,
@@ -350,12 +356,14 @@
 	if (rc != (long) nr)
 		perror_msg_and_skip("io_submit");
 	printf("io_submit(%#lx, %u, ["
-	       "{data=%#" PRI__x64 ", preadv, reqprio=%hd, fildes=0, "
-		"iovec=[{iov_base=%p, iov_len=%u}"
-		", {iov_base=%p, iov_len=%u}], offset=%" PRI__d64 "}, "
-	       "{data=%#" PRI__x64 ", preadv, reqprio=%hd, fildes=0, "
-		"iovec=[{iov_base=%p, iov_len=%u}"
-		", {iov_base=%p, iov_len=%u}], offset=%" PRI__d64 "}"
+	       "{aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREADV"
+		", aio_reqprio=%hd, aio_fildes=0, "
+		"aio_buf=[{iov_base=%p, iov_len=%u}"
+	       ", {iov_base=%p, iov_len=%u}], aio_offset=%" PRI__d64 "}, "
+	       "{aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREADV"
+		", aio_reqprio=%hd, aio_fildes=0"
+		", aio_buf=[{iov_base=%p, iov_len=%u}"
+		", {iov_base=%p, iov_len=%u}], aio_offset=%" PRI__d64 "}"
 	       "]) = %s\n",
 	       *ctx, nr,
 	       cbv[0].aio_data, cbv[0].aio_reqprio,
diff --git a/tests-m32/bpf-v.c b/tests-m32/bpf-v.c
new file mode 100644
index 0000000..3f44f24
--- /dev/null
+++ b/tests-m32/bpf-v.c
@@ -0,0 +1,3 @@
+/* This file is part of bpf-v strace test. */
+#define VERBOSE 1
+#include "bpf.c"
diff --git a/tests-m32/bpf-v.gen.test b/tests-m32/bpf-v.gen.test
new file mode 100755
index 0000000..e57154e
--- /dev/null
+++ b/tests-m32/bpf-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-v -a20 -v -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -v -e trace=bpf
diff --git a/tests-m32/bpf.c b/tests-m32/bpf.c
index 40f96a7..bec30f8 100644
--- a/tests-m32/bpf.c
+++ b/tests-m32/bpf.c
@@ -1,4 +1,6 @@
 /*
+ * Check bpf syscall decoding.
+ *
  * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
  * All rights reserved.
  *
@@ -28,18 +30,25 @@
 #include "tests.h"
 #include <asm/unistd.h>
 
-#if defined HAVE_UNION_BPF_ATTR_LOG_BUF && defined __NR_bpf
+#if defined __NR_bpf				\
+ && (defined HAVE_UNION_BPF_ATTR_ATTACH_FLAGS	\
+  || defined HAVE_UNION_BPF_ATTR_BPF_FD		\
+  || defined HAVE_UNION_BPF_ATTR_FLAGS		\
+  || defined HAVE_UNION_BPF_ATTR_INNER_MAP_FD	\
+  || defined HAVE_UNION_BPF_ATTR_PROG_FLAGS)
+
+# include <stddef.h>
 # include <stdio.h>
 # include <stdint.h>
+# include <string.h>
 # include <unistd.h>
 # include <linux/bpf.h>
 
-static const struct bpf_insn insns[] = {
-	{ .code = BPF_JMP | BPF_EXIT }
-};
-
+static const kernel_ulong_t long_bits = (kernel_ulong_t) 0xfacefeed00000000ULL;
 static const char *errstr;
-static char log_buf[4096];
+static unsigned int sizeof_attr = sizeof(union bpf_attr);
+static unsigned int page_size;
+static unsigned long end_of_page;
 
 static long
 sys_bpf(kernel_ulong_t cmd, kernel_ulong_t attr, kernel_ulong_t size)
@@ -49,45 +58,374 @@
 	return rc;
 }
 
-static int
-map_create(void)
+# if VERBOSE
+#  define print_extra_data(addr_, size_) print_quoted_hex((addr_), (size_))
+# else
+#  define print_extra_data(addr_, size_) printf("...")
+#endif
+
+# define TEST_BPF_(cmd_, cmd_str_,					\
+		  init_first_, print_first_,				\
+		  init_attr_, print_attr_)				\
+	do {								\
+		/* zero addr */						\
+		sys_bpf(cmd_, 0, long_bits | sizeof(union bpf_attr));	\
+		printf("bpf(%s, NULL, %u) = %s\n",			\
+		       cmd_str_, sizeof_attr, errstr);			\
+									\
+		/* zero size */						\
+		unsigned long addr = end_of_page - sizeof_attr;		\
+		sys_bpf(cmd_, addr, long_bits);				\
+		printf("bpf(%s, %#lx, 0) = %s\n",			\
+		       cmd_str_, addr, errstr);				\
+									\
+		/* the first field only */				\
+		unsigned int offset = init_first_(end_of_page);		\
+		addr = end_of_page - offset;				\
+		sys_bpf(cmd_, addr, offset);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_first_(addr);					\
+		printf("}, %u) = %s\n", offset, errstr);		\
+									\
+		/* efault after the first field */			\
+		sys_bpf(cmd_, addr, offset + 1);			\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr, offset + 1, errstr);		\
+									\
+		/* the relevant part of union bpf_attr */		\
+		offset = init_attr_(end_of_page);			\
+		addr = end_of_page - offset;				\
+		sys_bpf(cmd_, addr, offset);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_attr_(addr);					\
+		printf("}, %u) = %s\n", offset, errstr);		\
+									\
+		/* short read of the relevant part of union bpf_attr */	\
+		sys_bpf(cmd_, addr + 1, offset);			\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr + 1, offset, errstr);		\
+									\
+		if (offset < sizeof_attr) {				\
+			/* short read of the whole union bpf_attr */	\
+			memmove((void *) end_of_page - sizeof_attr + 1,	\
+				(void *) addr, offset);			\
+			addr = end_of_page - sizeof_attr + 1;		\
+			memset((void *) addr + offset, 0,		\
+			       sizeof_attr - offset - 1);		\
+			sys_bpf(cmd_, addr, sizeof_attr);		\
+			printf("bpf(%s, %#lx, %u) = %s\n",		\
+			       cmd_str_, addr, sizeof_attr, errstr);	\
+									\
+			/* the whole union bpf_attr */			\
+			memmove((void *) end_of_page - sizeof_attr,	\
+				(void *) addr, offset);			\
+			addr = end_of_page - sizeof_attr;		\
+			memset((void *) addr + offset, 0,		\
+			       sizeof_attr - offset);			\
+			sys_bpf(cmd_, addr, sizeof_attr);		\
+			printf("bpf(%s, {", cmd_str_);			\
+			print_attr_(addr);				\
+			printf("}, %u) = %s\n", sizeof_attr, errstr);	\
+									\
+			/* non-zero bytes after the relevant part */	\
+			fill_memory_ex((void *) addr + offset,		\
+				       sizeof_attr - offset, '0', 10);	\
+			sys_bpf(cmd_, addr, sizeof_attr);		\
+			printf("bpf(%s, {", cmd_str_);			\
+			print_attr_(addr);				\
+			printf(", ");					\
+			print_extra_data((void *) addr + offset,	\
+					 sizeof_attr - offset);		\
+			printf("}, %u) = %s\n", sizeof_attr, errstr);	\
+		}							\
+									\
+		/* short read of the whole page */			\
+		memmove((void *) end_of_page - page_size + 1,		\
+			(void *) addr, offset);				\
+		addr = end_of_page - page_size + 1;			\
+		memset((void *) addr + offset, 0,			\
+		       page_size - offset - 1);				\
+		sys_bpf(cmd_, addr, page_size);				\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr, page_size, errstr);		\
+									\
+		/* the whole page */					\
+		memmove((void *) end_of_page - page_size,		\
+			(void *) addr, offset);				\
+		addr = end_of_page - page_size;				\
+		memset((void *) addr + offset, 0, page_size - offset);	\
+		sys_bpf(cmd_, addr, page_size);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_attr_(addr);					\
+		printf("}, %u) = %s\n", page_size, errstr);		\
+									\
+		/* non-zero bytes after the whole union bpf_attr */	\
+		fill_memory_ex((void *) addr + offset,			\
+			       page_size - offset, '0', 10);		\
+		sys_bpf(cmd_, addr, page_size);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_attr_(addr);					\
+		printf(", ");						\
+		print_extra_data((void *) addr + offset,		\
+				 page_size - offset);			\
+		printf("}, %u) = %s\n", page_size, errstr);		\
+									\
+		/* more than a page */					\
+		sys_bpf(cmd_, addr, page_size + 1);			\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr, page_size + 1, errstr);		\
+	} while (0)							\
+	/* End of TEST_BPF_ definition. */
+
+# define TEST_BPF(cmd_)							\
+	TEST_BPF_((cmd_), #cmd_,					\
+		  init_ ## cmd_ ## _first, print_ ## cmd_ ## _first,	\
+		  init_ ## cmd_ ## _attr, print_ ## cmd_ ## _attr)	\
+	/* End of TEST_BPF definition. */
+
+# ifdef HAVE_UNION_BPF_ATTR_INNER_MAP_FD
+
+static unsigned int
+init_BPF_MAP_CREATE_first(const unsigned long eop)
 {
-	union bpf_attr attr = {
-		.key_size = 4,
-		.value_size = 8,
-		.max_entries = 256
-	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(BPF_MAP_CREATE, (unsigned long) t_attr, sizeof(attr));
+	static const union bpf_attr attr = { .map_type = 2 };
+	static const unsigned int offset = sizeof(attr.map_type);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.map_type, offset);
+	return offset;
 }
 
-static int
-map_any(int cmd)
+static void
+print_BPF_MAP_CREATE_first(const unsigned long addr)
 {
-	union bpf_attr attr = {
+	printf("map_type=BPF_MAP_TYPE_ARRAY, key_size=0, value_size=0"
+	       ", max_entries=0, map_flags=0, inner_map_fd=0");
+}
+
+static unsigned int
+init_BPF_MAP_CREATE_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_type = 1,
+		.key_size = 4,
+		.value_size = 8,
+		.max_entries = 256,
+		.map_flags = 1,
+		.inner_map_fd = -1
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, inner_map_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_CREATE_attr(const unsigned long addr)
+{
+	printf("map_type=BPF_MAP_TYPE_HASH, key_size=4"
+	       ", value_size=8, max_entries=256"
+	       ", map_flags=BPF_F_NO_PREALLOC, inner_map_fd=-1");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_INNER_MAP_FD */
+
+# ifdef HAVE_UNION_BPF_ATTR_FLAGS
+
+static unsigned int
+init_BPF_MAP_LOOKUP_ELEM_first(const unsigned long eop)
+{
+	static const union bpf_attr attr = { .map_fd = -1 };
+	static const unsigned int offset = sizeof(attr.map_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.map_fd, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_LOOKUP_ELEM_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0, value=0");
+}
+
+static unsigned int
+init_BPF_MAP_LOOKUP_ELEM_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
 		.map_fd = -1,
 		.key = 0xdeadbeef,
 		.value = 0xbadc0ded
 	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(cmd, (unsigned long) t_attr, sizeof(attr));
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, value);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
 }
 
-static int
-prog_load(void)
+static void
+print_BPF_MAP_LOOKUP_ELEM_attr(const unsigned long addr)
 {
-	union bpf_attr attr = {
-		.insn_cnt = sizeof(insns) / sizeof(insns[0]),
-		.insns = (unsigned long) insns,
-		.license = (unsigned long) "GPL",
+	printf("map_fd=-1, key=0xdeadbeef, value=0xbadc0ded");
+}
+
+#  define init_BPF_MAP_UPDATE_ELEM_first init_BPF_MAP_LOOKUP_ELEM_first
+
+static void
+print_BPF_MAP_UPDATE_ELEM_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0, value=0, flags=BPF_ANY");
+}
+
+static unsigned int
+init_BPF_MAP_UPDATE_ELEM_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_fd = -1,
+		.key = 0xdeadbeef,
+		.value = 0xbadc0ded,
+		.flags = 2
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, flags);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_UPDATE_ELEM_attr(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0xdeadbeef, value=0xbadc0ded, flags=BPF_EXIST");
+}
+
+#  define init_BPF_MAP_DELETE_ELEM_first init_BPF_MAP_LOOKUP_ELEM_first
+
+static void
+print_BPF_MAP_DELETE_ELEM_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0");
+}
+
+static unsigned int
+init_BPF_MAP_DELETE_ELEM_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_fd = -1,
+		.key = 0xdeadbeef
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, key);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_DELETE_ELEM_attr(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0xdeadbeef");
+}
+
+#  define init_BPF_MAP_GET_NEXT_KEY_first init_BPF_MAP_LOOKUP_ELEM_first
+
+static void
+print_BPF_MAP_GET_NEXT_KEY_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0, next_key=0");
+}
+
+static unsigned int
+init_BPF_MAP_GET_NEXT_KEY_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_fd = -1,
+		.key = 0xdeadbeef,
+		.next_key = 0xbadc0ded
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, next_key);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_GET_NEXT_KEY_attr(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0xdeadbeef, next_key=0xbadc0ded");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_FLAGS */
+
+# ifdef HAVE_UNION_BPF_ATTR_PROG_FLAGS
+
+static unsigned int
+init_BPF_PROG_LOAD_first(const unsigned long eop)
+{
+	static const union bpf_attr attr = { .prog_type = 1 };
+	static const unsigned int offset = sizeof(attr.prog_type);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.prog_type, offset);
+	return offset;
+}
+
+static void
+print_BPF_PROG_LOAD_first(const unsigned long addr)
+{
+
+	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=0, insns=0"
+	       ", license=NULL, log_level=0, log_size=0, log_buf=0"
+	       ", kern_version=0, prog_flags=0");
+}
+
+static const struct bpf_insn insns[] = {
+	{ .code = BPF_JMP | BPF_EXIT }
+};
+static char log_buf[4096];
+
+static unsigned int
+init_BPF_PROG_LOAD_attr(const unsigned long eop)
+{
+	const union bpf_attr attr = {
+		.prog_type = 1,
+		.insn_cnt = ARRAY_SIZE(insns),
+		.insns = (uintptr_t) insns,
+		.license = (uintptr_t) "GPL",
 		.log_level = 42,
 		.log_size = sizeof(log_buf),
-		.log_buf = (unsigned long) log_buf
+		.log_buf = (uintptr_t) log_buf,
+		.kern_version = 0xcafef00d,
+		.prog_flags = 1
 	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(BPF_PROG_LOAD, (unsigned long) t_attr, sizeof(attr));
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, prog_flags);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
 }
 
+static void
+print_BPF_PROG_LOAD_attr(const unsigned long addr)
+{
+	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=%u, insns=%p"
+	       ", license=\"GPL\", log_level=42, log_size=4096, log_buf=%p"
+	       ", kern_version=%u, prog_flags=BPF_F_STRICT_ALIGNMENT",
+	       (unsigned int) ARRAY_SIZE(insns), insns,
+	       log_buf, 0xcafef00d);
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_PROG_FLAGS */
+
 /*
  * bpf() syscall and its first six commands were introduced in Linux kernel
  * 3.18. Some additional commands were added afterwards, so we need to take
@@ -96,134 +434,165 @@
  * BPF_OBJ_PIN and BPF_OBJ_GET commands appear in kernel 4.4.
  */
 # ifdef HAVE_UNION_BPF_ATTR_BPF_FD
-static int
-obj_manage(int cmd)
+
+static unsigned int
+init_BPF_OBJ_PIN_first(const unsigned long eop)
 {
-	union bpf_attr attr = {
-		.pathname = (unsigned long) "/sys/fs/bpf/foo/bar",
+	static const union bpf_attr attr = {};
+	static const unsigned int offset = sizeof(attr.pathname);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.pathname, offset);
+	return offset;
+}
+
+static void
+print_BPF_OBJ_PIN_first(const unsigned long addr)
+{
+
+	printf("pathname=NULL, bpf_fd=0");
+}
+
+static unsigned int
+init_BPF_OBJ_PIN_attr(const unsigned long eop)
+{
+	const union bpf_attr attr = {
+		.pathname = (uintptr_t) "/sys/fs/bpf/foo/bar",
 		.bpf_fd = -1
 	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(cmd, (unsigned long) t_attr, sizeof(attr));
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, bpf_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
 }
-# endif
+
+static void
+print_BPF_OBJ_PIN_attr(const unsigned long addr)
+{
+	printf("pathname=\"/sys/fs/bpf/foo/bar\", bpf_fd=-1");
+}
+
+#  define init_BPF_OBJ_GET_first init_BPF_OBJ_PIN_first
+#  define print_BPF_OBJ_GET_first print_BPF_OBJ_PIN_first
+#  define init_BPF_OBJ_GET_attr init_BPF_OBJ_PIN_attr
+#  define print_BPF_OBJ_GET_attr print_BPF_OBJ_PIN_attr
+
+# endif /* HAVE_UNION_BPF_ATTR_BPF_FD */
 
 /* BPF_PROG_ATTACH and BPF_PROG_DETACH commands appear in kernel 4.10. */
 # ifdef HAVE_UNION_BPF_ATTR_ATTACH_FLAGS
-static int
-prog_cgroup(int cmd)
-{
-	union bpf_attr attr = {
-		.target_fd = -1,
-		.attach_bpf_fd = -1,
-		.attach_type = 0,
-		.attach_flags = 1
-	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(cmd, (unsigned long) t_attr, sizeof(attr));
-}
-# endif
 
-static unsigned long efault;
+static unsigned int
+init_BPF_PROG_ATTACH_first(const unsigned long eop)
+{
+	static const union bpf_attr attr = { .target_fd = -1 };
+	static const unsigned int offset = sizeof(attr.target_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.target_fd, offset);
+	return offset;
+}
 
 static void
-bogus_bpf(int cmd, const char *name)
+print_BPF_PROG_ATTACH_first(const unsigned long addr)
 {
-	const unsigned long bogus_size = 1024;
-	const unsigned long bogus_addr = efault - bogus_size;
-
-	sys_bpf(cmd, efault, 4);
-	printf("bpf(%s, %#lx, %lu) = %s\n",
-	       name, efault, 4UL, errstr);
-
-	sys_bpf(cmd, efault, bogus_size);
-	printf("bpf(%s, %#lx, %lu) = %s\n",
-	       name, efault, bogus_size, errstr);
-
-	sys_bpf(cmd, bogus_addr, 0);
-	printf("bpf(%s, %#lx, %lu) = %s\n",
-	       name, bogus_addr, 0UL, errstr);
+	printf("target_fd=-1, attach_bpf_fd=0"
+	       ", attach_type=BPF_CGROUP_INET_INGRESS, attach_flags=0");
 }
 
-#define BOGUS_BPF(cmd)	bogus_bpf(cmd, #cmd)
+static unsigned int
+init_BPF_PROG_ATTACH_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.target_fd = -1,
+		.attach_bpf_fd = -2,
+		.attach_type = 2,
+		.attach_flags = 1
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, attach_flags);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_PROG_ATTACH_attr(const unsigned long addr)
+{
+	printf("target_fd=-1, attach_bpf_fd=-2"
+	       ", attach_type=BPF_CGROUP_INET_SOCK_CREATE"
+	       ", attach_flags=BPF_F_ALLOW_OVERRIDE");
+}
+
+#  define init_BPF_PROG_DETACH_first init_BPF_PROG_ATTACH_first
+
+static unsigned int
+init_BPF_PROG_DETACH_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.target_fd = -1,
+		.attach_type = 2
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, attach_type);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+
+static void
+print_BPF_PROG_DETACH_first(const unsigned long addr)
+{
+	printf("target_fd=-1, attach_type=BPF_CGROUP_INET_INGRESS");
+}
+
+static void
+print_BPF_PROG_DETACH_attr(const unsigned long addr)
+{
+	printf("target_fd=-1, attach_type=BPF_CGROUP_INET_SOCK_CREATE");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_ATTACH_FLAGS */
 
 int
 main(void)
 {
-	efault = (unsigned long) tail_alloc(1) + 1;
+	page_size = get_page_size();
+	end_of_page = (unsigned long) tail_alloc(1) + 1;
 
-	map_create();
-	printf("bpf(BPF_MAP_CREATE"
-	       ", {map_type=BPF_MAP_TYPE_UNSPEC, key_size=4"
-	       ", value_size=8, max_entries=256}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_CREATE);
+# ifdef HAVE_UNION_BPF_ATTR_INNER_MAP_FD
+	TEST_BPF(BPF_MAP_CREATE);
+# endif
 
-	map_any(BPF_MAP_LOOKUP_ELEM);
-	printf("bpf(BPF_MAP_LOOKUP_ELEM"
-	       ", {map_fd=-1, key=0xdeadbeef}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_LOOKUP_ELEM);
+# ifdef HAVE_UNION_BPF_ATTR_FLAGS
+	TEST_BPF(BPF_MAP_LOOKUP_ELEM);
+	TEST_BPF(BPF_MAP_UPDATE_ELEM);
+	TEST_BPF(BPF_MAP_DELETE_ELEM);
+	TEST_BPF(BPF_MAP_GET_NEXT_KEY);
+# endif
 
-	map_any(BPF_MAP_UPDATE_ELEM);
-	printf("bpf(BPF_MAP_UPDATE_ELEM"
-	       ", {map_fd=-1, key=0xdeadbeef"
-	       ", value=0xbadc0ded, flags=BPF_ANY}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_UPDATE_ELEM);
-
-	map_any(BPF_MAP_DELETE_ELEM);
-	printf("bpf(BPF_MAP_DELETE_ELEM"
-	       ", {map_fd=-1, key=0xdeadbeef}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_DELETE_ELEM);
-
-	map_any(BPF_MAP_GET_NEXT_KEY);
-	printf("bpf(BPF_MAP_GET_NEXT_KEY"
-	       ", {map_fd=-1, key=0xdeadbeef}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_GET_NEXT_KEY);
-
-	prog_load();
-	printf("bpf(BPF_PROG_LOAD"
-	       ", {prog_type=BPF_PROG_TYPE_UNSPEC, insn_cnt=1, insns=%p"
-	       ", license=\"GPL\", log_level=42, log_size=4096, log_buf=%p"
-	       ", kern_version=0}, %u) = %s\n",
-	       insns, log_buf, (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_PROG_LOAD);
+# ifdef HAVE_UNION_BPF_ATTR_PROG_FLAGS
+	TEST_BPF(BPF_PROG_LOAD);
+# endif
 
 # ifdef HAVE_UNION_BPF_ATTR_BPF_FD
-	obj_manage(BPF_OBJ_PIN);
-	printf("bpf(BPF_OBJ_PIN"
-	       ", {pathname=\"/sys/fs/bpf/foo/bar\", bpf_fd=-1}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_OBJ_PIN);
-
-	obj_manage(BPF_OBJ_GET);
-	printf("bpf(BPF_OBJ_GET"
-	       ", {pathname=\"/sys/fs/bpf/foo/bar\", bpf_fd=-1}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_OBJ_GET);
+	TEST_BPF(BPF_OBJ_PIN);
+	TEST_BPF(BPF_OBJ_GET);
 # endif
 
 # ifdef HAVE_UNION_BPF_ATTR_ATTACH_FLAGS
-	prog_cgroup(BPF_PROG_ATTACH);
-	printf("bpf(BPF_PROG_ATTACH"
-	       ", {target_fd=-1, attach_bpf_fd=-1"
-	       ", attach_type=BPF_CGROUP_INET_INGRESS"
-	       ", attach_flags=BPF_F_ALLOW_OVERRIDE}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_PROG_ATTACH);
-
-	prog_cgroup(BPF_PROG_DETACH);
-	printf("bpf(BPF_PROG_DETACH"
-	       ", {target_fd=-1, attach_type=BPF_CGROUP_INET_INGRESS}, %u)"
-	       " = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_PROG_DETACH);
+	TEST_BPF(BPF_PROG_ATTACH);
+	TEST_BPF(BPF_PROG_DETACH);
 # endif
 
-	bogus_bpf(0xfacefeed, "0xfacefeed /* BPF_??? */");
+	sys_bpf(0xfacefeed, end_of_page, 40);
+	printf("bpf(0xfacefeed /* BPF_??? */, %#lx, 40) = %s\n",
+	       end_of_page, errstr);
 
 	puts("+++ exited with 0 +++");
 	return 0;
@@ -231,6 +600,6 @@
 
 #else
 
-SKIP_MAIN_UNDEFINED("__NR_bpf")
+SKIP_MAIN_UNDEFINED("__NR_bpf && HAVE_UNION_BPF_ATTR_*")
 
 #endif
diff --git a/tests-m32/clone_parent.c b/tests-m32/clone_parent.c
new file mode 100644
index 0000000..2ec954e
--- /dev/null
+++ b/tests-m32/clone_parent.c
@@ -0,0 +1,80 @@
+/*
+ * Check handling of CLONE_PARENT'ed processes.
+ *
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+static int
+child(void *const arg)
+{
+	return 42;
+}
+
+#define child_stack_size	(get_page_size() / 2)
+
+#ifdef IA64
+extern int __clone2(int (*)(void *), void *, size_t, int, void *, ...);
+# define clone(fn, child_stack, flags, arg)	\
+		__clone2(fn, child_stack, child_stack_size, flags, arg)
+#endif
+
+int
+main(void)
+{
+	const pid_t pid = clone(child, tail_alloc(child_stack_size),
+				CLONE_PARENT | SIGCHLD, 0);
+	if (pid < 0)
+		perror_msg_and_fail("clone");
+
+	int status;
+	if (wait(&status) >= 0)
+		error_msg_and_fail("unexpected return code from wait");
+
+	while (!kill(pid, 0))
+		;
+	if (errno != ESRCH)
+		perror_msg_and_fail("kill");
+
+	FILE *const fp = fdopen(3, "a");
+	if (!fp)
+		perror_msg_and_fail("fdopen");
+	if (fprintf(fp, "%s: Exit of unknown pid %d ignored\n",
+		    getenv("STRACE_EXE") ?: "strace", pid) < 0)
+		perror_msg_and_fail("fprintf");
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/clone_parent.test b/tests-m32/clone_parent.test
new file mode 100755
index 0000000..66b3bbb
--- /dev/null
+++ b/tests-m32/clone_parent.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Check handling of CLONE_PARENT'ed processes.
+. "${srcdir=.}/clone_ptrace.test"
diff --git a/tests-m32/clone_ptrace.c b/tests-m32/clone_ptrace.c
new file mode 100644
index 0000000..48c099a
--- /dev/null
+++ b/tests-m32/clone_ptrace.c
@@ -0,0 +1,110 @@
+/*
+ * Check handling of CLONE_PTRACE'ed processes.
+ *
+ * Copyright (c) 2015-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+static siginfo_t sinfo;
+
+static void
+handler(const int no, siginfo_t *const si, void *const uc)
+{
+	memcpy(&sinfo, si, sizeof(sinfo));
+}
+
+static int
+child(void *const arg)
+{
+	for(;;)
+		pause();
+	return 0;
+}
+
+#define child_stack_size	(get_page_size() / 2)
+
+#ifdef IA64
+extern int __clone2(int (*)(void *), void *, size_t, int, void *, ...);
+# define clone(fn, child_stack, flags, arg)	\
+		__clone2(fn, child_stack, child_stack_size, flags, arg)
+#endif
+
+int
+main(void)
+{
+	const int sig = SIGUSR1;
+	sigset_t mask;
+	sigemptyset(&mask);
+	sigaddset(&mask, sig);
+	if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
+		perror_msg_and_fail("sigprocmask");
+
+	const pid_t pid = clone(child, tail_alloc(child_stack_size),
+				CLONE_PTRACE | SIGCHLD, 0);
+	if (pid < 0)
+		perror_msg_and_fail("clone");
+
+	static const struct sigaction sa = {
+		.sa_sigaction = handler,
+		.sa_flags = SA_SIGINFO
+	};
+	if (sigaction(SIGCHLD, &sa, NULL))
+		perror_msg_and_fail("sigaction");
+
+	kill(pid, sig);
+
+	FILE *const fp = fdopen(3, "a");
+	if (!fp)
+		perror_msg_and_fail("fdopen");
+	if (fprintf(fp, "%s: Detached unknown pid %d\n",
+		    getenv("STRACE_EXE") ?: "strace", pid) < 0)
+		perror_msg_and_fail("fprintf");
+
+	int status;
+	while (wait(&status) != pid) {
+		if (errno != EINTR)
+			perror_msg_and_fail("wait");
+	}
+	if (!WIFSIGNALED(status) || WTERMSIG(status) != sig)
+		error_msg_and_fail("unexpected child exit status %d", status);
+
+	printf("--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=%d"
+	       ", si_uid=%u, si_status=%s, si_utime=%u, si_stime=%u} ---\n"
+	       "+++ exited with 0 +++\n", pid, geteuid(), "SIGUSR1",
+	       (unsigned int) sinfo.si_utime, (unsigned int) sinfo.si_stime);
+
+	return 0;
+}
diff --git a/tests-m32/clone_ptrace.test b/tests-m32/clone_ptrace.test
new file mode 100755
index 0000000..a1f0237
--- /dev/null
+++ b/tests-m32/clone_ptrace.test
@@ -0,0 +1,17 @@
+#!/bin/sh -efu
+# Check handling of CLONE_PTRACE'ed processes.
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null 3>&1
+args="-e trace=none $args"
+> "$LOG" || fail_ "failed to write $LOG"
+
+$STRACE -o "$LOG" $args > "$EXP" 2> "$OUT"-err 3> "$EXP"-err || {
+	msg="$STRACE $args failed with code $?"
+	cat "$OUT"-err "$LOG" >&2
+	fail_ "$msg"
+}
+
+cat "$OUT"-err >&2
+match_diff "$LOG" "$EXP"
+match_diff "$OUT"-err "$EXP"-err
diff --git a/tests-m32/errno2name.c b/tests-m32/errno2name.c
index d481e2e..2354afc 100644
--- a/tests-m32/errno2name.c
+++ b/tests-m32/errno2name.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/fflush.c b/tests-m32/fflush.c
new file mode 100644
index 0000000..84a62ec
--- /dev/null
+++ b/tests-m32/fflush.c
@@ -0,0 +1,42 @@
+/*
+ * Check fflush error diagnostics.
+ *
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main(void)
+{
+	errno = ENOSPC;
+	printf("%s: /dev/full: %m\n", getenv("STRACE_EXE") ?: "strace");
+	return 0;
+}
diff --git a/tests-m32/fflush.test b/tests-m32/fflush.test
new file mode 100755
index 0000000..c0f4e3f
--- /dev/null
+++ b/tests-m32/fflush.test
@@ -0,0 +1,41 @@
+#!/bin/sh -efu
+#
+# Check fflush error diagnostics.
+#
+# Copyright (c) 2011-2017 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null
+args="-o /dev/full -e trace=none $args"
+
+$STRACE $args > "$EXP" 2> "$LOG" || {
+	msg="$STRACE $args failed with code $?"
+	cat "$LOG" >&2
+	fail_ "$msg"
+}
+
+match_diff "$LOG" "$EXP"
diff --git a/tests-m32/futimesat.c b/tests-m32/futimesat.c
index 733fd09..666ebdd 100644
--- a/tests-m32/futimesat.c
+++ b/tests-m32/futimesat.c
@@ -118,7 +118,7 @@
 	tv[0].tv_sec = 0xdeadbeefU;
 	tv[0].tv_usec = 0xfacefeedU;
 	tv[1].tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv[1].tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv[1].tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 
 	k_futimesat(kfdcwd, kfname, (uintptr_t) tv);
 	printf("futimesat(AT_FDCWD, %s, [", qname);
diff --git a/tests-m32/gen_tests.am b/tests-m32/gen_tests.am
index f1b34dd..583a0ae 100644
--- a/tests-m32/gen_tests.am
+++ b/tests-m32/gen_tests.am
@@ -1,5 +1,5 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
-GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_generic.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nlattr_inet_diag_msg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
+GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test group_req.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_crypto.gen.test netlink_generic.gen.test netlink_kobject_uevent.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test nlattr_inet_diag_msg.gen.test nlattr_inet_diag_req_compat.gen.test nlattr_inet_diag_req_v2.gen.test nlattr_ndmsg.gen.test nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test printpath-umovestr.gen.test printpath-umovestr-peekdata.gen.test printpath-umovestr-undumpable.gen.test printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test printstrn-umoven-undumpable.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
 
 $(srcdir)/_newselect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
@@ -31,6 +31,9 @@
 $(srcdir)/bpf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/btrfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -271,6 +274,9 @@
 $(srcdir)/getxxid.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/group_req.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/inet-cmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -481,9 +487,15 @@
 $(srcdir)/netlink_audit.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_crypto.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_generic.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_kobject_uevent.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_netfilter.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -505,12 +517,78 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_br_port_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_dcbmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_fib_rule_hdr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrlblmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_brport.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_xdp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_inet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_inet_diag_req_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_netconfmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_netlink_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_nlmsgerr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_packet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtgenmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_unix_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -580,6 +658,24 @@
 $(srcdir)/printstr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/printpath-umovestr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/prlimit64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -823,6 +919,15 @@
 $(srcdir)/sigsuspend.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_linger.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/socketcall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests-m32/gen_tests.in b/tests-m32/gen_tests.in
index 57fd5fd..8592e28 100644
--- a/tests-m32/gen_tests.in
+++ b/tests-m32/gen_tests.in
@@ -35,6 +35,7 @@
 aio	-a14 -e trace=io_setup,io_submit,io_getevents,io_cancel,io_destroy
 alarm	-a10
 bpf	-a20
+bpf-v	-a20 -v -e trace=bpf
 btrfs	+ioctl.test
 chmod	-a28
 chown	-a28
@@ -115,6 +116,7 @@
 gettid	-a9
 getuid32	+getuid.test
 getxxid	-a10 -e trace=getxpid,getxuid,getxgid
+group_req	-e trace=setsockopt
 inet-cmsg	-e trace=recvmsg
 init_module	-a27
 inotify	-a23 -e trace=inotify_add_watch,inotify_rm_watch
@@ -185,7 +187,9 @@
 net-icmp_filter	-e trace=getsockopt,setsockopt
 net-sockaddr	-a24 -e trace=connect
 netlink_audit	+netlink_sock_diag.test
+netlink_crypto	+netlink_sock_diag.test
 netlink_generic	+netlink_sock_diag.test
+netlink_kobject_uevent	+netlink_sock_diag.test
 netlink_netfilter	+netlink_sock_diag.test
 netlink_protocol	-e trace=sendto
 netlink_route	+netlink_sock_diag.test
@@ -193,8 +197,30 @@
 netlink_xfrm	+netlink_sock_diag.test
 newfstatat	-a32 -v -P stat.sample -P /dev/full
 nlattr		+netlink_sock_diag.test
+nlattr_crypto_user_alg		+netlink_sock_diag.test
+nlattr_br_port_msg		+netlink_sock_diag.test
+nlattr_dcbmsg			+netlink_sock_diag.test
+nlattr_fib_rule_hdr		+netlink_sock_diag.test
+nlattr_ifaddrlblmsg		+netlink_sock_diag.test
+nlattr_ifaddrmsg		+netlink_sock_diag.test
+nlattr_ifinfomsg		+netlink_sock_diag.test
+nlattr_ifla_brport		+netlink_sock_diag.test
+nlattr_ifla_port		+netlink_sock_diag.test
+nlattr_ifla_xdp			+netlink_sock_diag.test
 nlattr_inet_diag_msg		+netlink_sock_diag.test
+nlattr_inet_diag_req_compat	+netlink_sock_diag.test
+nlattr_inet_diag_req_v2		+netlink_sock_diag.test
+nlattr_ndmsg			+netlink_sock_diag.test
+nlattr_ndtmsg			+netlink_sock_diag.test
+nlattr_netconfmsg		+netlink_sock_diag.test
 nlattr_netlink_diag_msg		+netlink_sock_diag.test
+nlattr_nlmsgerr			+netlink_sock_diag.test
+nlattr_packet_diag_msg		+netlink_sock_diag-v.sh
+nlattr_rtgenmsg			+netlink_sock_diag.test
+nlattr_rtmsg			+netlink_sock_diag.test
+nlattr_smc_diag_msg		+netlink_sock_diag.test
+nlattr_tcamsg			+netlink_sock_diag.test
+nlattr_tcmsg			+netlink_sock_diag.test
 nlattr_unix_diag_msg		+netlink_sock_diag.test
 old_mmap	-a11 -e trace=mmap
 oldfstat	-a18 -v -P stat.sample
@@ -218,6 +244,12 @@
 preadv-pwritev	-a19 -eread=0 -ewrite=1 -e trace=preadv,pwritev
 preadv2-pwritev2	-a22 -eread=0 -ewrite=1 -e trace=preadv2,pwritev2
 printstr	-e trace=writev
+printpath-umovestr	-a11 -e signal=none -e trace=chdir
+printpath-umovestr-peekdata	-a11 -e signal=none -e trace=chdir
+printpath-umovestr-undumpable	-a11 -e signal=none -e trace=chdir
+printstrn-umoven	-s4096 -e signal=none -e trace=add_key
+printstrn-umoven-peekdata	-e signal=none -e trace=add_key
+printstrn-umoven-undumpable	-e signal=none -e trace=add_key
 prlimit64
 process_vm_readv	-s5 -a37
 process_vm_writev	-s5 -a38
@@ -299,6 +331,9 @@
 sigprocmask	-a34
 sigreturn	-esignal='!USR1'
 sigsuspend	-a19 -esignal=none
+so_linger	-e trace=getsockopt,setsockopt
+so_peercred	-e trace=getsockopt
+sock_filter-v	-v -e trace=getsockopt,setsockopt
 socketcall	-a20
 splice
 stat	-a32 -v -P stat.sample -P /dev/full
diff --git a/tests-m32/getcwd.c b/tests-m32/getcwd.c
index 707c25c..0c32f8d 100644
--- a/tests-m32/getcwd.c
+++ b/tests-m32/getcwd.c
@@ -20,9 +20,9 @@
 	if (res <= 0)
 		perror_msg_and_fail("getcwd");
 
-	printf("getcwd(\"");
+	printf("getcwd(");
 	print_quoted_string(cur_dir);
-	printf("\", %zu) = %ld\n", sizeof(cur_dir), res);
+	printf(", %zu) = %ld\n", sizeof(cur_dir), res);
 
 	res = syscall(__NR_getcwd, cur_dir, 0);
 	printf("getcwd(%p, 0) = %s\n", cur_dir, sprintrc(res));
diff --git a/tests-m32/group_req.c b/tests-m32/group_req.c
new file mode 100644
index 0000000..946fe5c
--- /dev/null
+++ b/tests-m32/group_req.c
@@ -0,0 +1,160 @@
+/*
+ * Check decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <net/if.h>
+#include <netinet/in.h>
+
+#if defined MCAST_JOIN_GROUP && defined MCAST_LEAVE_GROUP
+
+# include <stdio.h>
+# include <unistd.h>
+# include <sys/param.h>
+# include <sys/socket.h>
+# include <arpa/inet.h>
+
+#define	multi4addr	"224.0.0.3"
+#define	multi6addr	"ff01::c"
+
+static const char *errstr;
+
+static int
+set_opt(const int fd, const int level, const int opt,
+	const void *const val, const socklen_t len)
+{
+	int rc = setsockopt(fd, level, opt, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct group_req, greq4);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct group_req, greq6);
+	unsigned int i;
+
+	greq6->gr_interface = greq4->gr_interface = ifindex_lo();
+	if (!greq4->gr_interface)
+		perror_msg_and_skip("lo");
+
+	greq4->gr_group.ss_family = AF_INET;
+	inet_pton(AF_INET, multi4addr, &greq4->gr_group.ss_family + 2);
+
+	greq6->gr_group.ss_family = AF_INET6;
+	inet_pton(AF_INET6, multi6addr, &greq6->gr_group.ss_family + 4);
+
+	(void) close(0);
+	if (socket(AF_INET, SOCK_DGRAM, 0))
+		perror_msg_and_skip("socket");
+
+	struct {
+		const int level;
+		const char *const str_level;
+		const int name;
+		const char *const str_name;
+		const struct group_req *const val;
+		const char *const addr;
+	} opts[] = {
+		{
+			ARG_STR(SOL_IP), ARG_STR(MCAST_JOIN_GROUP), greq4,
+			"gr_group={sa_family=AF_INET, sin_port=htons(65535)"
+			", sin_addr=inet_addr(\"" multi4addr "\")}"
+		},
+		{
+			ARG_STR(SOL_IP), ARG_STR(MCAST_LEAVE_GROUP), greq4,
+			"gr_group={sa_family=AF_INET, sin_port=htons(65535)"
+			", sin_addr=inet_addr(\"" multi4addr "\")}"
+		},
+		{
+			ARG_STR(SOL_IPV6), ARG_STR(MCAST_JOIN_GROUP), greq6,
+			"gr_group={sa_family=AF_INET6, sin6_port=htons(65535)"
+			", inet_pton(AF_INET6, \"" multi6addr "\", &sin6_addr)"
+			", sin6_flowinfo=htonl(4294967295)"
+			", sin6_scope_id=4294967295}"
+		},
+		{
+			ARG_STR(SOL_IPV6), ARG_STR(MCAST_LEAVE_GROUP), greq6,
+			"gr_group={sa_family=AF_INET6, sin6_port=htons(65535)"
+			", inet_pton(AF_INET6, \"" multi6addr "\", &sin6_addr)"
+			", sin6_flowinfo=htonl(4294967295)"
+			", sin6_scope_id=4294967295}"
+		}
+	};
+
+	for (i = 0; i < ARRAY_SIZE(opts); ++i) {
+		/* optlen < 0, EINVAL */
+		set_opt(0, opts[i].level, opts[i].name, opts[i].val, -1U);
+		printf("setsockopt(0, %s, %s, %p, -1) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, errstr);
+
+		/* optlen < sizeof(struct group_req), EINVAL */
+		set_opt(0, opts[i].level, opts[i].name, opts[i].val,
+			sizeof(*opts[i].val) - 1);
+		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, (unsigned int) sizeof(*opts[i].val) - 1,
+		       errstr);
+
+		/* optval EFAULT */
+		set_opt(0, opts[i].level, opts[i].name,
+			(const char *) opts[i].val + 1, sizeof(*opts[i].val));
+		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       (const char *) opts[i].val + 1,
+		       (unsigned int) sizeof(*opts[i].val), errstr);
+
+		/* classic */
+		set_opt(0, opts[i].level, opts[i].name,
+			opts[i].val, sizeof(*opts[i].val));
+		printf("setsockopt(0, %s, %s"
+		       ", {gr_interface=%s, %s}, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       IFINDEX_LO_STR, opts[i].addr,
+		       (unsigned int) sizeof(*opts[i].val), errstr);
+
+		/* optlen > sizeof(struct group_req), shortened */
+		set_opt(0, opts[i].level, opts[i].name, opts[i].val, INT_MAX);
+		printf("setsockopt(0, %s, %s"
+		       ", {gr_interface=%s, %s}, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       IFINDEX_LO_STR, opts[i].addr,
+		       INT_MAX, errstr);
+	}
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("MCAST_JOIN_GROUP && MCAST_LEAVE_GROUP")
+
+#endif
diff --git a/tests-m32/group_req.gen.test b/tests-m32/group_req.gen.test
new file mode 100755
index 0000000..0e753b6
--- /dev/null
+++ b/tests-m32/group_req.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (group_req -e trace=setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=setsockopt
diff --git a/tests-m32/ifindex.c b/tests-m32/ifindex.c
new file mode 100644
index 0000000..390a135
--- /dev/null
+++ b/tests-m32/ifindex.c
@@ -0,0 +1,55 @@
+/*
+ * Proxy wrappers for if_nametoindex.
+ *
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_IF_INDEXTONAME
+
+# include <net/if.h>
+
+unsigned int
+ifindex_lo(void)
+{
+	static unsigned int index;
+
+	if (!index)
+		index = if_nametoindex("lo");
+
+	return index;
+}
+
+#else /* !HAVE_IF_INDEXTONAME */
+
+unsigned int
+ifindex_lo(void)
+{
+	return 1;
+}
+
+#endif
diff --git a/tests-m32/inet-cmsg.c b/tests-m32/inet-cmsg.c
index b530016..fb3d430 100644
--- a/tests-m32/inet-cmsg.c
+++ b/tests-m32/inet-cmsg.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,9 +39,10 @@
 static void
 print_pktinfo(const struct cmsghdr *c)
 {
-	printf("IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex(\"lo\")"
-	       ", ipi_spec_dst=inet_addr(\"127.0.0.1\")"
-	       ", ipi_addr=inet_addr(\"127.0.0.1\")}");
+	printf("IP_PKTINFO, cmsg_data={ipi_ifindex=%s"
+	       ", ipi_spec_dst=inet_addr(\"%s\")"
+	       ", ipi_addr=inet_addr(\"%s\")}",
+	       IFINDEX_LO_STR, "127.0.0.1", "127.0.0.1");
 }
 
 static void
diff --git a/tests-m32/init.sh b/tests-m32/init.sh
index 2d4d0b4..4cb8f1a 100644
--- a/tests-m32/init.sh
+++ b/tests-m32/init.sh
@@ -45,7 +45,7 @@
 
 dump_log_and_fail_with()
 {
-	cat < "$LOG"
+	cat < "$LOG" >&2
 	fail_ "$*"
 }
 
@@ -341,6 +341,7 @@
 	*) NAME=
 esac
 
+STRACE_EXE=
 if [ -n "$NAME" ]; then
 	TESTDIR="$NAME.dir"
 	rm -rf -- "$TESTDIR"
@@ -356,17 +357,23 @@
 		STRACE=../../strace
 		case "${LOG_COMPILER-} ${LOG_FLAGS-}" in
 			*--suppressions=*--error-exitcode=*--tool=*)
+			STRACE_EXE="$STRACE"
 			# add valgrind command prefix
 			STRACE="${LOG_COMPILER-} ${LOG_FLAGS-} $STRACE"
 			;;
 		esac
 	}
+
+	trap 'dump_log_and_fail_with "time limit ($TIMEOUT_DURATION) exceeded"' XCPU
 else
-	[ -n "${STRACE-}" ] ||
-		STRACE=../strace
+	: "${STRACE:=../strace}"
 fi
 
-: "${TIMEOUT_DURATION:=300}"
+# Export $STRACE_EXE to check_PROGRAMS.
+: "${STRACE_EXE:=$STRACE}"
+export STRACE_EXE
+
+: "${TIMEOUT_DURATION:=600}"
 : "${SLEEP_A_BIT:=sleep 1}"
 
 [ -z "${VERBOSE-}" ] ||
diff --git a/tests-m32/ioctl_block.c b/tests-m32/ioctl_block.c
index e44c4c4..2bb6808 100644
--- a/tests-m32/ioctl_block.c
+++ b/tests-m32/ioctl_block.c
@@ -154,7 +154,7 @@
 	blkpg->data = (void *) (unsigned long) 0xcafef00dfffffeedULL;
 
 	ioctl(-1, BLKPG, blkpg);
-	printf("ioctl(-1, BLKPG, {%s, flags=%d, datalen=%d"
+	printf("ioctl(-1, BLKPG, {op=%s, flags=%d, datalen=%d"
 	       ", data=%#lx}) = -1 EBADF (%m)\n",
 	       "BLKPG_RESIZE_PARTITION", blkpg->flags, blkpg->datalen,
 	       (unsigned long) blkpg->data);
@@ -169,9 +169,9 @@
 	blkpg->data = bp;
 
 	ioctl(-1, BLKPG, blkpg);
-	printf("ioctl(-1, BLKPG, {%s, flags=%d, datalen=%d"
+	printf("ioctl(-1, BLKPG, {op=%s, flags=%d, datalen=%d"
 	       ", data={start=%lld, length=%lld, pno=%d"
-	       ", devname=\"%.*s\", volname=\"%.*s\"}})"
+	       ", devname=\"%.*s\"..., volname=\"%.*s\"...}})"
 	       " = -1 EBADF (%m)\n",
 	       "BLKPG_ADD_PARTITION",
 	       blkpg->flags, blkpg->datalen,
diff --git a/tests-m32/ioctl_dm.c b/tests-m32/ioctl_dm.c
index 544d70b..2f77e04 100644
--- a/tests-m32/ioctl_dm.c
+++ b/tests-m32/ioctl_dm.c
@@ -251,7 +251,7 @@
 	strncpy(dm_arg->uuid, str129, sizeof(dm_arg->uuid));
 	ioctl(-1, DM_VERSION, dm_arg);
 	printf("ioctl(-1, DM_VERSION, {version=4.1.2, data_size=%zu, "
-	       "dev=makedev(18, 52), name=\"%.127s\", uuid=\"%.128s\", "
+	       "dev=makedev(18, 52), name=\"%.127s\"..., uuid=\"%.128s\"..., "
 	       "flags=0}) = -1 EBADF (%m)\n",
 	       min_sizeof_dm_ioctl, str129, str129);
 
diff --git a/tests-m32/ioctl_loop.c b/tests-m32/ioctl_loop.c
index 4dcbf9a..3411a4d 100644
--- a/tests-m32/ioctl_loop.c
+++ b/tests-m32/ioctl_loop.c
@@ -39,6 +39,7 @@
 #include <sys/sysmacros.h>
 #include <linux/ioctl.h>
 #include <linux/loop.h>
+#include "print_fields.h"
 #include "xlat/loop_cmds.h"
 
 #ifndef ABBREV
@@ -81,8 +82,7 @@
 	else
 		printf("%#x /* LO_FLAGS_??? */", info->lo_flags);
 
-	printf(", lo_name=\"%.*s\"",
-	       (int) sizeof(info->lo_name) - 1, info->lo_name);
+	PRINT_FIELD_CSTRING(", ", *info, lo_name);
 
 	if (VERBOSE || print_encrypt)
 		printf(", lo_encrypt_key=\"%.*s\"",
@@ -144,17 +144,16 @@
 		printf("%s", flags);
 	else
 		printf("%#x /* LO_FLAGS_??? */", info64->lo_flags);
-	printf(", lo_file_name=\"%.*s\"",
-	       (int) sizeof(info64->lo_file_name) - 1, info64->lo_file_name);
+	PRINT_FIELD_CSTRING(", ", *info64, lo_file_name);
 
-	if (VERBOSE || print_encrypt)
-		printf(", lo_crypt_name=\"%.*s\", lo_encrypt_key=\"%.*s\"",
-		       (int) sizeof(info64->lo_crypt_name) - 1,
-		       info64->lo_crypt_name,
+	if (VERBOSE || print_encrypt) {
+		PRINT_FIELD_CSTRING(", ", *info64, lo_crypt_name);
+		printf(", lo_encrypt_key=\"%.*s\"",
 		       encrypt_key ? (int) strlen(encrypt_key) :
 		       (int) sizeof(info64->lo_encrypt_key),
 		       encrypt_key ? encrypt_key :
 		       (char *) info64->lo_encrypt_key);
+	}
 
 # if VERBOSE
 	printf(", lo_init=[%#" PRIx64 ", %#" PRIx64 "]}",
diff --git a/tests-m32/ioctl_uffdio.c b/tests-m32/ioctl_uffdio.c
index 817e3c7..973de39 100644
--- a/tests-m32/ioctl_uffdio.c
+++ b/tests-m32/ioctl_uffdio.c
@@ -44,6 +44,9 @@
 # include <linux/ioctl.h>
 # include <linux/userfaultfd.h>
 
+#include "xlat.h"
+#include "xlat/uffd_api_features.h"
+
 int
 main(void)
 {
@@ -70,10 +73,14 @@
 	api_struct->api = UFFD_API;
 	api_struct->features = 0;
 	rc = ioctl(fd, UFFDIO_API, api_struct);
-	printf("ioctl(%d, UFFDIO_API, {api=0xaa, features=0, "
-	       "features.out=%#" PRIx64 ", ioctls=1<<_UFFDIO_REGISTER|"
-	       "1<<_UFFDIO_UNREGISTER|1<<_UFFDIO_API",
-	       fd, (uint64_t)api_struct->features);
+	printf("ioctl(%d, UFFDIO_API, {api=0xaa, features=0", fd);
+	if (api_struct->features) {
+		printf(" => features=");
+		printflags(uffd_api_features, api_struct->features,
+			   "UFFD_FEATURE_???");
+	}
+	printf(", ioctls=1<<_UFFDIO_REGISTER|"
+	       "1<<_UFFDIO_UNREGISTER|1<<_UFFDIO_API");
 	api_struct->ioctls &= ~(1ull<<_UFFDIO_REGISTER|
 				1ull<<_UFFDIO_UNREGISTER|
 				1ull<<_UFFDIO_API);
diff --git a/tests-m32/ioctl_v4l2.c b/tests-m32/ioctl_v4l2.c
index cc5dee6..47a538e 100644
--- a/tests-m32/ioctl_v4l2.c
+++ b/tests-m32/ioctl_v4l2.c
@@ -502,12 +502,12 @@
 	struct v4l2_requestbuffers *const p_v4l2_requestbuffers =
 		page + size - sizeof(*p_v4l2_requestbuffers);
 	ioctl(-1, VIDIOC_REQBUFS, p_v4l2_requestbuffers);
-	printf("ioctl(-1, VIDIOC_REQBUFS, {count=%u, type=%#x"
-	       " /* V4L2_BUF_TYPE_??? */, memory=%#x /* V4L2_MEMORY_??? */})"
+	printf("ioctl(-1, VIDIOC_REQBUFS, {type=%#x /* V4L2_BUF_TYPE_??? */, "
+	       "memory=%#x /* V4L2_MEMORY_??? */, count=%u})"
 	       " = -1 EBADF (%m)\n",
-	       p_v4l2_requestbuffers->count,
 	       p_v4l2_requestbuffers->type,
-	       p_v4l2_requestbuffers->memory);
+	       p_v4l2_requestbuffers->memory,
+	       p_v4l2_requestbuffers->count);
 
 	/* VIDIOC_QUERYBUF */
 	ioctl(-1, VIDIOC_QUERYBUF, 0);
diff --git a/tests-m32/ip_mreq.c b/tests-m32/ip_mreq.c
index 4bfe00f..3f4648c 100644
--- a/tests-m32/ip_mreq.c
+++ b/tests-m32/ip_mreq.c
@@ -30,21 +30,22 @@
 #include <netinet/in.h>
 
 #if defined IP_ADD_MEMBERSHIP && defined IPV6_ADD_MEMBERSHIP \
- && defined IPV6_JOIN_ANYCAST && defined HAVE_IF_INDEXTONAME
+ && defined IPV6_JOIN_ANYCAST
 
 # include <stdio.h>
 # include <unistd.h>
+# include <sys/param.h>
 # include <sys/socket.h>
 # include <arpa/inet.h>
 # include <net/if.h>
 
+#define	multi4addr	"224.0.0.3"
+#define	multi6addr	"ff01::c"
+#define	interface	"127.0.0.1"
+
 int
 main(void)
 {
-	static const char multi4addr[] = "224.0.0.3";
-	static const char multi6addr[] = "ff01::c";
-	static const char interface[] = "127.0.0.1";
-
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct ip_mreq, m4);
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct ipv6_mreq, m6);
 	unsigned int i;
@@ -54,7 +55,7 @@
 	inet_pton(AF_INET, interface, &m4->imr_interface);
 	inet_pton(AF_INET6, multi6addr, &m6->ipv6mr_multiaddr);
 
-	m6->ipv6mr_interface = if_nametoindex("lo");
+	m6->ipv6mr_interface = ifindex_lo();
 	if (!m6->ipv6mr_interface)
 		perror_msg_and_skip("lo");
 
@@ -63,87 +64,91 @@
 		perror_msg_and_skip("socket");
 
 	struct {
-		int level;
-		const char *str_level;
-		int optname;
-		const char *str_optname;
-		void *optval;
-		unsigned int optsize;
-	} short_any[] = {
+		const int level;
+		const char *const str_level;
+		const int name;
+		const char *str_name;
+		const void *const val;
+		unsigned int size;
+		const char *const addr;
+	} opts[] = {
 		{
 			ARG_STR(SOL_IP), ARG_STR(IP_ADD_MEMBERSHIP),
-			m4, sizeof(*m4)
+			m4, sizeof(*m4),
+			"{imr_multiaddr=inet_addr(\"" multi4addr
+			"\"), imr_interface=inet_addr(\"" interface "\")}"
 		},
 		{
 			ARG_STR(SOL_IP), ARG_STR(IP_DROP_MEMBERSHIP),
-			m4, sizeof(*m4)
+			m4, sizeof(*m4),
+			"{imr_multiaddr=inet_addr(\"" multi4addr
+			"\"), imr_interface=inet_addr(\"" interface "\")}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_ADD_MEMBERSHIP),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_DROP_MEMBERSHIP),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_JOIN_ANYCAST),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_LEAVE_ANYCAST),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		}
 	};
 
-	for (i = 0; i < ARRAY_SIZE(short_any); ++i) {
-		rc = setsockopt(0, short_any[i].level, short_any[i].optname,
-				short_any[i].optval, 1);
-		printf("setsockopt(0, %s, %s, \"\\%hho\", 1) = %s\n",
-		       short_any[i].str_level, short_any[i].str_optname,
-		       *(unsigned char *) short_any[i].optval,
-		       sprintrc(rc));
+	for (i = 0; i < ARRAY_SIZE(opts); ++i) {
+		/* optlen < 0, EINVAL */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, -1);
+		printf("setsockopt(0, %s, %s, %p, -1) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, sprintrc(rc));
 
-		rc = setsockopt(0, short_any[i].level, short_any[i].optname,
-				short_any[i].optval + 1, short_any[i].optsize);
+		/* optlen < sizeof(struct), EINVAL */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, opts[i].size - 1);
 		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
-		       short_any[i].str_level, short_any[i].str_optname,
-		       short_any[i].optval + 1, short_any[i].optsize,
-		       sprintrc(rc));
-	}
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, opts[i].size - 1, sprintrc(rc));
 
-	struct {
-		int optname;
-		const char *str_optname;
-	} long_ip[] = {
-		{ ARG_STR(IP_ADD_MEMBERSHIP) },
-		{ ARG_STR(IP_DROP_MEMBERSHIP) }
-	}, long_ipv6[] = {
-		{ ARG_STR(IPV6_ADD_MEMBERSHIP) },
-		{ ARG_STR(IPV6_DROP_MEMBERSHIP) },
-		{ ARG_STR(IPV6_JOIN_ANYCAST) },
-		{ ARG_STR(IPV6_LEAVE_ANYCAST) }
-	};
+		/* optval EFAULT */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val + 1, opts[i].size);
+		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val + 1, opts[i].size, sprintrc(rc));
 
-	for (i = 0; i < ARRAY_SIZE(long_ip); ++i) {
-		rc = setsockopt(0, SOL_IP, long_ip[i].optname,
-				m4, sizeof(*m4));
-		printf("setsockopt(0, SOL_IP, %s"
-		       ", {imr_multiaddr=inet_addr(\"%s\")"
-		       ", imr_interface=inet_addr(\"%s\")}, %u) = %s\n",
-		       long_ip[i].str_optname, multi4addr,
-		       interface, (unsigned) sizeof(*m4), sprintrc(rc));
-	}
+		/* classic */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, opts[i].size);
+		printf("setsockopt(0, %s, %s, %s, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].addr, opts[i].size, sprintrc(rc));
 
-	for (i = 0; i < ARRAY_SIZE(long_ipv6); ++i) {
-		rc = setsockopt(0, SOL_IPV6, long_ipv6[i].optname,
-				m6, sizeof(*m6));
-		printf("setsockopt(0, SOL_IPV6, %s"
-		       ", {inet_pton(AF_INET6, \"%s\", &ipv6mr_multiaddr)"
-		       ", ipv6mr_interface=if_nametoindex(\"lo\")}"
-		       ", %u) = %s\n",
-		       long_ipv6[i].str_optname, multi6addr,
-		       (unsigned) sizeof(*m6), sprintrc(rc));
+		/* optlen > sizeof(struct), shortened */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, INT_MAX);
+		printf("setsockopt(0, %s, %s, %s, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].addr, INT_MAX, sprintrc(rc));
 	}
 
 	puts("+++ exited with 0 +++");
@@ -153,6 +158,6 @@
 #else
 
 SKIP_MAIN_UNDEFINED("IP_ADD_MEMBERSHIP && IPV6_ADD_MEMBERSHIP"
-		    " && IPV6_JOIN_ANYCAST && HAVE_IF_INDEXTONAME")
+		    " && IPV6_JOIN_ANYCAST")
 
 #endif
diff --git a/tests-m32/ipc_msgbuf.c b/tests-m32/ipc_msgbuf.c
index 9d149fa..d108389 100644
--- a/tests-m32/ipc_msgbuf.c
+++ b/tests-m32/ipc_msgbuf.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/is_linux_mips_n64.c b/tests-m32/is_linux_mips_n64.c
new file mode 100644
index 0000000..843203b
--- /dev/null
+++ b/tests-m32/is_linux_mips_n64.c
@@ -0,0 +1,45 @@
+/*
+ * Check whether the kernel supports MIPS n64 syscalls.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef MIPS
+
+int
+main(void)
+{
+	__asm__(".set noreorder; li $a0, 0; li $v0, 5058; syscall");
+	return 77;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("MIPS")
+
+#endif
diff --git a/tests-m32/keyctl.c b/tests-m32/keyctl.c
index 492c62a..2d8b9ec 100644
--- a/tests-m32/keyctl.c
+++ b/tests-m32/keyctl.c
@@ -2,6 +2,7 @@
  * Check decoding of keyctl syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,6 +37,7 @@
 # include <linux/types.h>
 # include <linux/keyctl.h>
 
+# include <assert.h>
 # include <errno.h>
 # include <inttypes.h>
 # include <stdarg.h>
@@ -55,6 +57,15 @@
 };
 # endif
 
+# ifndef HAVE_STRUCT_KEYCTL_KDF_PARAMS
+struct keyctl_kdf_params {
+	char *hashname;
+	char *otherinfo;
+	uint32_t otherinfolen;
+	uint32_t __spare[8];
+};
+# endif
+
 # include "xlat.h"
 # include "xlat/keyctl_commands.h"
 
@@ -76,6 +87,9 @@
 bool nul_terminated_buf = true;
 bool buf_in_arg;
 
+/* From ioctl_dm.c */
+# define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
+
 /*
  * When this is called with positive size, the buffer provided is an "out"
  * argument and rc contains resulting size (globally defined nul_terminated_buf
@@ -97,17 +111,11 @@
 
 	if (!nul_terminated_buf ||
 	    (strnlen(str, limited_size) == limited_size)) {
-		printf("\"");
 		print_quoted_memory(str, limited_size);
 		if (print_size > limit)
-			printf("\"...");
-		else
-			printf("\"");
-	} else {
-		printf("\"");
+			printf("...");
+	} else
 		print_quoted_string(str);
-		printf("\"");
-	}
 }
 
 static void
@@ -121,9 +129,9 @@
 		printf("%s", str);
 	} else {
 		if (size == sizeof(uint64_t))
-			printf(fmt, (uint64_t)arg);
+			printf(fmt, (uint64_t) arg);
 		else if (size == sizeof(uint32_t))
-			printf(fmt, (uint32_t)arg);
+			printf(fmt, (uint32_t) arg);
 		else
 			print_quoted_string_limit((void *) (uintptr_t) arg,
 						  size, rc);
@@ -189,6 +197,85 @@
 }
 
 int
+append_str(char **buf, size_t *left, const char *fmt, ...)
+{
+	int ret;
+	va_list ap;
+
+	va_start(ap, fmt);
+	ret = vsnprintf(*buf, *left, fmt, ap);
+	va_end(ap);
+
+	assert((ret >= 0) && ((unsigned) ret < *left));
+
+	*left -= ret;
+	*buf += ret;
+
+	return ret;
+}
+
+const char *
+kckdfp_to_str(struct keyctl_kdf_params *kdf, bool deref_hash, bool deref_oi,
+	       bool print_spare, const char *hash_str, const char *oi_str)
+{
+	static char buf[4096];
+
+	size_t left = sizeof(buf);
+	char *pos = buf;
+
+	append_str(&pos, &left, "{hashname=");
+
+	if (deref_hash && hash_str) {
+		append_str(&pos, &left, "%s", hash_str);
+	} else if (!kdf->hashname) {
+		append_str(&pos, &left, "NULL");
+	} else if (deref_hash) {
+		append_str(&pos, &left, "\"%.*s\"", limit, kdf->hashname);
+
+		if (strnlen(kdf->hashname, limit + 1) > limit)
+			append_str(&pos, &left, "...");
+	} else {
+		append_str(&pos, &left, "%p", kdf->hashname);
+	}
+
+	append_str(&pos, &left, ", otherinfo=");
+
+	if (deref_oi && oi_str) {
+		append_str(&pos, &left, "%s", oi_str);
+	} else if (!kdf->otherinfo) {
+		append_str(&pos, &left, "NULL");
+	} else if (deref_oi) {
+		append_str(&pos, &left, "\"%.*s\"", limit, kdf->otherinfo);
+
+		if (strnlen(kdf->otherinfo, limit + 1) > limit)
+			append_str(&pos, &left, "...");
+	} else {
+		append_str(&pos, &left, "%p", kdf->otherinfo);
+	}
+
+	append_str(&pos, &left, ", otherinfolen=%u", kdf->otherinfolen);
+
+	if (print_spare) {
+		size_t i;
+
+		append_str(&pos, &left, ", __spare=[");
+
+		for (i = 0; i < ARRAY_SIZE(kdf->__spare); i++) {
+			if  (i)
+				append_str(&pos, &left, ", ");
+
+			append_str(&pos, &left, "%#x", kdf->__spare[i]);
+		}
+
+		append_str(&pos, &left, "]");
+	}
+
+	append_str(&pos, &left, "}");
+
+	return buf;
+}
+
+int
 main(void)
 {
 	enum { PR_LIMIT = 10, IOV_SIZE = 11, IOV_STR_SIZE = 4096 };
@@ -216,6 +303,32 @@
 	static const char *kcdhp_str = "{private=KEY_SPEC_GROUP_KEYRING, "
 		"prime=1234567890, base=-1153374643}";
 
+	/*
+	 * It's bigger than current hash name size limit, but since it's
+	 * implementation-dependent and totally internal, we do not rely
+	 * on it much.
+	 */
+	static const char long_hash_data[] = STR32 STR32 STR32 STR32 "xxx";
+	static const char short_hash_data[] = "hmac(aes)";
+	static const char otherinfo1_data[] = "\1\2 OH HAI THAR\255\0\1";
+	static const char otherinfo2_data[] = "\1\2\n\255\0\1";
+	static const struct keyctl_kdf_params kckdfp_data[] = {
+		[0] = { NULL, NULL, 0, { 0 } },
+		[1] = { NULL /* Changed to unaccessible address in copy */,
+			NULL, 0xbadc0dedU, { [7] = 0xdeadfeedU } },
+		[2] = { NULL /* long_hash_data */,
+			NULL /* Changed to unaccessible address in copy */,
+			0, { 0 } },
+		[3] = { NULL /* unterminated1 */,
+			NULL /* otherinfo_data */, 0, { 1 } },
+		[4] = { NULL /* short_hash_data */,
+			NULL /* otherinfo1_data */, sizeof(otherinfo1_data),
+			{ 0, 0xfacebeef, 0, 0xba5e1ead } },
+		[5] = { NULL /* short_hash_data */,
+			NULL /* otherinfo2_data */, sizeof(otherinfo2_data),
+			{ 0 } },
+	};
+
 	char *bogus_str = tail_memdup(unterminated1, sizeof(unterminated1));
 	char *bogus_desc = tail_memdup(unterminated2, sizeof(unterminated2));
 	char *short_type = tail_memdup(short_type_str, sizeof(short_type_str));
@@ -223,6 +336,15 @@
 	char *long_type = tail_memdup(long_type_str, sizeof(long_type_str));
 	char *long_desc = tail_memdup(long_desc_str, sizeof(long_desc_str));
 	char *kcdhp = tail_memdup(&kcdhp_data, sizeof(kcdhp_data));
+	char *kckdfp_long_hash = tail_memdup(long_hash_data,
+					     sizeof(long_hash_data));
+	char *kckdfp_short_hash = tail_memdup(short_hash_data,
+					      sizeof(short_hash_data));
+	char *kckdfp_otherinfo1 = tail_memdup(otherinfo1_data,
+					      sizeof(otherinfo1_data));
+	char *kckdfp_otherinfo2 = tail_memdup(otherinfo2_data,
+					      sizeof(otherinfo2_data));
+	char *kckdfp_char = tail_alloc(sizeof(kckdfp_data[0]));
 	struct iovec *key_iov = tail_alloc(sizeof(*key_iov) * IOV_SIZE);
 	char *bogus_buf1 = tail_alloc(9);
 	char *bogus_buf2 = tail_alloc(256);
@@ -230,7 +352,7 @@
 	char *key_iov_str2 = tail_alloc(4096);
 	ssize_t ret;
 	ssize_t kis_size = 0;
-	int i;
+	size_t i;
 
 	key_iov[0].iov_base = short_type;
 	key_iov[0].iov_len = sizeof(short_type_str);
@@ -299,40 +421,48 @@
 	do_keyctl((kernel_ulong_t) 0xbadc0dedfacefeedULL,
 		  "0xfacefeed /* KEYCTL_??? */",
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL, kulong_fmt,
+			(kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL,
+			kulong_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee2badc0de6ULL, NULL, kulong_fmt,
+			(kernel_ulong_t) 0xdeadfee2badc0de6ULL, NULL,
+			kulong_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee3badc0de7ULL, NULL, kulong_fmt,
+			(kernel_ulong_t) 0xdeadfee3badc0de7ULL, NULL,
+			kulong_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, kulong_fmt);
+			(kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL,
+			kulong_fmt);
 
 
 	/* GET_KEYRING_ID */
 	do_keyctl(ARG_STR(KEYCTL_GET_KEYRING_ID),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xbadc0dedffffffffLLU, "-1",
-		  NULL, 0UL);
+			(kernel_ulong_t) 0xbadc0dedffffffffLLU, "-1", NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_KEYRING_ID),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), "%d",
-		  sizeof(int), 3141592653U, NULL, "%d",
-		  NULL, 0UL);
+		  sizeof(int), 3141592653U, NULL, "%d", NULL,
+		  0UL);
 
 
 	/* KEYCTL_JOIN_SESSION_KEYRING */
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
-		  sizeof(char *), ARG_STR(NULL), NULL, 0UL);
+		  sizeof(char *), ARG_STR(NULL), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
-		  sizeof(char *), bogus_str, NULL, ptr_fmt, 0UL);
+		  sizeof(char *), bogus_str, NULL, ptr_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
-		  sizeof(char *), ARG_STR("bogus name"), NULL, 0UL);
+		  sizeof(char *), ARG_STR("bogus name"), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
 		  sizeof(char *), "very long keyring name", "\"very long \"...",
-		  NULL, 0UL);
+			NULL,
+		  0UL);
 
 
 	/* KEYCTL_UPDATE */
@@ -342,19 +472,19 @@
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 0, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(char *), bogus_str, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -369,11 +499,14 @@
 
 	/* KEYCTL_REVOKE */
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -383,29 +516,33 @@
 	do_keyctl(ARG_STR(KEYCTL_CHOWN),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(uid_t), ARG_STR(-1), NULL,
-		  sizeof(gid_t), ARG_STR(-1), NULL, 0UL);
+		  sizeof(gid_t), ARG_STR(-1), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CHOWN),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
-		  sizeof(gid_t), 3141592653U, NULL, "%u", 0UL);
+		  sizeof(gid_t), 3141592653U, NULL, "%u",
+		  0UL);
 
 
 	/* KEYCTL_SETPERM */
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
 		  sizeof(uint32_t), 0xffffffffU,
-		  "KEY_POS_VIEW|KEY_POS_READ|KEY_POS_WRITE|"
-		  "KEY_POS_SEARCH|KEY_POS_LINK|KEY_POS_SETATTR|"
-		  "KEY_USR_VIEW|KEY_USR_READ|KEY_USR_WRITE|"
-		  "KEY_USR_SEARCH|KEY_USR_LINK|KEY_USR_SETATTR|"
-		  "KEY_GRP_VIEW|KEY_GRP_READ|KEY_GRP_WRITE|"
-		  "KEY_GRP_SEARCH|KEY_GRP_LINK|KEY_GRP_SETATTR|"
-		  "KEY_OTH_VIEW|KEY_OTH_READ|KEY_OTH_WRITE|"
-		  "KEY_OTH_SEARCH|KEY_OTH_LINK|KEY_OTH_SETATTR|"
-		  "0xc0c0c0c0", NULL, 0UL);
+			"KEY_POS_VIEW|KEY_POS_READ|KEY_POS_WRITE|"
+			"KEY_POS_SEARCH|KEY_POS_LINK|KEY_POS_SETATTR|"
+			"KEY_USR_VIEW|KEY_USR_READ|KEY_USR_WRITE|"
+			"KEY_USR_SEARCH|KEY_USR_LINK|KEY_USR_SETATTR|"
+			"KEY_GRP_VIEW|KEY_GRP_READ|KEY_GRP_WRITE|"
+			"KEY_GRP_SEARCH|KEY_GRP_LINK|KEY_GRP_SETATTR|"
+			"KEY_OTH_VIEW|KEY_OTH_READ|KEY_OTH_WRITE|"
+			"KEY_OTH_SEARCH|KEY_OTH_LINK|KEY_OTH_SETATTR|"
+			"0xc0c0c0c0", NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(uint32_t), 0, NULL, "%#x", 0UL);
+		  sizeof(uint32_t), 0, NULL, "%#x",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(uint32_t), 0xc0c0c0c0, "0xc0c0c0c0 /* KEY_??? */",
@@ -418,38 +555,41 @@
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -4, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
+		  0UL);
 
 
 	/* KEYCTL_CLEAR */
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -458,10 +598,12 @@
 	/* KEYCTL_LINK */
 	do_keyctl(ARG_STR(KEYCTL_LINK),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_LINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_LINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -475,7 +617,8 @@
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -512,6 +655,34 @@
 		  sizeof(long_type_str), long_desc, NULL, NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 
+	/* KEYCTL_RESTRICT_KEYRING */
+
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(char *), ARG_STR(NULL), NULL,
+		  sizeof(char *), ARG_STR(NULL), NULL,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
+		  sizeof(char *), (char *) 0xfffff00dfffff157ULL, NULL, ptr_fmt,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  sizeof(char *), bogus_str, NULL, ptr_fmt,
+		  sizeof(char *), bogus_desc, NULL, ptr_fmt,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
+		  sizeof(short_type_str), short_type, NULL, NULL,
+		  sizeof(short_desc_str), short_desc, NULL, NULL,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), 0, NULL, "%d",
+		  sizeof(long_type_str), long_type, NULL, NULL,
+		  sizeof(long_type_str), long_desc, NULL, NULL,
+			  NULL);
+
 	buf_in_arg = false;
 
 
@@ -532,23 +703,23 @@
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -4, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
+		  0UL);
 
 	nul_terminated_buf = true;
 
@@ -559,32 +730,32 @@
 		  sizeof(int32_t), 0, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  sizeof(int32_t), 0, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
 		  sizeof(int32_t), bogus_key1, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(char *), bogus_str, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 32LLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 32LLU, NULL, ksize_fmt,
 		  sizeof(int32_t), bogus_key2, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(short_type_str), short_desc, NULL, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) sizeof(short_type_str) - 1, NULL,
-			  ksize_fmt,
+			(kernel_ulong_t) sizeof(short_type_str) - 1, NULL,
+			ksize_fmt,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  sizeof(long_type_str), long_desc, NULL, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) sizeof(long_type_str), NULL, ksize_fmt,
+			(kernel_ulong_t) sizeof(long_type_str), NULL, ksize_fmt,
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 	buf_in_arg = false;
@@ -594,16 +765,20 @@
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(int32_t), 0, NULL, "%d",
 		  sizeof(uint32_t), 0, NULL, "%u",
-		  sizeof(int32_t), 0, NULL, "%d", 0UL);
+		  sizeof(int32_t), 0, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(uint32_t), 3141592653U, NULL, "%u",
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
@@ -632,24 +807,30 @@
 	/* KEYCTL_SET_TIMEOUT */
 	do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
 		  sizeof(int32_t), 0, NULL, "%d",
-		  sizeof(uint32_t), 0, NULL, "%u", 0UL);
+		  sizeof(uint32_t), 0, NULL, "%u",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(uint32_t), 3141592653U, NULL, "%u", 0UL);
+		  sizeof(uint32_t), 3141592653U, NULL, "%u",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
 		  0UL);
 
 
 	/* KEYCTL_ASSUME_AUTHORITY */
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -659,28 +840,29 @@
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
-		  sizeof(uint32_t), 0xbadc0dedU, NULL, "%u", 0UL);
+		  sizeof(uint32_t), 0xbadc0dedU, NULL, "%u",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -4, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
+		  0UL);
 
 
 	/* KEYCTL_SESSION_TO_PARENT */
@@ -701,14 +883,17 @@
 	do_keyctl(ARG_STR(KEYCTL_REJECT),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadca75facef157LLU, "4207866199", NULL,
+			(kernel_ulong_t) 0xdeadca75facef157LLU, "4207866199",
+			NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
 		  sizeof(int32_t), bogus_key2, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_REJECT),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
 		  sizeof(uint32_t), ARG_STR(ENODEV), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 
@@ -718,19 +903,19 @@
 		  sizeof(int32_t), 0, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  sizeof(int32_t), 0, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 0xdeadfeedLLU, NULL,
+			ksize_fmt,
 		  sizeof(int32_t), bogus_key1, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(char *), key_iov + IOV_SIZE, NULL, ptr_fmt,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 32LLU, NULL, ksize_fmt,
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 32LLU, NULL,
+			ksize_fmt,
 		  sizeof(int32_t), bogus_key2, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -741,18 +926,21 @@
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  sizeof(key_iov), key_iov, key_iov_str2, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) IOV_SIZE, NULL, ksize_fmt,
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) IOV_SIZE, NULL,
+			ksize_fmt,
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 
 	/* KEYCTL_INVALIDATE */
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -761,10 +949,12 @@
 	/* KEYCTL_GET_PERSISTENT */
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), ARG_STR(-1), NULL,
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -782,29 +972,86 @@
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
-		  0UL);
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(char *), kcdhp + 1, NULL, ptr_fmt,
 		  sizeof(char *), (char *) 0xfffff157ffffdeadULL, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
-		  0UL);
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
 		  (size_t) -1, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -1, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -1, NULL, ksize_fmt,
+		  sizeof(char *), kckdfp_char + 1, NULL, ptr_fmt);
+
+	/* KEYCTL_DH_COMPUTE + KDF */
+
+	for (i = 0; i < ARRAY_SIZE(kckdfp_data); i++) {
+		struct keyctl_kdf_params *kckdfp =
+			(struct keyctl_kdf_params *) kckdfp_char;
+		bool deref_hash = true;
+		bool deref_opts = true;
+		bool print_spare = false;
+		const char *hash_str = NULL;
+		const char *oi_str = NULL;
+
+		memcpy(kckdfp, kckdfp_data + i, sizeof(kckdfp_data[i]));
+
+		switch (i) {
+		case 1:
+			deref_hash = false;
+			print_spare = true;
+			kckdfp->hashname =
+				kckdfp_short_hash + sizeof(short_hash_data);
+			break;
+		case 2:
+			deref_opts = false;
+			kckdfp->hashname = kckdfp_long_hash;
+			kckdfp->otherinfo =
+				kckdfp_otherinfo1 + sizeof(otherinfo1_data);
+			break;
+		case 3:
+			deref_opts = false;
+			deref_hash = false;
+			print_spare = true;
+			kckdfp->hashname = bogus_str;
+			kckdfp->otherinfo = kckdfp_otherinfo1;
+			break;
+		case 4:
+			oi_str = "\"\\1\\2 OH HAI \"...";
+			print_spare = true;
+			kckdfp->hashname = kckdfp_short_hash;
+			kckdfp->otherinfo = kckdfp_otherinfo1;
+			break;
+		case 5:
+			oi_str = "\"\\1\\2\\n\\255\\0\\1\\0\"";
+			kckdfp->hashname = kckdfp_short_hash;
+			kckdfp->otherinfo = kckdfp_otherinfo2;
+			break;
+		}
+
+		do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
+			  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
+			  (size_t) -1, (uintptr_t) bogus_buf2, NULL, NULL,
+			  sizeof(kernel_ulong_t), (kernel_ulong_t) -1, NULL,
+				ksize_fmt,
+			  sizeof(kckdfp), kckdfp_char,
+				kckdfp_to_str(kckdfp, deref_hash, deref_opts,
+					      print_spare, hash_str, oi_str),
+				NULL);
+	}
 
 	nul_terminated_buf = true;
 
diff --git a/tests-m32/ksysent.c b/tests-m32/ksysent.c
index 860e21e..7e25def 100644
--- a/tests-m32/ksysent.c
+++ b/tests-m32/ksysent.c
@@ -34,31 +34,14 @@
 #include <string.h>
 #include <asm/unistd.h>
 
-#define TD 0
-#define TF 0
-#define TI 0
-#define TN 0
-#define TP 0
-#define TS 0
-#define TM 0
-#define TST 0
-#define TLST 0
-#define TFST 0
-#define TSTA 0
-#define TSF 0
-#define TFSF 0
-#define TSFA 0
-#define NF 0
-#define MA 0
-#define SI 0
-#define SE 0
-#define CST 0
-#define SEN(arg) 0, 0
+#include "sysent_shorthand_defs.h"
 
 static const struct_sysent syscallent[] = {
 #include "syscallent.h"
 };
 
+#include "sysent_shorthand_undefs.h"
+
 typedef const char *pstr_t;
 static const pstr_t ksyslist[] = {
 #include "ksysent.h"
diff --git a/tests-m32/mincore.c b/tests-m32/mincore.c
index 0ede687..ae4eb42 100644
--- a/tests-m32/mincore.c
+++ b/tests-m32/mincore.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/mmsg.c b/tests-m32/mmsg.c
index a5cf0e7..e00100a 100644
--- a/tests-m32/mmsg.c
+++ b/tests-m32/mmsg.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2014 Masatake YAMATO <yamato@redhat.com>
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/mmsg_name.c b/tests-m32/mmsg_name.c
index ad5a482..8c54a48 100644
--- a/tests-m32/mmsg_name.c
+++ b/tests-m32/mmsg_name.c
@@ -3,6 +3,7 @@
  * of sendmmsg and recvmmsg syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/msg_control.c b/tests-m32/msg_control.c
index b63f2d0..48b7347 100644
--- a/tests-m32/msg_control.c
+++ b/tests-m32/msg_control.c
@@ -544,11 +544,7 @@
 	cmsg->cmsg_type = cmsg_type;
 
 	struct in_pktinfo *const info = (struct in_pktinfo *) CMSG_DATA(cmsg);
-#ifdef HAVE_IF_INDEXTONAME
-	info->ipi_ifindex = if_nametoindex("lo");
-#else
-	info->ipi_ifindex = 1;
-#endif
+	info->ipi_ifindex = ifindex_lo();
 	info->ipi_spec_dst.s_addr = inet_addr("1.2.3.4");
 	info->ipi_addr.s_addr = inet_addr("5.6.7.8");
 
@@ -563,12 +559,7 @@
 	       ", ipi_addr=inet_addr(\"%s\")}}]"
 	       ", msg_controllen=%u, msg_flags=0}, 0) = %d %s (%m)\n",
 	       (unsigned) cmsg->cmsg_len, cmsg_type_str,
-#ifdef HAVE_IF_INDEXTONAME
-	       "if_nametoindex(\"lo\")",
-#else
-	       "1",
-#endif
-	       "1.2.3.4", "5.6.7.8", len, rc, errno2name());
+	       IFINDEX_LO_STR, "1.2.3.4", "5.6.7.8", len, rc, errno2name());
 }
 
 static void
diff --git a/tests-m32/net-accept-connect.c b/tests-m32/net-accept-connect.c
index 0050eeb..4045e05 100644
--- a/tests-m32/net-accept-connect.c
+++ b/tests-m32/net-accept-connect.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2013-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2013-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/net-icmp_filter.c b/tests-m32/net-icmp_filter.c
index 71e530d..1dd1f21 100644
--- a/tests-m32/net-icmp_filter.c
+++ b/tests-m32/net-icmp_filter.c
@@ -49,8 +49,8 @@
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct icmp_filter, f);
 
 	getsockopt(-1, SOL_RAW, ICMP_FILTER, f, plen);
-	printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, %p, %p) = -1 %s (%m)\n",
-	       f, plen, errno2name());
+	printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, %p, [%d]) = -1 %s (%m)\n",
+	       f, *plen, errno2name());
 
 	setsockopt(-1, SOL_RAW, ICMP_FILTER, efault, sizeof(*f));
 	printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, %p, %u) = -1 %s (%m)\n",
diff --git a/tests-m32/net-sockaddr.c b/tests-m32/net-sockaddr.c
index 1d9bac3..fe933d4 100644
--- a/tests-m32/net-sockaddr.c
+++ b/tests-m32/net-sockaddr.c
@@ -50,11 +50,6 @@
 # include <bluetooth/sco.h>
 #endif
 
-#ifdef HAVE_IF_INDEXTONAME
-/* <linux/if.h> used to conflict with <net/if.h> */
-extern unsigned int if_nametoindex(const char *);
-#endif
-
 static void
 check_un(void)
 {
@@ -186,19 +181,17 @@
 	       ntohs(in6->sin6_port), h_addr,
 	       ntohl(in6->sin6_flowinfo), in6->sin6_scope_id, len, ret);
 
-#ifdef HAVE_IF_INDEXTONAME
-	in6->sin6_scope_id = if_nametoindex("lo");
+	in6->sin6_scope_id = ifindex_lo();
 	if (in6->sin6_scope_id) {
 		ret = connect(-1, (void *) in6, len);
 		printf("connect(-1, {sa_family=AF_INET6, sin6_port=htons(%hu)"
 		       ", inet_pton(AF_INET6, \"%s\", &sin6_addr)"
 		       ", sin6_flowinfo=htonl(%u)"
-		       ", sin6_scope_id=if_nametoindex(\"lo\")}, %u)"
+		       ", sin6_scope_id=%s}, %u)"
 		       " = %d EBADF (%m)\n",
-		       ntohs(in6->sin6_port), h_addr,
-		       ntohl(in6->sin6_flowinfo), len, ret);
+		       ntohs(in6->sin6_port), h_addr, ntohl(in6->sin6_flowinfo),
+		       IFINDEX_LO_STR, len, ret);
 	}
-#endif
 }
 
 static void
@@ -371,19 +364,16 @@
 	       ", sll_pkttype=PACKET_HOST, sll_halen=0}, %u)"
 	       " = %d EBADF (%m)\n", c_ll.sll_ifindex, len, ret);
 
-#ifdef HAVE_IF_INDEXTONAME
-	const int id = if_nametoindex("lo");
-	if (id) {
-		((struct sockaddr_ll *) ll)->sll_ifindex = id;
+	((struct sockaddr_ll *) ll)->sll_ifindex = ifindex_lo();
+	if (((struct sockaddr_ll *) ll)->sll_ifindex) {
 		ret = connect(-1, ll, len);
 		printf("connect(-1, {sa_family=AF_PACKET"
 		       ", sll_protocol=htons(ETH_P_ALL)"
-		       ", sll_ifindex=if_nametoindex(\"lo\")"
+		       ", sll_ifindex=%s"
 		       ", sll_hatype=ARPHRD_ETHER"
 		       ", sll_pkttype=PACKET_HOST, sll_halen=0}, %u)"
-		       " = %d EBADF (%m)\n", len, ret);
+		       " = %d EBADF (%m)\n", IFINDEX_LO_STR, len, ret);
 	}
-#endif
 }
 
 #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
diff --git a/tests-m32/netlink_crypto.c b/tests-m32/netlink_crypto.c
new file mode 100644
index 0000000..deb1644
--- /dev/null
+++ b/tests-m32/netlink_crypto.c
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_CRYPTOUSER_H
+
+# include <stdio.h>
+# include <unistd.h>
+# include <sys/socket.h>
+# include <linux/cryptouser.h>
+# include "test_netlink.h"
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_type = CRYPTO_MSG_NEWALG,
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_NEWALG"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = CRYPTO_MSG_GETALG;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_GETALG"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = CRYPTO_MSG_NEWALG;
+	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_NEWALG"
+	       ", flags=NLM_F_ECHO|NLM_F_REPLACE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = CRYPTO_MSG_DELALG;
+	nlh.nlmsg_flags = NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_DELALG"
+	       ", flags=%#x /* NLM_F_??? */, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, NLM_F_REPLACE,
+	       (unsigned) sizeof(nlh), sprintrc(rc));
+}
+
+static void
+test_crypto_msg_newalg(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	struct crypto_user_alg alg = {
+		.cru_name = "abcd",
+		.cru_driver_name = "efgh",
+		.cru_module_name = "dcba",
+		.cru_type = 0xabcdfabc,
+		.cru_mask = 0xfedabacd,
+		.cru_refcnt = 0xbcacfacd,
+		.cru_flags = 0xefacdbad
+	};
+	TEST_NETLINK_OBJECT_EX(fd, nlh0,
+			       CRYPTO_MSG_NEWALG, NLM_F_REQUEST,
+			       alg, print_quoted_memory,
+			       printf("{cru_name=\"abcd\""
+				      ", cru_driver_name=\"efgh\""
+				      ", cru_module_name=\"dcba\"");
+			       PRINT_FIELD_X(", ", alg, cru_type);
+			       PRINT_FIELD_X(", ", alg, cru_mask);
+			       PRINT_FIELD_U(", ", alg, cru_refcnt);
+			       PRINT_FIELD_X(", ", alg, cru_flags);
+			       printf("}"));
+
+	fill_memory_ex(alg.cru_name, sizeof(alg.cru_name), '0', 10);
+	fill_memory_ex(alg.cru_driver_name, sizeof(alg.cru_driver_name),
+		       'a', 'z' - 'a' + 1);
+	fill_memory_ex(alg.cru_module_name, sizeof(alg.cru_module_name),
+		       'A', 'Z' - 'A' + 1);
+
+	TEST_NETLINK_OBJECT_EX(fd, nlh0,
+			       CRYPTO_MSG_NEWALG, NLM_F_REQUEST,
+			       alg, print_quoted_memory,
+			       printf("{cru_name=");
+			       print_quoted_memory(alg.cru_name,
+				       sizeof(alg.cru_name) - 1);
+			       printf("..., cru_driver_name=");
+			       print_quoted_memory(alg.cru_driver_name,
+				       sizeof(alg.cru_driver_name) - 1);
+			       printf("..., cru_module_name=");
+			       print_quoted_memory(alg.cru_module_name,
+				       sizeof(alg.cru_module_name) - 1);
+			       PRINT_FIELD_X("..., ", alg, cru_type);
+			       PRINT_FIELD_X(", ", alg, cru_mask);
+			       PRINT_FIELD_U(", ", alg, cru_refcnt);
+			       PRINT_FIELD_X(", ", alg, cru_flags);
+			       printf("}"));
+}
+
+static void
+test_crypto_msg_unspec(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* CRYPTO_MSG_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      4, "abcd", 4, printf("\"\\x61\\x62\\x63\\x64\""));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_CRYPTO);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+	test_crypto_msg_newalg(fd);
+	test_crypto_msg_unspec(fd);
+
+	printf("+++ exited with 0 +++\n");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_CRYPTOUSER_H")
+
+#endif
diff --git a/tests-m32/netlink_crypto.gen.test b/tests-m32/netlink_crypto.gen.test
new file mode 100755
index 0000000..b138099
--- /dev/null
+++ b/tests-m32/netlink_crypto.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_crypto +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/netlink_generic.c b/tests-m32/netlink_generic.c
index 4f80c8b..cd9fbea 100644
--- a/tests-m32/netlink_generic.c
+++ b/tests-m32/netlink_generic.c
@@ -63,7 +63,8 @@
 	rc = sendto(fd, &req, sizeof(req), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=nlctrl"
 	       ", flags=NLM_F_REQUEST|0x300, seq=0, pid=0}"
-	       ", \"\\3\\0\\0\\0\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", \"\\x03\\x00\\x00\\x00\"}, %u"
+	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, req.nlh.nlmsg_len,
 	       (unsigned int) sizeof(req), sprintrc(rc));
 }
diff --git a/tests-m32/netlink_inet_diag.c b/tests-m32/netlink_inet_diag.c
index 5f68cb3..8b3d8af 100644
--- a/tests-m32/netlink_inet_diag.c
+++ b/tests-m32/netlink_inet_diag.c
@@ -2,6 +2,7 @@
  * This file is part of inet-yy strace test.
  *
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/netlink_kobject_uevent.c b/tests-m32/netlink_kobject_uevent.c
new file mode 100644
index 0000000..cacab5f
--- /dev/null
+++ b/tests-m32/netlink_kobject_uevent.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <stdio.h>
+#include <sys/socket.h>
+#include "netlink.h"
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	long rc;
+	int fd = create_nl_socket(NETLINK_KOBJECT_UEVENT);
+
+	/* test using data that looks like a zero-length C string */
+	char *const buf = tail_alloc(DEFAULT_STRLEN + 1);
+	buf[0] = '=';
+	fill_memory_ex(buf + 1, DEFAULT_STRLEN, 0, DEFAULT_STRLEN);
+
+	rc = sendto(fd, buf + 1, DEFAULT_STRLEN, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(buf + 1, DEFAULT_STRLEN);
+	printf(", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       DEFAULT_STRLEN, sprintrc(rc));
+
+	rc = sendto(fd, buf, DEFAULT_STRLEN + 1, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(buf, DEFAULT_STRLEN);
+	printf("..., %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       DEFAULT_STRLEN + 1, sprintrc(rc));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/netlink_kobject_uevent.gen.test b/tests-m32/netlink_kobject_uevent.gen.test
new file mode 100755
index 0000000..310a70b
--- /dev/null
+++ b/tests-m32/netlink_kobject_uevent.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_kobject_uevent +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/netlink_netlink_diag.c b/tests-m32/netlink_netlink_diag.c
index d7e83f5..855e404 100644
--- a/tests-m32/netlink_netlink_diag.c
+++ b/tests-m32/netlink_netlink_diag.c
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/netlink_protocol.c b/tests-m32/netlink_protocol.c
index f09dd9a..be1a652 100644
--- a/tests-m32/netlink_protocol.c
+++ b/tests-m32/netlink_protocol.c
@@ -83,13 +83,15 @@
 
 	/* whole message length < sizeof(struct nlmsghdr) */
 	rc = sendto(fd, req->magic, sizeof(req->magic), MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, \"abcd\", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	printf("sendto(%d, \"\\x61\\x62\\x63\\x64\""
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, (unsigned) sizeof(req->magic), sprintrc(rc));
 
 	/* a single message with some data */
 	rc = sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, req->nlh.nlmsg_len, NLM_F_DUMP,
 	       (unsigned) sizeof(*req), sprintrc(rc));
 
@@ -105,7 +107,8 @@
 	req->nlh.nlmsg_len = sizeof(*req) + 8;
 	rc = sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, req->nlh.nlmsg_len, NLM_F_DUMP,
 	       (unsigned) sizeof(*req), sprintrc(rc));
 
@@ -128,8 +131,9 @@
 
 	rc = sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, {{len=%u, type=NLMSG_NOOP"
-	       ", flags=NLM_F_REQUEST|0x%x, seq=0, pid=0}, \"abcd\"}]"
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}]"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
 	       reqs->req2.nlh.nlmsg_len, NLM_F_DUMP,
@@ -139,8 +143,8 @@
 	void *const efault2 = tail_memdup(&reqs->req1, sizeof(reqs->req1));
 	rc = sendto(fd, efault2, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, %p], %u, MSG_DONTWAIT, NULL, 0)"
-	       " = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", %p], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
 	       &((struct reqs *) efault2)->req2, (unsigned) sizeof(*reqs),
 	       sprintrc(rc));
@@ -150,20 +154,20 @@
 		    NULL, 0);
 	errstr = sprintrc(rc);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, \"",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}, ",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP);
-	print_quoted_memory((void *) &reqs->req2.nlh,
-			    sizeof(reqs->req2) - sizeof(req->nlh));
-	printf("\"], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	print_quoted_hex(&reqs->req2.nlh,
+			 sizeof(reqs->req2) - sizeof(req->nlh));
+	printf("], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       (unsigned) (sizeof(*reqs) - sizeof(req->nlh)), errstr);
 
 	/* second nlmsg_len < sizeof(struct nlmsghdr) */
 	reqs->req2.nlh.nlmsg_len = 4;
 	rc = sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, {len=%u, type=NLMSG_NOOP"
-	       ", flags=NLM_F_REQUEST|0x%x, seq=0, pid=0}], %u"
-	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", {len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
+	       ", seq=0, pid=0}], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
 	       reqs->req2.nlh.nlmsg_len, NLM_F_DUMP,
 	       (unsigned) sizeof(*reqs), sprintrc(rc));
@@ -223,7 +227,8 @@
 
 	rc = sendto(fd, nlh, NLMSG_HDRLEN + 2, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=NLMSG_ERROR, flags=NLM_F_REQUEST"
-	       ", seq=0, pid=0}, \"42\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x34\\x32\"}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, NLMSG_HDRLEN + 2, NLMSG_HDRLEN + 2, sprintrc(rc));
 
 	/* error message with room for the error code only */
@@ -302,8 +307,8 @@
 	printf("sendto(%d, {{len=%u, type=NLMSG_ERROR, flags=NLM_F_REQUEST"
 	       ", seq=0, pid=0}, {error=-EACCES"
 	       ", msg={{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=%u, pid=%u}, \"abcd\"}}}, %u, MSG_DONTWAIT, NULL, 0)"
-	       " = %s\n",
+	       ", seq=%u, pid=%u}, \"\\x61\\x62\\x63\\x64\"}}}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh->nlmsg_len, err->msg.nlmsg_len, NLM_F_DUMP,
 	       err->msg.nlmsg_seq, err->msg.nlmsg_pid,
 	       nlh->nlmsg_len, sprintrc(rc));
@@ -339,8 +344,8 @@
 	memcpy(NLMSG_DATA(nlh), "42", 2);
 
 	rc = sendto(fd, nlh, NLMSG_HDRLEN + 2, MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, {{len=%u, type=NLMSG_DONE, flags=NLM_F_MULTI"
-	       ", seq=0, pid=0}, \"42\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	printf("sendto(%d, {{len=%u, type=NLMSG_DONE, flags=NLM_F_MULTI, seq=0"
+	       ", pid=0}, \"\\x34\\x32\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, NLMSG_HDRLEN + 2, NLMSG_HDRLEN + 2, sprintrc(rc));
 
 	/* NLMSG_DONE message with enough room for an integer payload */
@@ -358,6 +363,45 @@
 	       fd, nlh->nlmsg_len, num, nlh->nlmsg_len, sprintrc(rc));
 }
 
+#if defined NLM_F_CAPPED || defined NLM_F_ACK_TLVS
+static void
+test_ack_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_type = NLMSG_ERROR,
+	};
+
+#ifdef NLM_F_CAPPED
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CAPPED,
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_CAPPED, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+#endif
+
+#ifdef NLM_F_ACK_TLVS
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK_TLVS;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_ACK_TLVS, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+#endif
+
+#if defined NLM_F_CAPPED && defined NLM_F_ACK_TLVS
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CAPPED | NLM_F_ACK_TLVS;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_CAPPED|NLM_F_ACK_TLVS, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+#endif
+}
+#endif
+
 int main(void)
 {
 	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
@@ -373,6 +417,9 @@
 	send_query(fd);
 	test_nlmsgerr(fd);
 	test_nlmsg_done(fd);
+#if defined NLM_F_CAPPED || defined NLM_F_ACK_TLVS
+	test_ack_flags(fd);
+#endif
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-m32/netlink_route.c b/tests-m32/netlink_route.c
index 54a54b7..6af3b13 100644
--- a/tests-m32/netlink_route.c
+++ b/tests-m32/netlink_route.c
@@ -27,12 +27,61 @@
 
 #include "tests.h"
 #include <stdio.h>
+#include <stdint.h>
 #include <string.h>
 #include <unistd.h>
 #include <sys/socket.h>
-#include "netlink.h"
+#include <netinet/in.h>
+#include "test_netlink.h"
+#ifdef HAVE_STRUCT_DCBMSG
+# include <linux/dcbnl.h>
+#endif
+#ifdef HAVE_LINUX_FIB_RULES_H
+# include <linux/fib_rules.h>
+#endif
+#ifdef HAVE_LINUX_IF_ADDR_H
+# include <linux/if_addr.h>
+#endif
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+# include <linux/if_addrlabel.h>
+#endif
+#include <linux/if_arp.h>
+#include <linux/if_bridge.h>
+#include <linux/ip.h>
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+#ifdef HAVE_STRUCT_NETCONFMSG
+# include <linux/netconf.h>
+#endif
 #include <linux/rtnetlink.h>
 
+#define TEST_NL_ROUTE(fd_, nlh0_, type_, obj_, print_family_, ...)	\
+	do {								\
+		/* family and string */					\
+		TEST_NETLINK((fd_), (nlh0_),				\
+			     type_, NLM_F_REQUEST,			\
+			     sizeof(obj_) - 1,				\
+			     &(obj_), sizeof(obj_) - 1,			\
+			     (print_family_);				\
+			     printf(", ...}"));				\
+									\
+		/* sizeof(obj_) */					\
+		TEST_NETLINK((fd_), (nlh0_),				\
+			     type_, NLM_F_REQUEST,			\
+			     sizeof(obj_), &(obj_), sizeof(obj_),	\
+			     (print_family_);				\
+			      __VA_ARGS__);				\
+									\
+		/* short read of sizeof(obj_) */			\
+		TEST_NETLINK((fd_), (nlh0_),				\
+			     type_, NLM_F_REQUEST,			\
+			     sizeof(obj_), &(obj_), sizeof(obj_) - 1,	\
+			     (print_family_);				\
+			     printf(", %p}",				\
+				    NLMSG_DATA(TEST_NETLINK_nlh) + 1));	\
+	} while (0)
+
 static void
 test_nlmsg_type(const int fd)
 {
@@ -92,6 +141,320 @@
 	       (unsigned) sizeof(nlh), sprintrc(rc));
 }
 
+static void
+test_nlmsg_done(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const int num = 0xabcdefad;
+
+	TEST_NETLINK(fd, nlh0, NLMSG_DONE, NLM_F_REQUEST,
+		     sizeof(num), &num, sizeof(num),
+		     printf("%d", num));
+}
+
+static void
+test_rtnl_unspec(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	/* unspecified family only */
+	uint8_t family = 0;
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(family), &family, sizeof(family),
+		      printf("{family=AF_UNSPEC}"));
+
+	/* unknown family only */
+	family = 0xff;
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(family), &family, sizeof(family),
+		      printf("{family=0xff /* AF_??? */}"));
+
+	/* short read of family */
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(family), &family, sizeof(family) - 1,
+		      printf("%p", NLMSG_DATA(TEST_NETLINK_nlh)));
+
+	/* unspecified family and string */
+	char buf[sizeof(family) + 4];
+	family = 0;
+	memcpy(buf, &family, sizeof(family));
+	memcpy(buf + sizeof(family), "1234", 4);
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(buf), buf, sizeof(buf),
+		      printf("{family=AF_UNSPEC, \"\\x31\\x32\\x33\\x34\"}"));
+
+	/* unknown family and string */
+	family = 0xfd;
+	memcpy(buf, &family, sizeof(family));
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(buf), buf, sizeof(buf),
+		      printf("{family=%#x /* AF_??? */"
+			     ", \"\\x31\\x32\\x33\\x34\"}", family));
+}
+
+static void
+test_rtnl_link(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ifinfomsg ifinfo = {
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+		.ifi_change = 0xfabcdeba
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETLINK, ifinfo,
+		      printf("{ifi_family=AF_UNIX"),
+		      printf(", ifi_type=ARPHRD_LOOPBACK"
+			     ", ifi_index=" IFINDEX_LO_STR
+			     ", ifi_flags=IFF_UP");
+		      PRINT_FIELD_X(", ", ifinfo, ifi_change);
+		      printf("}"));
+}
+
+static void
+test_rtnl_addr(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ifaddrmsg msg = {
+		.ifa_family = AF_UNIX,
+		.ifa_prefixlen = 0xde,
+		.ifa_flags = IFA_F_SECONDARY,
+		.ifa_scope = RT_SCOPE_UNIVERSE,
+		.ifa_index = ifindex_lo()
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDR, msg,
+		      printf("{ifa_family=AF_UNIX"),
+		      PRINT_FIELD_U(", ", msg, ifa_prefixlen);
+		      printf(", ifa_flags=IFA_F_SECONDARY"
+			     ", ifa_scope=RT_SCOPE_UNIVERSE"
+			     ", ifa_index=" IFINDEX_LO_STR);
+		      printf("}"));
+}
+
+static void
+test_rtnl_route(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct rtmsg msg = {
+		.rtm_family = AF_UNIX,
+		.rtm_dst_len = 0xaf,
+		.rtm_src_len = 0xda,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_DEFAULT,
+		.rtm_protocol = RTPROT_KERNEL,
+		.rtm_scope = RT_SCOPE_UNIVERSE,
+		.rtm_type = RTN_LOCAL,
+		.rtm_flags = RTM_F_NOTIFY
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETROUTE, msg,
+		      printf("{rtm_family=AF_UNIX"),
+		      PRINT_FIELD_U(", ", msg, rtm_dst_len);
+		      PRINT_FIELD_U(", ", msg, rtm_src_len);
+		      printf(", rtm_tos=IPTOS_LOWDELAY"
+			     ", rtm_table=RT_TABLE_DEFAULT"
+			     ", rtm_protocol=RTPROT_KERNEL"
+			     ", rtm_scope=RT_SCOPE_UNIVERSE"
+			     ", rtm_type=RTN_LOCAL"
+			     ", rtm_flags=RTM_F_NOTIFY}"));
+}
+
+#ifdef HAVE_LINUX_FIB_RULES_H
+static void
+test_rtnl_rule(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	struct rtmsg msg = {
+		.rtm_family = AF_UNIX,
+		.rtm_dst_len = 0xaf,
+		.rtm_src_len = 0xda,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_UNSPEC,
+		.rtm_type = FR_ACT_TO_TBL,
+		.rtm_flags = FIB_RULE_INVERT
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETRULE, msg,
+		      printf("{family=AF_UNIX"),
+		      printf(", dst_len=%u, src_len=%u"
+			     ", tos=IPTOS_LOWDELAY"
+			     ", table=RT_TABLE_UNSPEC"
+			     ", action=FR_ACT_TO_TBL"
+			     ", flags=FIB_RULE_INVERT}",
+			     msg.rtm_dst_len,
+			     msg.rtm_src_len));
+}
+#endif
+
+static void
+test_rtnl_neigh(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ndmsg msg = {
+		.ndm_family = AF_UNIX,
+		.ndm_ifindex = ifindex_lo(),
+		.ndm_state = NUD_PERMANENT,
+		.ndm_flags = NTF_PROXY,
+		.ndm_type = RTN_UNSPEC
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETNEIGH, msg,
+		      printf("{ndm_family=AF_UNIX"),
+		      printf(", ndm_ifindex=" IFINDEX_LO_STR
+			     ", ndm_state=NUD_PERMANENT"
+			     ", ndm_flags=NTF_PROXY"
+			     ", ndm_type=RTN_UNSPEC}"));
+}
+
+static void
+test_rtnl_neightbl(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct ndtmsg msg = {
+		.ndtm_family = AF_NETLINK
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETNEIGHTBL, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{ndtm_family=AF_NETLINK}"));
+}
+
+static void
+test_rtnl_tc(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct tcmsg msg = {
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo(),
+		.tcm_handle = 0xfadcdafb,
+		.tcm_parent = 0xafbcadab,
+		.tcm_info = 0xbcaedafa
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETQDISC, msg,
+		      printf("{tcm_family=AF_UNIX"),
+		      printf(", tcm_ifindex=" IFINDEX_LO_STR);
+		      PRINT_FIELD_U(", ", msg, tcm_handle);
+		      PRINT_FIELD_U(", ", msg, tcm_parent);
+		      PRINT_FIELD_U(", ", msg, tcm_info);
+		      printf("}"));
+}
+
+static void
+test_rtnl_tca(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	struct tcamsg msg = {
+		.tca_family = AF_INET
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETACTION, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{tca_family=AF_INET}"));
+}
+
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+static void
+test_rtnl_addrlabel(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ifaddrlblmsg msg = {
+		.ifal_family = AF_UNIX,
+		.ifal_prefixlen = 0xaf,
+		.ifal_flags = 0xbd,
+		.ifal_index = ifindex_lo(),
+		.ifal_seq = 0xfadcdafb
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDRLABEL, msg,
+		      printf("{ifal_family=AF_UNIX"),
+		      PRINT_FIELD_U(", ", msg, ifal_prefixlen);
+		      PRINT_FIELD_U(", ", msg, ifal_flags);
+		      printf(", ifal_index=" IFINDEX_LO_STR);
+		      PRINT_FIELD_U(", ", msg, ifal_seq);
+		      printf("}"));
+}
+#endif
+
+#ifdef HAVE_STRUCT_DCBMSG
+static void
+test_rtnl_dcb(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct dcbmsg msg = {
+		.dcb_family = AF_UNIX,
+		.cmd = DCB_CMD_UNDEFINED
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETDCB, msg,
+		      printf("{dcb_family=AF_UNIX"),
+		      printf(", cmd=DCB_CMD_UNDEFINED}"));
+}
+#endif
+
+#ifdef HAVE_STRUCT_NETCONFMSG
+static void
+test_rtnl_netconf(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct netconfmsg msg = {
+		.ncm_family = AF_INET
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETNETCONF, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{ncm_family=AF_INET}"));
+}
+#endif
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+static void
+test_rtnl_mdb(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct br_port_msg msg = {
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETMDB, msg,
+		      printf("{family=AF_UNIX"),
+		      printf(", ifindex=" IFINDEX_LO_STR "}"));
+}
+#endif
+
+#ifdef RTM_NEWNSID
+static void
+test_rtnl_nsid(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct rtgenmsg msg = {
+		.rtgen_family = AF_UNIX
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETNSID, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{rtgen_family=AF_UNIX}"));
+}
+#endif
+
 int main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
@@ -100,6 +463,33 @@
 
 	test_nlmsg_type(fd);
 	test_nlmsg_flags(fd);
+	test_nlmsg_done(fd);
+	test_rtnl_unspec(fd);
+	test_rtnl_link(fd);
+	test_rtnl_addr(fd);
+	test_rtnl_route(fd);
+#ifdef HAVE_LINUX_FIB_RULES_H
+	test_rtnl_rule(fd);
+#endif
+	test_rtnl_neigh(fd);
+	test_rtnl_neightbl(fd);
+	test_rtnl_tc(fd);
+	test_rtnl_tca(fd);
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+	test_rtnl_addrlabel(fd);
+#endif
+#ifdef HAVE_STRUCT_DCBMSG
+	test_rtnl_dcb(fd);
+#endif
+#ifdef HAVE_STRUCT_NETCONFMSG
+	test_rtnl_netconf(fd);
+#endif
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+	test_rtnl_mdb(fd);
+#endif
+#ifdef RTM_NEWNSID
+	test_rtnl_nsid(fd);
+#endif
 
 	printf("+++ exited with 0 +++\n");
 
diff --git a/tests-m32/netlink_selinux.c b/tests-m32/netlink_selinux.c
index 6494fda..2d76822 100644
--- a/tests-m32/netlink_selinux.c
+++ b/tests-m32/netlink_selinux.c
@@ -30,7 +30,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/socket.h>
-#include "netlink.h"
+#include "test_netlink.h"
 #include <linux/selinux_netlink.h>
 
 static void
@@ -50,6 +50,46 @@
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 }
 
+static void
+test_selnl_msg_unspec(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* SELNL_MSG_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      4, "1234", 4,
+		      printf("\"\\x31\\x32\\x33\\x34\""));
+}
+
+static void
+test_selnl_msg_setenforce(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	static const struct selnl_msg_setenforce msg = {
+		.val = 0xfbdcdfab
+	};
+	TEST_NETLINK_OBJECT(fd, nlh0,
+			    SELNL_MSG_SETENFORCE, NLM_F_REQUEST, msg,
+			    PRINT_FIELD_D("{", msg, val);
+			    printf("}"));
+}
+
+static void
+test_selnl_msg_policyload(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	static const struct selnl_msg_policyload msg = {
+		.seqno = 0xabdcfabc
+	};
+	TEST_NETLINK_OBJECT(fd, nlh0,
+			    SELNL_MSG_POLICYLOAD, NLM_F_REQUEST, msg,
+			    PRINT_FIELD_U("{", msg, seqno);
+			    printf("}"));
+}
+
 int main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
@@ -57,6 +97,9 @@
 	int fd = create_nl_socket(NETLINK_SELINUX);
 
 	test_nlmsg_type(fd);
+	test_selnl_msg_unspec(fd);
+	test_selnl_msg_setenforce(fd);
+	test_selnl_msg_policyload(fd);
 
 	printf("+++ exited with 0 +++\n");
 
diff --git a/tests-m32/netlink_sock_diag-v.sh b/tests-m32/netlink_sock_diag-v.sh
new file mode 100755
index 0000000..0471ae3
--- /dev/null
+++ b/tests-m32/netlink_sock_diag-v.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Check verbose decoding of NETLINK_SOCK_DIAG protocol
+#
+# Copyright (c) 2017 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+run_prog ../netlink_netlink_diag
+run_strace_match_diff -v -e trace=sendto
diff --git a/tests-m32/netlink_sock_diag.c b/tests-m32/netlink_sock_diag.c
index b8d0190..c2ebf12 100644
--- a/tests-m32/netlink_sock_diag.c
+++ b/tests-m32/netlink_sock_diag.c
@@ -35,7 +35,7 @@
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <netinet/tcp.h>
-#include "netlink.h"
+#include "test_netlink.h"
 #include <linux/if_ether.h>
 #include <linux/inet_diag.h>
 #include <linux/netlink_diag.h>
@@ -48,6 +48,48 @@
 
 #define SMC_ACTIVE 1
 
+#define TEST_SOCK_DIAG(fd_, nlh0_,					\
+		       family_, type_, flags_,				\
+		       obj_, print_family_, ...)			\
+									\
+	do {								\
+		/* family only */					\
+		uint8_t family = (family_);				\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(family), &family, sizeof(family),	\
+			      printf("{family=%s}", #family_));		\
+									\
+		/* family and string */					\
+		char buf[sizeof(family) + 4];				\
+		memcpy(buf, &family, sizeof(family));			\
+		memcpy(buf + sizeof(family), "1234", 4);		\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(buf), buf, sizeof(buf),		\
+			      (print_family_);				\
+			      printf(", ...}"));			\
+									\
+		/* sizeof(obj_) */					\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(obj_), &(obj_), sizeof(obj_),	\
+			      (print_family_);				\
+			      __VA_ARGS__);				\
+									\
+		/* short read of sizeof(obj_) */			\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(obj_), &(obj_), sizeof(obj_) - 1,	\
+			      (print_family_);				\
+			      printf(", %p}",				\
+				     NLMSG_DATA(TEST_NETLINK_nlh) + 1));\
+	} while (0)
+
 static void
 test_nlmsg_type(const int fd)
 {
@@ -85,259 +127,103 @@
 static void
 test_odd_family_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
 
 	/* unspecified family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	uint8_t family = 0;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=AF_UNSPEC}"));
 
 	/* unknown family only */
-	*family = 0xff;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=0xff /* AF_??? */}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	family = 0xff;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=%#x /* AF_??? */}", family));
 
 	/* short read of family */
-	memmove(nlh0, nlh, NLMSG_HDRLEN);
-	nlh = nlh0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, %p}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_DATA(nlh),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(family), &family, sizeof(family) - 1,
+		     printf("%p", NLMSG_DATA(TEST_NETLINK_nlh)));
 
 	/* unspecified family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	char buf[sizeof(family) + 4];
+	family = 0;
+	memcpy(buf, &family, sizeof(family));
+	memcpy(buf + sizeof(family), "1234", 4);
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=AF_UNSPEC, \"\\x31\\x32\\x33\\x34\"}"));
 
 	/* unknown family and string */
-	*family = 0xfd;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=0xfd /* AF_??? */, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	family = 0xfd;
+	memcpy(buf, &family, sizeof(family));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=%#x /* AF_??? */"
+			    ", \"\\x31\\x32\\x33\\x34\"}", family));
 }
 
 static void
 test_odd_family_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
 
 	/* unspecified family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	uint8_t family = 0;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=AF_UNSPEC}"));
 
 	/* unknown family only */
-	*family = 0xff;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=0xff /* AF_??? */}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	family = 0xff;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=%#x /* AF_??? */}", family));
 
 	/* short read of family */
-	memmove(nlh0, nlh, NLMSG_HDRLEN);
-	nlh = nlh0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, %p}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_DATA(nlh),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(family), &family, sizeof(family) - 1,
+		     printf("%p", NLMSG_DATA(TEST_NETLINK_nlh)));
 
 	/* unspecified family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	char buf[sizeof(family) + 4];
+	family = 0;
+	memcpy(buf, &family, sizeof(family));
+	memcpy(buf + sizeof(family), "1234", 4);
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=AF_UNSPEC, \"\\x31\\x32\\x33\\x34\"}"));
 
 	/* unknown family and string */
-	*family = 0xfb;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=0xfb /* AF_??? */, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	family = 0xfd;
+	memcpy(buf, &family, sizeof(family));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=%#x /* AF_??? */"
+			    ", \"\\x31\\x32\\x33\\x34\"}", family));
 }
 
 static void
 test_unix_diag_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct unix_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_UNIX}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_UNIX, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* unix_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	req = NLMSG_DATA(nlh);
-	*req = (struct unix_diag_req) {
+	static const struct unix_diag_req req = {
 		.sdiag_family = AF_UNIX,
 		.sdiag_protocol = 253,
 		.udiag_states = 1 << TCP_ESTABLISHED | 1 << TCP_LISTEN,
@@ -345,316 +231,75 @@
 		.udiag_show = UDIAG_SHOW_NAME,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_UNIX, sdiag_protocol=%u"
-	       ", udiag_states=1<<TCP_ESTABLISHED|1<<TCP_LISTEN, udiag_ino=%u"
-	       ", udiag_show=UDIAG_SHOW_NAME, udiag_cookie=[%u, %u]}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       253, 0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of unix_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {sdiag_family=AF_UNIX, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_UNIX"),
+		       PRINT_FIELD_U(", ", req, sdiag_protocol);
+		       printf(", udiag_states=1<<TCP_ESTABLISHED|1<<TCP_LISTEN");
+		       PRINT_FIELD_U(", ", req, udiag_ino);
+		       printf(", udiag_show=UDIAG_SHOW_NAME");
+		       PRINT_FIELD_COOKIE(", ", req, udiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_unix_diag_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct unix_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_UNIX}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {udiag_family=AF_UNIX, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* unix_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct unix_diag_msg) {
+	static const struct unix_diag_msg msg = {
 		.udiag_family = AF_UNIX,
 		.udiag_type = SOCK_STREAM,
 		.udiag_state = TCP_FIN_WAIT1,
 		.udiag_ino = 0xfacefeed,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {udiag_family=AF_UNIX, udiag_type=SOCK_STREAM"
-	       ", udiag_state=TCP_FIN_WAIT1"
-	       ", udiag_ino=%u, udiag_cookie=[%u, %u]}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of unix_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{udiag_family=AF_UNIX"),
+		       printf(", udiag_type=SOCK_STREAM"
+			      ", udiag_state=TCP_FIN_WAIT1");
+		       PRINT_FIELD_U(", ", msg, udiag_ino);
+		       PRINT_FIELD_COOKIE(", ", msg, udiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_netlink_diag_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct netlink_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_NETLINK}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* netlink_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	req = NLMSG_DATA(nlh);
-	*req = (struct netlink_diag_req) {
+	struct netlink_diag_req req = {
 		.sdiag_family = AF_NETLINK,
 		.sdiag_protocol = NDIAG_PROTO_ALL,
 		.ndiag_ino = 0xfacefeed,
 		.ndiag_show = NDIAG_SHOW_MEMINFO,
 		.ndiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_NETLINK"),
+		       printf(", sdiag_protocol=NDIAG_PROTO_ALL");
+		       PRINT_FIELD_U(", ", req, ndiag_ino);
+		       printf(", ndiag_show=NDIAG_SHOW_MEMINFO");
+		       PRINT_FIELD_COOKIE(", ", req, ndiag_cookie);
+		       printf("}"));
 
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, sdiag_protocol=NDIAG_PROTO_ALL"
-	       ", ndiag_ino=%u, ndiag_show=NDIAG_SHOW_MEMINFO"
-	       ", ndiag_cookie=[%u, %u]}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	req->sdiag_protocol = NETLINK_ROUTE;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, sdiag_protocol=NETLINK_ROUTE"
-	       ", ndiag_ino=%u, ndiag_show=NDIAG_SHOW_MEMINFO"
-	       ", ndiag_cookie=[%u, %u]}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of netlink_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	req.sdiag_protocol = NETLINK_ROUTE;
+	req.ndiag_show = NDIAG_SHOW_GROUPS;
+	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_NETLINK"),
+		       printf(", sdiag_protocol=NETLINK_ROUTE");
+		       PRINT_FIELD_U(", ", req, ndiag_ino);
+		       printf(", ndiag_show=NDIAG_SHOW_GROUPS");
+		       PRINT_FIELD_COOKIE(", ", req, ndiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_netlink_diag_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct netlink_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_NETLINK}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {ndiag_family=AF_NETLINK, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* netlink_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct netlink_diag_msg) {
+	static const struct netlink_diag_msg msg = {
 		.ndiag_family = AF_NETLINK,
 		.ndiag_type = SOCK_RAW,
 		.ndiag_protocol = NETLINK_ROUTE,
@@ -665,233 +310,60 @@
 		.ndiag_ino = 0xdaeefacd,
 		.ndiag_cookie = { 0xbadc0ded, 0xdeadbeef }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {ndiag_family=AF_NETLINK"
-	       ", ndiag_type=SOCK_RAW, ndiag_protocol=NETLINK_ROUTE"
-	       ", ndiag_state=NETLINK_CONNECTED, ndiag_portid=%u"
-	       ", ndiag_dst_portid=%u, ndiag_dst_group=%u, ndiag_ino=%u"
-	       ", ndiag_cookie=[%u, %u]}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xbadc0ded, 0xdeadbeef, 0xfacefeed,
-	       0xdaeefacd, 0xbadc0ded, 0xdeadbeef,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of netlink_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {ndiag_family=AF_NETLINK, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{ndiag_family=AF_NETLINK"),
+		       printf(", ndiag_type=SOCK_RAW"
+			      ", ndiag_protocol=NETLINK_ROUTE"
+			      ", ndiag_state=NETLINK_CONNECTED");
+		       PRINT_FIELD_U(", ", msg, ndiag_portid);
+		       PRINT_FIELD_U(", ", msg, ndiag_dst_portid);
+		       PRINT_FIELD_U(", ", msg, ndiag_dst_group);
+		       PRINT_FIELD_U(", ", msg, ndiag_ino);
+		       PRINT_FIELD_COOKIE(", ", msg, ndiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_packet_diag_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct packet_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_PACKET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_PACKET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* packet_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	req = NLMSG_DATA(nlh);
-	*req = (struct packet_diag_req) {
+	static const struct packet_diag_req req = {
 		.sdiag_family = AF_PACKET,
 		.sdiag_protocol = ETH_P_LOOP,
 		.pdiag_ino = 0xfacefeed,
 		.pdiag_show = PACKET_SHOW_INFO,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_PACKET, sdiag_protocol=ETH_P_LOOP"
-	       ", pdiag_ino=%u, pdiag_show=PACKET_SHOW_INFO"
-	       ", pdiag_cookie=[%u, %u]}}, %u"
-	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of packet_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_PACKET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_PACKET"),
+		       printf(", sdiag_protocol=ETH_P_LOOP");
+		       PRINT_FIELD_U(", ", req, pdiag_ino);
+		       printf(", pdiag_show=PACKET_SHOW_INFO");
+		       PRINT_FIELD_COOKIE(", ", req, pdiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_packet_diag_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct packet_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_PACKET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {pdiag_family=AF_PACKET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* packet_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct packet_diag_msg) {
+	static const struct packet_diag_msg msg = {
 		.pdiag_family = AF_PACKET,
 		.pdiag_type = SOCK_STREAM,
 		.pdiag_num = 0xbadc,
 		.pdiag_ino = 0xfacefeed,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {pdiag_family=AF_PACKET, pdiag_type=SOCK_STREAM"
-	       ", pdiag_num=%u, pdiag_ino=%u, pdiag_cookie=[%u, %u]}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xbadc, 0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of packet_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {pdiag_family=AF_PACKET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{pdiag_family=AF_PACKET"),
+		       printf(", pdiag_type=SOCK_STREAM");
+		       PRINT_FIELD_U(", ", msg, pdiag_num);
+		       PRINT_FIELD_U(", ", msg, pdiag_ino);
+		       PRINT_FIELD_COOKIE(", ", msg, pdiag_cookie);
+		       printf("}"));
 }
 
 static void
@@ -899,21 +371,8 @@
 {
 	const char address[] = "12.34.56.78";
 	const char address6[] = "12:34:56:78:90:ab:cd:ef";
-	struct nlmsghdr *nlh;
-	struct inet_diag_req_v2 *req;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	nlh = nlh0 - sizeof(*req);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct inet_diag_req_v2) {
+	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
 		.sdiag_protocol = IPPROTO_TCP,
@@ -921,245 +380,107 @@
 		.id = {
 			.idiag_sport = 0xfacd,
 			.idiag_dport = 0xdead,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST,
+		     sizeof(req), &req, sizeof(req),
+		     printf("{sdiag_family=AF_INET"),
+		     printf(", sdiag_protocol=IPPROTO_TCP"
+			    ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+			    ", idiag_states=1<<TCP_CLOSE"
+			    ", id={idiag_sport=htons(%u)"
+			    ", idiag_dport=htons(%u)"
+			    ", idiag_src=inet_addr(\"%s\")"
+			    ", idiag_dst=inet_addr(\"%s\")",
+			    ntohs(req.id.idiag_sport),
+			    ntohs(req.id.idiag_dport),
+			    address, address);
+		     printf(", idiag_if=" IFINDEX_LO_STR);
+		     PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		     printf("}}"));
 
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, sdiag_protocol=IPPROTO_TCP"
-	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
-	       ", idiag_states=1<<TCP_CLOSE, id={idiag_sport=htons(%u)"
-	       ", idiag_dport=htons(%u), inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst), idiag_if=%u"
-	       ", idiag_cookie=[%u, %u]}}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       ntohs(0xfacd), ntohs(0xdead), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	req.sdiag_family = AF_INET6;
+	if (!inet_pton(AF_INET6, address6, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET6, address6, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	req->sdiag_family = AF_INET6;
-	if (!inet_pton(AF_INET6, address6, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET6, address6, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET6, sdiag_protocol=IPPROTO_TCP"
-	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
-	       ", idiag_states=1<<TCP_CLOSE, id={idiag_sport=htons(%u)"
-	       ", idiag_dport=htons(%u), inet_pton(AF_INET6, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET6, \"%s\", &idiag_dst), idiag_if=%u"
-	       ", idiag_cookie=[%u, %u]}}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       ntohs(0xfacd), ntohs(0xdead), address6, address6,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST,
+		     sizeof(req), &req, sizeof(req),
+		     printf("{sdiag_family=AF_INET6"),
+		     printf(", sdiag_protocol=IPPROTO_TCP"
+			    ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+			    ", idiag_states=1<<TCP_CLOSE"
+			    ", id={idiag_sport=htons(%u)"
+			    ", idiag_dport=htons(%u)"
+			    ", inet_pton(AF_INET6, \"%s\", &idiag_src)"
+			    ", inet_pton(AF_INET6, \"%s\", &idiag_dst)",
+			    ntohs(req.id.idiag_sport),
+			    ntohs(req.id.idiag_dport),
+			    address6, address6);
+		     printf(", idiag_if=" IFINDEX_LO_STR);
+		     PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		     printf("}}"));
 }
 
 static void
 test_inet_diag_req(const int fd)
 {
 	const char address[] = "12.34.56.78";
-	struct nlmsghdr *nlh;
-	struct inet_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = TCPDIAG_GETSOCK,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_INET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = TCPDIAG_GETSOCK,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* inet_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = TCPDIAG_GETSOCK,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct inet_diag_req) {
+	struct inet_diag_req req = {
 		.idiag_family = AF_INET,
-		.idiag_ext = 1 << (INET_DIAG_TOS - 1),
 		.idiag_src_len = 0xde,
 		.idiag_dst_len = 0xba,
+		.idiag_ext = 1 << (INET_DIAG_TOS - 1),
 		.id = {
 			.idiag_sport = 0xdead,
 			.idiag_dport = 0xadcd,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 		.idiag_states = 1 << TCP_LAST_ACK,
 		.idiag_dbs = 0xfacefeed,
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, idiag_src_len=%u"
-	       ", idiag_dst_len=%u, idiag_ext=1<<(INET_DIAG_TOS-1)"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}"
-	       ", idiag_states=1<<TCP_LAST_ACK, idiag_dbs=%u}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xde, 0xba, ntohs(0xdead), ntohs(0xadcd), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded, 0xfacefeed,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of inet_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_INET,
+		       TCPDIAG_GETSOCK, NLM_F_REQUEST, req,
+		       printf("{idiag_family=AF_INET"),
+		       PRINT_FIELD_U(", ", req, idiag_src_len);
+		       PRINT_FIELD_U(", ", req, idiag_dst_len);
+		       printf(", idiag_ext=1<<(INET_DIAG_TOS-1)");
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(req.id.idiag_sport),
+			      ntohs(req.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		       printf("}, idiag_states=1<<TCP_LAST_ACK");
+		       PRINT_FIELD_U(", ", req, idiag_dbs);
+		       printf("}"));
 }
 
 static void
 test_inet_diag_req_v2(const int fd)
 {
 	const char address[] = "87.65.43.21";
-	struct nlmsghdr *nlh;
-	struct inet_diag_req_v2 *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_INET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* inet_diag_req_v2 */
-	nlh = nlh0 - sizeof(*req);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct inet_diag_req_v2) {
+	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
 		.sdiag_protocol = IPPROTO_TCP,
@@ -1167,116 +488,39 @@
 		.id = {
 			.idiag_sport = 0xfacd,
 			.idiag_dport = 0xdead,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, sdiag_protocol=IPPROTO_TCP"
-	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
-	       ", idiag_states=1<<TCP_CLOSE, id={idiag_sport=htons(%u)"
-	       ", idiag_dport=htons(%u), inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst), idiag_if=%u"
-	       ", idiag_cookie=[%u, %u]}}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       ntohs(0xfacd), ntohs(0xdead), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of inet_diag_req_v2 */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_INET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_INET"),
+		       printf(", sdiag_protocol=IPPROTO_TCP"
+			      ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+			      ", idiag_states=1<<TCP_CLOSE"
+			      ", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(req.id.idiag_sport),
+			      ntohs(req.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		       printf("}}"));
 }
 
 static void
 test_inet_diag_msg(const int fd)
 {
 	const char address[] = "11.22.33.44";
-	struct nlmsghdr *nlh;
-	struct inet_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_INET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* inet_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct inet_diag_msg) {
+	struct inet_diag_msg msg = {
 		.idiag_family = AF_INET,
 		.idiag_state = TCP_LISTEN,
 		.idiag_timer = 0xfa,
@@ -1284,7 +528,7 @@
 		.id = {
 			.idiag_sport = 0xfacf,
 			.idiag_dport = 0xdead,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 		.idiag_expires = 0xfacefeed,
@@ -1294,47 +538,31 @@
 		.idiag_inode = 0xbadc0ded,
 	};
 
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, idiag_state=TCP_LISTEN"
-	       ", idiag_timer=%u, idiag_retrans=%u"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}"
-	       ", idiag_expires=%u, idiag_rqueue=%u, idiag_wqueue=%u"
-	       ", idiag_uid=%u, idiag_inode=%u}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xfa, 0xde, ntohs(0xfacf), ntohs(0xdead),
-	       address, address, 0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       0xfacefeed, 0xdeadbeef, 0xadcdfafc, 0xdecefaeb, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of inet_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_INET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{idiag_family=AF_INET"),
+		       printf(", idiag_state=TCP_LISTEN");
+		       PRINT_FIELD_U(", ", msg, idiag_timer);
+		       PRINT_FIELD_U(", ", msg, idiag_retrans);
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(msg.id.idiag_sport),
+			      ntohs(msg.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", msg.id, idiag_cookie);
+		       PRINT_FIELD_U("}, ", msg, idiag_expires);
+		       PRINT_FIELD_U(", ", msg, idiag_rqueue);
+		       PRINT_FIELD_U(", ", msg, idiag_wqueue);
+		       PRINT_FIELD_U(", ", msg, idiag_uid);
+		       PRINT_FIELD_U(", ", msg, idiag_inode);
+		       printf("}"));
 }
 
 #ifdef AF_SMC
@@ -1342,183 +570,44 @@
 test_smc_diag_req(const int fd)
 {
 	const char address[] = "43.21.56.78";
-	struct nlmsghdr *nlh;
-	struct smc_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_SMC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* smc_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct smc_diag_req) {
+	struct smc_diag_req req = {
 		.diag_family = AF_SMC,
 		.diag_ext = 1 << (SMC_DIAG_CONNINFO - 1),
 		.id = {
 			.idiag_sport = 0xdead,
 			.idiag_dport = 0xadcd,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded },
 		},
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {diag_family=AF_SMC"
-	       ", diag_ext=1<<(SMC_DIAG_CONNINFO-1)"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       htons(0xdead), htons(0xadcd), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of smc_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_SMC,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{diag_family=AF_SMC"),
+		       printf(", diag_ext=1<<(SMC_DIAG_CONNINFO-1)");
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(req.id.idiag_sport),
+			      ntohs(req.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		       printf("}}"));
 }
 
 static void
 test_smc_diag_msg(const int fd)
 {
 	const char address[] = "34.87.12.90";
-	struct nlmsghdr *nlh;
-	struct smc_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_SMC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* smc_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct smc_diag_msg) {
+	struct smc_diag_msg msg = {
 		.diag_family = AF_SMC,
 		.diag_state = SMC_ACTIVE,
 		.diag_fallback = 0xde,
@@ -1526,51 +615,35 @@
 		.id = {
 			.idiag_sport = 0xdead,
 			.idiag_dport = 0xadcd,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded },
 		},
 		.diag_uid = 0xadcdfafc,
 		.diag_inode = 0xbadc0ded,
 	};
 
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {diag_family=AF_SMC"
-	       ", diag_state=SMC_ACTIVE, diag_fallback=%u, diag_shutdown=%u"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}"
-	       ", diag_uid=%u, diag_inode=%u}}, %u"
-	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xde, 0xba, htons(0xdead), htons(0xadcd), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded, 0xadcdfafc, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of smc_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_SMC,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{diag_family=AF_SMC"),
+		       printf(", diag_state=SMC_ACTIVE");
+		       PRINT_FIELD_U(", ", msg, diag_fallback);
+		       PRINT_FIELD_U(", ", msg, diag_shutdown);
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(msg.id.idiag_sport),
+			      ntohs(msg.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", msg.id, idiag_cookie);
+		       PRINT_FIELD_U("}, ", msg, diag_uid);
+		       PRINT_FIELD_U(", ", msg, diag_inode);
+		       printf("}"));
 }
 #endif
 
diff --git a/tests-m32/netlink_unix_diag.c b/tests-m32/netlink_unix_diag.c
index 119cc9e..e150923 100644
--- a/tests-m32/netlink_unix_diag.c
+++ b/tests-m32/netlink_unix_diag.c
@@ -2,6 +2,7 @@
  * This file is part of net-yy-unix strace test.
  *
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/nlattr.c b/tests-m32/nlattr.c
index 7361ece..41923c0 100644
--- a/tests-m32/nlattr.c
+++ b/tests-m32/nlattr.c
@@ -74,7 +74,7 @@
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
 	       ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1"
-	       ", udiag_ino=0, udiag_cookie=[0, 0]}, \"12\"}, %u"
+	       ", udiag_ino=0, udiag_cookie=[0, 0]}, \"\\x31\\x32\"}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, msg_len, sprintrc(rc));
 
@@ -133,7 +133,8 @@
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
 	       ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1"
 	       ", udiag_ino=0, udiag_cookie=[0, 0]}, {{nla_len=%u"
-	       ", nla_type=%#x /* UNIX_DIAG_??? */}, \"1234\"}}"
+	       ", nla_type=%#x /* UNIX_DIAG_??? */}"
+	       ", \"\\x31\\x32\\x33\\x34\"}}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, nla->nla_len, UNIX_DIAG_SHUTDOWN + 1,
 	       msg_len, sprintrc(rc));
@@ -143,29 +144,29 @@
 	msg = tail_memdup(&c_msg, msg_len);
 	memcpy(&msg->nlh.nlmsg_len, &msg_len, sizeof(msg_len));
 	nla = NLMSG_ATTR(msg, sizeof(msg->udm));
-	*nla = (struct nlattr) {
+	SET_STRUCT(struct nlattr, nla,
 		.nla_len = NLA_HDRLEN,
 		.nla_type = UNIX_DIAG_NAME
-	};
+	);
 	memcpy(nla + 1, "12", 2);
 	rc = sendto(fd, msg, msg_len, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
 	       ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1"
 	       ", udiag_ino=0, udiag_cookie=[0, 0]}, [{nla_len=%u"
-	       ", nla_type=UNIX_DIAG_NAME}, \"12\"]}, %u"
+	       ", nla_type=UNIX_DIAG_NAME}, \"\\x31\\x32\"]}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, msg_len, nla->nla_len, msg_len, sprintrc(rc));
+	       fd, msg_len, NLA_HDRLEN, msg_len, sprintrc(rc));
 
 	/* print one struct nlattr and short read of second struct nlattr */
 	msg_len = NLMSG_SPACE(sizeof(msg->udm)) + NLA_HDRLEN * 2;
 	msg = tail_memdup(&c_msg, msg_len - 1);
 	memcpy(&msg->nlh.nlmsg_len, &msg_len, sizeof(msg_len));
 	nla = NLMSG_ATTR(msg, sizeof(msg->udm));
-	*nla = (struct nlattr) {
+	SET_STRUCT(struct nlattr, nla,
 		.nla_len = NLA_HDRLEN,
 		.nla_type = UNIX_DIAG_NAME
-	};
+	);
 	rc = sendto(fd, msg, msg_len, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
@@ -173,7 +174,7 @@
 	       ", udiag_ino=0, udiag_cookie=[0, 0]}, [{nla_len=%u"
 	       ", nla_type=UNIX_DIAG_NAME}, %p]}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, msg_len, nla->nla_len, nla + 1, msg_len, sprintrc(rc));
+	       fd, msg_len, NLA_HDRLEN, nla + 1, msg_len, sprintrc(rc));
 
 	/* print two struct nlattr */
 	msg_len = NLMSG_SPACE(sizeof(msg->udm)) + NLA_HDRLEN * 2;
@@ -209,18 +210,22 @@
 	       ", nla_type=UNIX_DIAG_NAME}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, nla->nla_len, msg_len, sprintrc(rc));
 
-	/* abbreviated output */
+	/* unrecognized attribute data, abbreviated output */
 #define ABBREV_LEN (DEFAULT_STRLEN + 1)
-	msg_len = NLA_HDRLEN * ABBREV_LEN + NLMSG_SPACE(sizeof(msg->udm));
-	msg = tail_memdup(&c_msg, msg_len);
-	memcpy(&msg->nlh.nlmsg_len, &msg_len, sizeof(msg_len));
+	msg_len = NLMSG_SPACE(sizeof(msg->udm)) + NLA_HDRLEN * ABBREV_LEN * 2;
+	msg = tail_alloc(msg_len);
+	memcpy(msg, &c_msg, sizeof(c_msg));
+	msg->nlh.nlmsg_len = msg_len;
 	unsigned int i;
 	nla = NLMSG_ATTR(msg, sizeof(msg->udm));
-	for (i = 0; i < ABBREV_LEN; ++i)
-		nla[i] = (struct nlattr) {
-			.nla_len = NLA_HDRLEN,
+	for (i = 0; i < ABBREV_LEN; ++i) {
+		nla[i * 2] = (struct nlattr) {
+			.nla_len = NLA_HDRLEN * 2 - 1,
 			.nla_type = UNIX_DIAG_SHUTDOWN + 1 + i
 		};
+		fill_memory_ex(&nla[i * 2 + 1], NLA_HDRLEN,
+			       '0' + i, '~' - '0' - i);
+	}
 
 	rc = sendto(fd, msg, msg_len, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
@@ -232,8 +237,10 @@
 	for (i = 0; i < DEFAULT_STRLEN; ++i) {
 		if (i)
 			printf(", ");
-		printf("{nla_len=%u, nla_type=%#x /* UNIX_DIAG_??? */}",
+		printf("{{nla_len=%u, nla_type=%#x /* UNIX_DIAG_??? */}, ",
 		       nla->nla_len, UNIX_DIAG_SHUTDOWN + 1 + i);
+		print_quoted_hex(&nla[i * 2 + 1], NLA_HDRLEN - 1);
+		printf("}");
 	}
 	printf(", ...]}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       msg_len, sprintrc(rc));
diff --git a/tests-m32/nlattr_br_port_msg.c b/tests-m32/nlattr_br_port_msg.c
new file mode 100644
index 0000000..a2a4792
--- /dev/null
+++ b/tests-m32/nlattr_br_port_msg.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+
+# include <stdio.h>
+# include <netinet/in.h>
+# include "test_nlattr.h"
+# include <linux/if_bridge.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_br_port_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETMDB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct br_port_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct br_port_msg, msg,
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	);
+}
+
+static void
+print_br_port_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETMDB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", ifindex=" IFINDEX_LO_STR "}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct br_port_msg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* MDBA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_br_port_msg, print_br_port_msg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_BR_PORT_MSG")
+
+#endif
diff --git a/tests-m32/nlattr_br_port_msg.gen.test b/tests-m32/nlattr_br_port_msg.gen.test
new file mode 100755
index 0000000..f843797
--- /dev/null
+++ b/tests-m32/nlattr_br_port_msg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_br_port_msg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_crypto_user_alg.c b/tests-m32/nlattr_crypto_user_alg.c
new file mode 100644
index 0000000..2482b33
--- /dev/null
+++ b/tests-m32/nlattr_crypto_user_alg.c
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_CRYPTOUSER_H
+
+# include <stdio.h>
+# include <stdint.h>
+# include "test_nlattr.h"
+# include <linux/cryptouser.h>
+
+# define CRYPTOCFGA_REPORT_LARVAL 2
+
+static void
+init_crypto_user_alg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = CRYPTO_MSG_GETALG,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct crypto_user_alg *const alg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct crypto_user_alg, alg,
+		.cru_name = "abcd",
+		.cru_driver_name = "efgh",
+		.cru_module_name = "ijkl",
+	);
+}
+
+static void
+print_crypto_user_alg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=CRYPTO_MSG_GETALG"
+	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
+	       ", {cru_name=\"abcd\", cru_driver_name=\"efgh\""
+	       ", cru_module_name=\"ijkl\", cru_type=0"
+	       ", cru_mask=0, cru_refcnt=0, cru_flags=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_CRYPTO);
+	const unsigned int hdrlen = sizeof(struct crypto_user_alg);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	char *const str = tail_alloc(DEFAULT_STRLEN);
+	fill_memory_ex(str, DEFAULT_STRLEN, '0', 10);
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_crypto_user_alg, print_crypto_user_alg,
+		    CRYPTOCFGA_REPORT_LARVAL,
+		    DEFAULT_STRLEN, str, DEFAULT_STRLEN,
+		    printf("{type=\"%.*s\"...}", DEFAULT_STRLEN, str));
+	str[DEFAULT_STRLEN - 1] = '\0';
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_crypto_user_alg, print_crypto_user_alg,
+		    CRYPTOCFGA_REPORT_LARVAL,
+		    DEFAULT_STRLEN, str, DEFAULT_STRLEN,
+		    printf("{type=\"%s\"}", str));
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_HASH
+	static const struct crypto_report_hash rhash = {
+		.type = "efgh",
+		.blocksize = 0xabcdefdc,
+		.digestsize = 0xfebcdacd
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_HASH,
+			      pattern, rhash, print_quoted_memory,
+			      printf("{type=\"efgh\"");
+			      PRINT_FIELD_U(", ", rhash, blocksize);
+			      PRINT_FIELD_U(", ", rhash, digestsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_BLKCIPHER
+	static const struct crypto_report_blkcipher rblkcipher = {
+		.type = "abcd",
+		.geniv = "efgh",
+		.blocksize = 0xabcdefac,
+		.min_keysize = 0xfeadbcda,
+		.max_keysize = 0xbdacdeac,
+		.ivsize = 0xefacbdac
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_BLKCIPHER,
+			      pattern, rblkcipher, print_quoted_memory,
+			      printf("{type=\"abcd\", geniv=\"efgh\"");
+			      PRINT_FIELD_U(", ", rblkcipher, blocksize);
+			      PRINT_FIELD_U(", ", rblkcipher, min_keysize);
+			      PRINT_FIELD_U(", ", rblkcipher, max_keysize);
+			      PRINT_FIELD_U(", ", rblkcipher, ivsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_AEAD
+	static const struct crypto_report_aead raead = {
+		.type = "abcd",
+		.geniv = "efgh",
+		.blocksize = 0xbaefdbac,
+		.maxauthsize = 0xfdbdbcda,
+		.ivsize = 0xacbefdac
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_AEAD,
+			      pattern, raead, print_quoted_memory,
+			      printf("{type=\"abcd\", geniv=\"efgh\"");
+			      PRINT_FIELD_U(", ", raead, blocksize);
+			      PRINT_FIELD_U(", ", raead, maxauthsize);
+			      PRINT_FIELD_U(", ", raead, ivsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_RNG
+	static const struct crypto_report_rng rrng = {
+		.type = "abcd",
+		.seedsize = 0xabcdefac
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_RNG,
+			      pattern, rrng, print_quoted_memory,
+			      printf("{type=\"abcd\"");
+			      PRINT_FIELD_U(", ", rrng, seedsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_CIPHER
+	static const struct crypto_report_cipher rcipher = {
+		.type = "abcd",
+		.blocksize = 0xabcdefac,
+		.min_keysize = 0xfeadbcda,
+		.max_keysize = 0xbdacdeac,
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_CIPHER,
+			      pattern, rcipher, print_quoted_memory,
+			      printf("{type=\"abcd\"");
+			      PRINT_FIELD_U(", ", rcipher, blocksize);
+			      PRINT_FIELD_U(", ", rcipher, min_keysize);
+			      PRINT_FIELD_U(", ", rcipher, max_keysize);
+			      printf("}"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_CRYPTOUSER_H");
+
+#endif
diff --git a/tests-m32/nlattr_crypto_user_alg.gen.test b/tests-m32/nlattr_crypto_user_alg.gen.test
new file mode 100755
index 0000000..81d866e
--- /dev/null
+++ b/tests-m32/nlattr_crypto_user_alg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_crypto_user_alg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_dcbmsg.c b/tests-m32/nlattr_dcbmsg.c
new file mode 100644
index 0000000..cd63bb6
--- /dev/null
+++ b/tests-m32/nlattr_dcbmsg.c
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_DCBMSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/dcbnl.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_dcbmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETDCB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct dcbmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct dcbmsg, msg,
+		.dcb_family = AF_UNIX,
+		.cmd = DCB_CMD_UNDEFINED
+	);
+}
+
+static void
+print_dcbmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETDCB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {dcb_family=AF_UNIX"
+	       ", cmd=DCB_CMD_UNDEFINED}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct dcbmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* DCB_ATTR_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_dcbmsg, print_dcbmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_DCBMSG")
+
+#endif
diff --git a/tests-m32/nlattr_dcbmsg.gen.test b/tests-m32/nlattr_dcbmsg.gen.test
new file mode 100755
index 0000000..d78bfcf
--- /dev/null
+++ b/tests-m32/nlattr_dcbmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_dcbmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_fib_rule_hdr.c b/tests-m32/nlattr_fib_rule_hdr.c
new file mode 100644
index 0000000..394ab10
--- /dev/null
+++ b/tests-m32/nlattr_fib_rule_hdr.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_FIB_RULES_H
+
+# include <stdio.h>
+# include <inttypes.h>
+# include "test_nlattr.h"
+# include <linux/fib_rules.h>
+# include <linux/ip.h>
+# include <linux/rtnetlink.h>
+
+#define FRA_TUN_ID 12
+#define FRA_TABLE 15
+#define FRA_UID_RANGE 20
+
+static void
+init_rtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETRULE,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct rtmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct rtmsg, msg,
+		.rtm_family = AF_UNIX,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_UNSPEC,
+		.rtm_type = FR_ACT_TO_TBL,
+		.rtm_flags = FIB_RULE_INVERT
+	);
+}
+
+static void
+print_rtmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETRULE, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", dst_len=0, src_len=0"
+	       ", tos=IPTOS_LOWDELAY"
+	       ", table=RT_TABLE_UNSPEC"
+	       ", action=FR_ACT_TO_TBL"
+	       ", flags=FIB_RULE_INVERT}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct rtmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* FRA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_rtmsg, print_rtmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    FRA_DST, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	const uint32_t table_id = RT_TABLE_DEFAULT;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_TABLE, pattern, table_id,
+			   printf("RT_TABLE_DEFAULT"));
+
+#ifdef HAVE_STRUCT_FIB_RULE_UID_RANGE
+	static const struct fib_rule_uid_range range = {
+		.start = 0xabcdedad,
+		.end = 0xbcdeadba
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_UID_RANGE, pattern, range,
+			   PRINT_FIELD_U("{", range, start);
+			   PRINT_FIELD_U(", ", range, end);
+			   printf("}"));
+#endif
+#if defined HAVE_BE64TOH || defined be64toh
+	const uint64_t tun_id = 0xabcdcdbeedabadef;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_TUN_ID, pattern, tun_id,
+			   printf("htobe64(%" PRIu64 ")", be64toh(tun_id)));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_FIB_RULES_H")
+
+#endif
diff --git a/tests-m32/nlattr_fib_rule_hdr.gen.test b/tests-m32/nlattr_fib_rule_hdr.gen.test
new file mode 100755
index 0000000..cbdad4d
--- /dev/null
+++ b/tests-m32/nlattr_fib_rule_hdr.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_fib_rule_hdr +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ifaddrlblmsg.c b/tests-m32/nlattr_ifaddrlblmsg.c
new file mode 100644
index 0000000..6003634
--- /dev/null
+++ b/tests-m32/nlattr_ifaddrlblmsg.c
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/if_addrlabel.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_ifaddrlblmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETADDRLABEL,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifaddrlblmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifaddrlblmsg, msg,
+		.ifal_family = AF_UNIX,
+		.ifal_index = ifindex_lo()
+	);
+}
+
+static void
+print_ifaddrlblmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETADDRLABEL, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifal_family=AF_UNIX"
+	       ", ifal_prefixlen=0, ifal_flags=0"
+	       ", ifal_index=" IFINDEX_LO_STR
+	       ", ifal_seq=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifaddrlblmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* IFAL_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ifaddrlblmsg, print_ifaddrlblmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifaddrlblmsg, print_ifaddrlblmsg,
+		    IFAL_ADDRESS, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_IFADDRLBLMSG")
+
+#endif
diff --git a/tests-m32/nlattr_ifaddrlblmsg.gen.test b/tests-m32/nlattr_ifaddrlblmsg.gen.test
new file mode 100755
index 0000000..0c41dbe
--- /dev/null
+++ b/tests-m32/nlattr_ifaddrlblmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrlblmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ifaddrmsg.c b/tests-m32/nlattr_ifaddrmsg.c
new file mode 100644
index 0000000..93fbef1
--- /dev/null
+++ b/tests-m32/nlattr_ifaddrmsg.c
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <arpa/inet.h>
+#include "test_nlattr.h"
+#ifdef HAVE_LINUX_IF_ADDR_H
+# include <linux/if_addr.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define IFA_FLAGS 8
+
+#define SET_IFA_FAMILY(af)		\
+	do {				\
+		ifa_family = af;	\
+		ifa_family_str = #af;	\
+	}				\
+	while (0)
+
+uint8_t ifa_family;
+const char *ifa_family_str;
+
+static void
+init_ifaddrmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETADDR,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifaddrmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifaddrmsg, msg,
+		.ifa_family = ifa_family,
+		.ifa_flags = IFA_F_SECONDARY,
+		.ifa_scope = RT_SCOPE_UNIVERSE,
+		.ifa_index = ifindex_lo()
+	);
+}
+
+static void
+print_ifaddrmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETADDR, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifa_family=%s"
+	       ", ifa_prefixlen=0"
+	       ", ifa_flags=IFA_F_SECONDARY"
+	       ", ifa_scope=RT_SCOPE_UNIVERSE"
+	       ", ifa_index=" IFINDEX_LO_STR "}",
+	       msg_len, ifa_family_str);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifaddrmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	SET_IFA_FAMILY(AF_UNSPEC);
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* IFA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ifaddrmsg, print_ifaddrmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifaddrmsg, print_ifaddrmsg,
+		    IFA_ADDRESS, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	SET_IFA_FAMILY(AF_INET);
+	static const char address4[] = "12.34.56.78";
+	struct in_addr a4;
+
+	if (!inet_pton(AF_INET, address4, &a4))
+		perror_msg_and_skip("inet_pton");
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_ADDRESS, pattern, a4,
+			   printf("%s", address4));
+
+	SET_IFA_FAMILY(AF_INET6);
+	static const char address6[] = "12:34:56:78:90:ab:cd:ef";
+	struct in6_addr a6;
+
+	if (!inet_pton(AF_INET6, address6, &a6))
+		perror_msg_and_skip("inet_pton");
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_ADDRESS, pattern, a6,
+			   printf("%s", address6));
+
+	static const struct ifa_cacheinfo ci = {
+		.ifa_prefered = 0xabcdefac,
+		.ifa_valid = 0xbcdadbca,
+		.cstamp = 0xcdabedba,
+		.tstamp = 0xdebabdac
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_CACHEINFO, pattern, ci,
+			   PRINT_FIELD_U("{", ci, ifa_prefered);
+			   PRINT_FIELD_U(", ", ci, ifa_valid);
+			   PRINT_FIELD_U(", ", ci, cstamp);
+			   PRINT_FIELD_U(", ", ci, tstamp);
+			   printf("}"));
+
+	const uint32_t ifa_flags = IFA_F_SECONDARY | IFA_F_PERMANENT;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_FLAGS, pattern, ifa_flags,
+			   printf("IFA_F_SECONDARY|IFA_F_PERMANENT"));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_ifaddrmsg.gen.test b/tests-m32/nlattr_ifaddrmsg.gen.test
new file mode 100755
index 0000000..d659e00
--- /dev/null
+++ b/tests-m32/nlattr_ifaddrmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ifinfomsg.c b/tests-m32/nlattr_ifinfomsg.c
new file mode 100644
index 0000000..1fff52c
--- /dev/null
+++ b/tests-m32/nlattr_ifinfomsg.c
@@ -0,0 +1,348 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <stddef.h>
+#include "test_nlattr.h"
+
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#ifndef IFLA_LINKINFO
+# define IFLA_LINKINFO 18
+#endif
+#ifndef IFLA_VF_PORTS
+# define IFLA_VF_PORTS 24
+#endif
+#define IFLA_LINK_NETNSID 37
+
+#ifndef IFLA_INFO_KIND
+# define IFLA_INFO_KIND 1
+#endif
+
+#ifndef IFLA_VF_PORT
+# define IFLA_VF_PORT 1
+#endif
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* IFLA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ifinfomsg, print_ifinfomsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	const int32_t netnsid = 0xacbdabda;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_LINK_NETNSID, pattern, netnsid,
+			   printf("%d", netnsid));
+
+	static const struct rtnl_link_stats st = {
+		.rx_packets = 0xabcdefac,
+		.tx_packets = 0xbcdacdab,
+		.rx_bytes = 0xcdbafaab,
+		.tx_bytes = 0xdafabadb,
+		.rx_errors = 0xeabcdaeb,
+		.tx_errors = 0xfefabeab,
+		.rx_dropped = 0xadbafafb,
+		.tx_dropped = 0xbdffabda,
+		.multicast = 0xcdabdfea,
+		.collisions = 0xefadbaeb,
+		.rx_length_errors = 0xfabffabd,
+		.rx_over_errors = 0xafbafabc,
+		.rx_crc_errors = 0xbfdabdad,
+		.rx_frame_errors = 0xcfdabfad,
+		.rx_fifo_errors = 0xddfdebad,
+		.rx_missed_errors = 0xefabdcba,
+		.tx_aborted_errors = 0xefdadbfa,
+		.tx_carrier_errors = 0xfaefbada,
+		.tx_fifo_errors = 0xaebdffab,
+		.tx_heartbeat_errors = 0xbadebaaf,
+		.tx_window_errors = 0xcdafbada,
+		.rx_compressed = 0xdeffadbd,
+		.tx_compressed = 0xefdadfab
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_STATS, pattern, st,
+			   PRINT_FIELD_U("{", st, rx_packets);
+			   PRINT_FIELD_U(", ", st, tx_packets);
+			   PRINT_FIELD_U(", ", st, rx_bytes);
+			   PRINT_FIELD_U(", ", st, tx_bytes);
+			   PRINT_FIELD_U(", ", st, rx_errors);
+			   PRINT_FIELD_U(", ", st, tx_errors);
+			   PRINT_FIELD_U(", ", st, rx_dropped);
+			   PRINT_FIELD_U(", ", st, tx_dropped);
+			   PRINT_FIELD_U(", ", st, multicast);
+			   PRINT_FIELD_U(", ", st, collisions);
+			   PRINT_FIELD_U(", ", st, rx_length_errors);
+			   PRINT_FIELD_U(", ", st, rx_over_errors);
+			   PRINT_FIELD_U(", ", st, rx_crc_errors);
+			   PRINT_FIELD_U(", ", st, rx_frame_errors);
+			   PRINT_FIELD_U(", ", st, rx_fifo_errors);
+			   PRINT_FIELD_U(", ", st, rx_missed_errors);
+			   PRINT_FIELD_U(", ", st, tx_aborted_errors);
+			   PRINT_FIELD_U(", ", st, tx_carrier_errors);
+			   PRINT_FIELD_U(", ", st, tx_fifo_errors);
+			   PRINT_FIELD_U(", ", st, tx_heartbeat_errors);
+			   PRINT_FIELD_U(", ", st, tx_window_errors);
+			   PRINT_FIELD_U(", ", st, rx_compressed);
+			   PRINT_FIELD_U(", ", st, tx_compressed);
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER
+			   PRINT_FIELD_U(", ", st, rx_nohandler);
+#endif
+			   printf("}"));
+
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER
+	const unsigned int sizeof_stats =
+		offsetofend(struct rtnl_link_stats, tx_compressed);
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_STATS, sizeof_stats, &st, sizeof_stats,
+		    PRINT_FIELD_U("{", st, rx_packets);
+		    PRINT_FIELD_U(", ", st, tx_packets);
+		    PRINT_FIELD_U(", ", st, rx_bytes);
+		    PRINT_FIELD_U(", ", st, tx_bytes);
+		    PRINT_FIELD_U(", ", st, rx_errors);
+		    PRINT_FIELD_U(", ", st, tx_errors);
+		    PRINT_FIELD_U(", ", st, rx_dropped);
+		    PRINT_FIELD_U(", ", st, tx_dropped);
+		    PRINT_FIELD_U(", ", st, multicast);
+		    PRINT_FIELD_U(", ", st, collisions);
+		    PRINT_FIELD_U(", ", st, rx_length_errors);
+		    PRINT_FIELD_U(", ", st, rx_over_errors);
+		    PRINT_FIELD_U(", ", st, rx_crc_errors);
+		    PRINT_FIELD_U(", ", st, rx_frame_errors);
+		    PRINT_FIELD_U(", ", st, rx_fifo_errors);
+		    PRINT_FIELD_U(", ", st, rx_missed_errors);
+		    PRINT_FIELD_U(", ", st, tx_aborted_errors);
+		    PRINT_FIELD_U(", ", st, tx_carrier_errors);
+		    PRINT_FIELD_U(", ", st, tx_fifo_errors);
+		    PRINT_FIELD_U(", ", st, tx_heartbeat_errors);
+		    PRINT_FIELD_U(", ", st, tx_window_errors);
+		    PRINT_FIELD_U(", ", st, rx_compressed);
+		    PRINT_FIELD_U(", ", st, tx_compressed);
+		    printf("}"));
+#endif /* HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER */
+
+	static const struct rtnl_link_ifmap map = {
+		.mem_start = 0xadcbefedefbcdedb,
+		.mem_end = 0xefcbeabdecdcdefa,
+		.base_addr = 0xaddbeabdfaacdbae,
+		.irq = 0xefaf,
+		.dma = 0xab,
+		.port = 0xcd
+	};
+	const unsigned int sizeof_ifmap =
+		offsetofend(struct rtnl_link_ifmap, port);
+	const unsigned int plen = sizeof_ifmap - 1 > DEFAULT_STRLEN
+				  ? DEFAULT_STRLEN
+				  : (int) sizeof_ifmap - 1;
+	/* len < sizeof_ifmap */
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_MAP, plen, pattern, plen,
+		    print_quoted_hex(pattern, plen));
+
+	/* short read of sizeof_ifmap */
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_MAP, sizeof_ifmap, &map, sizeof_ifmap - 1,
+		    printf("%p", RTA_DATA(TEST_NLATTR_nla)));
+
+	/* sizeof_ifmap */
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_MAP, sizeof_ifmap, &map, sizeof_ifmap,
+		    PRINT_FIELD_X("{", map, mem_start);
+		    PRINT_FIELD_X(", ", map, mem_end);
+		    PRINT_FIELD_X(", ", map, base_addr);
+		    PRINT_FIELD_U(", ", map, irq);
+		    PRINT_FIELD_U(", ", map, dma);
+		    PRINT_FIELD_U(", ", map, port);
+		    printf("}"));
+
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64
+	static const struct rtnl_link_stats64 st64 = {
+		.rx_packets = 0xadcbefedefbcdedb,
+		.tx_packets = 0xbdabdedabdcdeabd,
+		.rx_bytes = 0xcdbaefbaeadfabec,
+		.tx_bytes = 0xdbaedbafabbeacdb,
+		.rx_errors = 0xefabfdaefabaefab,
+		.tx_errors = 0xfaebfabfabbaeabf,
+		.rx_dropped = 0xacdbaedbadbabeba,
+		.tx_dropped = 0xbcdeffebdabeadbe,
+		.multicast = 0xeeffbaeabaeffabe,
+		.collisions = 0xffbaefcefbafacef,
+		.rx_length_errors = 0xaabbdeabceffdecb,
+		.rx_over_errors = 0xbbdcdadebadeaeed,
+		.rx_crc_errors= 0xccdeabecefaedbef,
+		.rx_frame_errors = 0xddbedaedebcedaef,
+		.rx_fifo_errors = 0xeffbadefafdaeaab,
+		.rx_missed_errors = 0xfefaebccceadeecd,
+		.tx_aborted_errors = 0xabcdadefcdadef,
+		.tx_carrier_errors = 0xbccdafaeeaaefe,
+		.tx_fifo_errors = 0xcddefdbedeadce,
+		.tx_heartbeat_errors = 0xedaededdadcdea,
+		.tx_window_errors = 0xfdacdeaccedcda,
+		.rx_compressed = 0xacdbbcacdbccef,
+		.tx_compressed = 0xbcdadefcdedfea
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_STATS64, pattern, st64,
+			   PRINT_FIELD_U("{", st64, rx_packets);
+			   PRINT_FIELD_U(", ", st64, tx_packets);
+			   PRINT_FIELD_U(", ", st64, rx_bytes);
+			   PRINT_FIELD_U(", ", st64, tx_bytes);
+			   PRINT_FIELD_U(", ", st64, rx_errors);
+			   PRINT_FIELD_U(", ", st64, tx_errors);
+			   PRINT_FIELD_U(", ", st64, rx_dropped);
+			   PRINT_FIELD_U(", ", st64, tx_dropped);
+			   PRINT_FIELD_U(", ", st64, multicast);
+			   PRINT_FIELD_U(", ", st64, collisions);
+			   PRINT_FIELD_U(", ", st64, rx_length_errors);
+			   PRINT_FIELD_U(", ", st64, rx_over_errors);
+			   PRINT_FIELD_U(", ", st64, rx_crc_errors);
+			   PRINT_FIELD_U(", ", st64, rx_frame_errors);
+			   PRINT_FIELD_U(", ", st64, rx_fifo_errors);
+			   PRINT_FIELD_U(", ", st64, rx_missed_errors);
+			   PRINT_FIELD_U(", ", st64, tx_aborted_errors);
+			   PRINT_FIELD_U(", ", st64, tx_carrier_errors);
+			   PRINT_FIELD_U(", ", st64, tx_fifo_errors);
+			   PRINT_FIELD_U(", ", st64, tx_heartbeat_errors);
+			   PRINT_FIELD_U(", ", st64, tx_window_errors);
+			   PRINT_FIELD_U(", ", st64, rx_compressed);
+			   PRINT_FIELD_U(", ", st64, tx_compressed);
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER
+			   PRINT_FIELD_U(", ", st64, rx_nohandler);
+#endif
+			   printf("}"));
+
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER
+	const unsigned int sizeof_stats64 =
+		offsetofend(struct rtnl_link_stats64, tx_compressed);
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_STATS64, sizeof_stats64, &st64, sizeof_stats64,
+		    PRINT_FIELD_U("{", st64, rx_packets);
+		    PRINT_FIELD_U(", ", st64, tx_packets);
+		    PRINT_FIELD_U(", ", st64, rx_bytes);
+		    PRINT_FIELD_U(", ", st64, tx_bytes);
+		    PRINT_FIELD_U(", ", st64, rx_errors);
+		    PRINT_FIELD_U(", ", st64, tx_errors);
+		    PRINT_FIELD_U(", ", st64, rx_dropped);
+		    PRINT_FIELD_U(", ", st64, tx_dropped);
+		    PRINT_FIELD_U(", ", st64, multicast);
+		    PRINT_FIELD_U(", ", st64, collisions);
+		    PRINT_FIELD_U(", ", st64, rx_length_errors);
+		    PRINT_FIELD_U(", ", st64, rx_over_errors);
+		    PRINT_FIELD_U(", ", st64, rx_crc_errors);
+		    PRINT_FIELD_U(", ", st64, rx_frame_errors);
+		    PRINT_FIELD_U(", ", st64, rx_fifo_errors);
+		    PRINT_FIELD_U(", ", st64, rx_missed_errors);
+		    PRINT_FIELD_U(", ", st64, tx_aborted_errors);
+		    PRINT_FIELD_U(", ", st64, tx_carrier_errors);
+		    PRINT_FIELD_U(", ", st64, tx_fifo_errors);
+		    PRINT_FIELD_U(", ", st64, tx_heartbeat_errors);
+		    PRINT_FIELD_U(", ", st64, tx_window_errors);
+		    PRINT_FIELD_U(", ", st64, rx_compressed);
+		    PRINT_FIELD_U(", ", st64, tx_compressed);
+		    printf("}"));
+#endif /* HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER */
+#endif /* HAVE_STRUCT_RTNL_LINK_STATS64 */
+
+	struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = IFLA_INFO_KIND,
+	};
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_LINKINFO, sizeof(nla), &nla, sizeof(nla),
+		    printf("{nla_len=%u, nla_type=IFLA_INFO_KIND}",
+			   nla.nla_len));
+
+	nla.nla_type = IFLA_VF_PORT;
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_VF_PORTS, sizeof(nla), &nla, sizeof(nla),
+		    printf("{nla_len=%u, nla_type=IFLA_VF_PORT}",
+			   nla.nla_len));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_ifinfomsg.gen.test b/tests-m32/nlattr_ifinfomsg.gen.test
new file mode 100755
index 0000000..618df14
--- /dev/null
+++ b/tests-m32/nlattr_ifinfomsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifinfomsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ifla_brport.c b/tests-m32/nlattr_ifla_brport.c
new file mode 100644
index 0000000..ae7c9da
--- /dev/null
+++ b/tests-m32/nlattr_ifla_brport.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <inttypes.h>
+#include "test_nlattr.h"
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define IFLA_BRPORT_PRIORITY 2
+#define IFLA_BRPORT_MESSAGE_AGE_TIMER 21
+
+const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = IFLA_PROTINFO
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}"
+	       ", {{nla_len=%u, nla_type=IFLA_PROTINFO}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const uint16_t u16 = 0xabcd;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_BRPORT_PRIORITY, pattern, u16,
+				  printf("%u", u16));
+
+	const uint64_t u64 = 0xabcdedeeefeafeab;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_BRPORT_MESSAGE_AGE_TIMER, pattern, u64,
+				  printf("%" PRIu64, u64));
+
+#ifdef HAVE_STRUCT_IFLA_BRIDGE_ID
+	static const struct ifla_bridge_id id = {
+		.prio = { 0xab, 0xcd },
+		.addr = { 0xab, 0xcd, 0xef, 0xac, 0xbc, 0xcd }
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_BRPORT_ROOT_ID, pattern, id,
+				  printf("{prio=[%u, %u]"
+					 ", addr=%02x:%02x:%02x:%02x:%02x:%02x}",
+					 id.prio[0], id.prio[1],
+					 id.addr[0], id.addr[1], id.addr[2],
+					 id.addr[3], id.addr[4], id.addr[5]));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_ifla_brport.gen.test b/tests-m32/nlattr_ifla_brport.gen.test
new file mode 100755
index 0000000..48bfed4
--- /dev/null
+++ b/tests-m32/nlattr_ifla_brport.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_brport +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ifla_port.c b/tests-m32/nlattr_ifla_port.c
new file mode 100644
index 0000000..61e90fe
--- /dev/null
+++ b/tests-m32/nlattr_ifla_port.c
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#ifndef IFLA_PORT_SELF
+# define IFLA_PORT_SELF 25
+#endif
+#ifndef IFLA_PORT_VF
+# define IFLA_PORT_VF 1
+#endif
+
+const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = IFLA_PORT_SELF
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}"
+	       ", {{nla_len=%u, nla_type=IFLA_PORT_SELF}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const uint32_t num = 0xabacdbcd;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_PORT_VF, pattern, num,
+				  printf("%u", num));
+
+#ifdef HAVE_STRUCT_IFLA_PORT_VSI
+	static const struct ifla_port_vsi vsi = {
+		.vsi_mgr_id = 0xab,
+		.vsi_type_id = "abc",
+		.vsi_type_version = 0xef
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_PORT_VSI_TYPE, pattern, vsi,
+				  PRINT_FIELD_U("{", vsi, vsi_mgr_id);
+				  printf(", vsi_type_id=\"\\x61\\x62\\x63\"");
+				  PRINT_FIELD_U(", ", vsi, vsi_type_version);
+				  printf("}"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_ifla_port.gen.test b/tests-m32/nlattr_ifla_port.gen.test
new file mode 100755
index 0000000..605bf04
--- /dev/null
+++ b/tests-m32/nlattr_ifla_port.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_port +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ifla_xdp.c b/tests-m32/nlattr_ifla_xdp.c
new file mode 100644
index 0000000..cca5219
--- /dev/null
+++ b/tests-m32/nlattr_ifla_xdp.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#ifndef IFLA_XDP
+# define IFLA_XDP 43
+#endif
+#ifndef IFLA_XDP_FD
+# define IFLA_XDP_FD 1
+#endif
+
+const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = IFLA_XDP
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}"
+	       ", {{nla_len=%u, nla_type=IFLA_XDP}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const int32_t num = 0xabacdbcd;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_XDP_FD, pattern, num,
+				  printf("%d", num));
+
+#ifdef XDP_FLAGS_UPDATE_IF_NOEXIST
+	const uint32_t flags = XDP_FLAGS_UPDATE_IF_NOEXIST;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_XDP_FLAGS, pattern, flags,
+				  printf("XDP_FLAGS_UPDATE_IF_NOEXIST"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_ifla_xdp.gen.test b/tests-m32/nlattr_ifla_xdp.gen.test
new file mode 100755
index 0000000..a30e843
--- /dev/null
+++ b/tests-m32/nlattr_ifla_xdp.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_xdp +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_inet_diag_msg.c b/tests-m32/nlattr_inet_diag_msg.c
index d9d564c..5666d74 100644
--- a/tests-m32/nlattr_inet_diag_msg.c
+++ b/tests-m32/nlattr_inet_diag_msg.c
@@ -39,12 +39,6 @@
 
 static const char address[] = "10.11.12.13";
 
-#ifdef HAVE_IF_INDEXTONAME
-# define IFINDEX_LO	(if_nametoindex("lo"))
-#else
-# define IFINDEX_LO	1
-#endif
-
 static void
 init_inet_diag_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
 {
@@ -58,7 +52,7 @@
 	SET_STRUCT(struct inet_diag_msg, msg,
 		.idiag_family = AF_INET,
 		.idiag_state = TCP_LISTEN,
-		.id.idiag_if = IFINDEX_LO
+		.id.idiag_if = ifindex_lo()
 	);
 
 	if (!inet_pton(AF_INET, address, msg->id.idiag_src) ||
@@ -73,9 +67,10 @@
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {idiag_family=AF_INET"
 	       ", idiag_state=TCP_LISTEN, idiag_timer=0, idiag_retrans=0"
 	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=if_nametoindex(\"lo\"), idiag_cookie=[0, 0]}"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=" IFINDEX_LO_STR
+	       ", idiag_cookie=[0, 0]}"
 	       ", idiag_expires=0, idiag_rqueue=0, idiag_wqueue=0"
 	       ", idiag_uid=0, idiag_inode=0}",
 	       msg_len, address, address);
@@ -169,6 +164,18 @@
 			  init_inet_diag_msg, print_inet_diag_msg,
 			  INET_DIAG_SKMEMINFO, pattern, mem, print_uint);
 
+	static uint32_t bigmem[SK_MEMINFO_VARS + 1];
+	memcpy(bigmem, pattern, sizeof(bigmem));
+
+	TEST_NLATTR(fd, nlh0, hdrlen, init_inet_diag_msg, print_inet_diag_msg,
+		    INET_DIAG_SKMEMINFO, sizeof(bigmem), bigmem, sizeof(bigmem),
+		    size_t i;
+		    for (i = 0; i < SK_MEMINFO_VARS; ++i) {
+			printf(i ? ", " : "[");
+			print_uint(&bigmem[i]);
+		    }
+		    printf(", ...]"));
+
 	static const uint32_t mark = 0xabdfadca;
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
diff --git a/tests-m32/nlattr_inet_diag_req_compat.c b/tests-m32/nlattr_inet_diag_req_compat.c
new file mode 100644
index 0000000..b0b2171
--- /dev/null
+++ b/tests-m32/nlattr_inet_diag_req_compat.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <net/if.h>
+#include <netinet/tcp.h>
+#include "test_nlattr.h"
+#include <linux/inet_diag.h>
+#include <linux/rtnetlink.h>
+#include <linux/sock_diag.h>
+
+static const char address[] = "10.11.12.13";
+
+static void
+init_inet_diag_req(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = TCPDIAG_GETSOCK,
+		.nlmsg_flags = NLM_F_REQUEST
+	);
+
+	struct inet_diag_req *const req = NLMSG_DATA(nlh);
+	SET_STRUCT(struct inet_diag_req, req,
+		.idiag_family = AF_INET,
+		.idiag_ext = 1 << (INET_DIAG_TOS - 1),
+		.idiag_states = 1 << TCP_LAST_ACK,
+		.id.idiag_if = ifindex_lo()
+	);
+
+	if (!inet_pton(AF_INET, address, req->id.idiag_src) ||
+	    !inet_pton(AF_INET, address, req->id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
+}
+
+static void
+print_inet_diag_req(const unsigned int msg_len)
+{
+	printf("{len=%u, type=TCPDIAG_GETSOCK, flags=NLM_F_REQUEST"
+	       ", seq=0, pid=0}, {idiag_family=AF_INET"
+	       ", idiag_src_len=0, idiag_dst_len=0"
+	       ", idiag_ext=1<<(INET_DIAG_TOS-1)"
+	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=" IFINDEX_LO_STR
+	       ", idiag_cookie=[0, 0]}"
+	       ", idiag_states=1<<TCP_LAST_ACK, idiag_dbs=0}",
+	       msg_len, address, address);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct inet_diag_req);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* INET_DIAG_REQ_??? */",
+		INET_DIAG_REQ_BYTECODE + 1);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_inet_diag_req, print_inet_diag_req,
+		     INET_DIAG_REQ_BYTECODE + 1, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_inet_diag_req_compat.gen.test b/tests-m32/nlattr_inet_diag_req_compat.gen.test
new file mode 100755
index 0000000..bf8b65c
--- /dev/null
+++ b/tests-m32/nlattr_inet_diag_req_compat.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_compat +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_inet_diag_req_v2.c b/tests-m32/nlattr_inet_diag_req_v2.c
new file mode 100644
index 0000000..1e09abe
--- /dev/null
+++ b/tests-m32/nlattr_inet_diag_req_v2.c
@@ -0,0 +1,424 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <net/if.h>
+#include <netinet/tcp.h>
+#include "test_nlattr.h"
+#include <linux/inet_diag.h>
+#include <linux/rtnetlink.h>
+#include <linux/sock_diag.h>
+
+static const char address[] = "10.11.12.13";
+static const unsigned int hdrlen = sizeof(struct inet_diag_req_v2);
+static void *nlh0;
+static char pattern[4096];
+
+static void
+init_inet_diag_req_v2(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
+		.nlmsg_flags = NLM_F_REQUEST
+	);
+
+	struct inet_diag_req_v2 *const req = NLMSG_DATA(nlh);
+	SET_STRUCT(struct inet_diag_req_v2, req,
+		.sdiag_family = AF_INET,
+		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
+		.sdiag_protocol = IPPROTO_TCP,
+		.idiag_states = 1 << TCP_CLOSE,
+		.id.idiag_if = ifindex_lo()
+	);
+
+	if (!inet_pton(AF_INET, address, req->id.idiag_src) ||
+	    !inet_pton(AF_INET, address, req->id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
+}
+
+static void
+print_inet_diag_req_v2(const unsigned int msg_len)
+{
+	printf("{len=%u, type=SOCK_DIAG_BY_FAMILY"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", {sdiag_family=AF_INET, sdiag_protocol=IPPROTO_TCP"
+	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+	       ", idiag_states=1<<TCP_CLOSE"
+	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=" IFINDEX_LO_STR
+	       ", idiag_cookie=[0, 0]}}",
+	       msg_len, address, address);
+}
+
+static void
+test_inet_diag_bc_op(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+		.yes = 0xaf,
+		.no = 0xafcd
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_inet_diag_req_v2, print_inet_diag_req_v2,
+			   INET_DIAG_REQ_BYTECODE, pattern, op,
+			   printf("{code=INET_DIAG_BC_S_COND");
+			   PRINT_FIELD_U(", ", op, yes);
+			   PRINT_FIELD_U(", ", op, no);
+			   printf("}"));
+}
+
+static void
+print_inet_diag_bc_op(const char *const code)
+{
+	printf("{{code=%s, yes=0, no=0}, ", code);
+}
+
+static void
+test_inet_diag_bc_s_cond(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+	};
+	static const struct inet_diag_hostcond cond = {
+		.family = AF_UNSPEC,
+		.prefix_len = 0xad,
+		.port = 0xadfa
+	};
+	char buf[sizeof(op) + sizeof(cond)];
+	memcpy(buf, &op, sizeof(op));
+
+	const unsigned int plen = sizeof(cond) - 1 > DEFAULT_STRLEN ?
+		sizeof(op) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	memcpy(buf + sizeof(op), &pattern, sizeof(cond));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_quoted_hex(buf + sizeof(op), plen - sizeof(op));
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op)));
+
+	memcpy(buf + sizeof(op), &cond, sizeof(cond));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    printf("{family=AF_UNSPEC");
+		    PRINT_FIELD_U(", ", cond, prefix_len);
+		    PRINT_FIELD_U(", ", cond, port);
+		    printf("}}"));
+}
+
+static void
+print_inet_diag_hostcond(const char *const family)
+{
+	printf("{family=%s, prefix_len=0, port=0, ", family);
+}
+
+static void
+test_in_addr(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+	};
+	static const struct inet_diag_hostcond cond = {
+		.family = AF_INET,
+	};
+	struct in_addr addr;
+	if (!inet_pton(AF_INET, address, &addr))
+		perror_msg_and_skip("inet_pton");
+
+	char buf[sizeof(op) + sizeof(cond) + sizeof(addr)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), &cond, sizeof(cond));
+
+	const unsigned int plen = sizeof(addr) - 1 > DEFAULT_STRLEN ?
+		sizeof(cond) + sizeof(cond) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	memcpy(buf + sizeof(op) + sizeof(cond), &pattern, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET");
+		    printf("addr=");
+		    print_quoted_hex(pattern, plen - sizeof(op) - sizeof(cond));
+		    printf("}}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET");
+		    printf("addr=%p}}",
+			   RTA_DATA(TEST_NLATTR_nla)
+			   + sizeof(op) + sizeof(cond)));
+
+	memcpy(buf + sizeof(op) + sizeof(cond), &addr, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET");
+		    printf("addr=inet_addr(\"%s\")}}", address));
+}
+
+static void
+test_in6_addr(const int fd)
+{
+	const char address6[] = "12:34:56:78:90:ab:cd:ef";
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+	};
+	static const struct inet_diag_hostcond cond = {
+		.family = AF_INET6,
+	};
+	struct in6_addr addr;
+	if (!inet_pton(AF_INET6, address6, &addr))
+		perror_msg_and_skip("inet_pton");
+
+	char buf[sizeof(op) + sizeof(cond) + sizeof(addr)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), &cond, sizeof(cond));
+
+	const unsigned int plen = sizeof(addr) - 1 > DEFAULT_STRLEN ?
+		sizeof(cond) + sizeof(cond) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	memcpy(buf + sizeof(op) + sizeof(cond), &pattern, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET6");
+		    printf("addr=");
+		    print_quoted_hex(pattern, plen - sizeof(op) - sizeof(cond));
+		    printf("}}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET6");
+		    printf("addr=%p}}",
+			   RTA_DATA(TEST_NLATTR_nla)
+			   + sizeof(op) + sizeof(cond)));
+
+	memcpy(buf + sizeof(op) + sizeof(cond), &addr, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET6");
+		    printf("inet_pton(AF_INET6, \"%s\", &addr)}}", address6));
+}
+
+static void
+test_inet_diag_bc_dev_cond(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_DEV_COND,
+	};
+	const uint32_t ifindex = ifindex_lo();
+	char buf[sizeof(op) + sizeof(ifindex)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), pattern, sizeof(ifindex));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf) - 1, buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_DEV_COND");
+		    print_quoted_hex(pattern, sizeof(ifindex) - 1);
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_DEV_COND");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op)));
+
+	memcpy(buf + sizeof(op), &ifindex, sizeof(ifindex));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_DEV_COND");
+		    printf(IFINDEX_LO_STR "}"));
+}
+
+static void
+test_inet_diag_bc_s_le(const int fd)
+{
+	static const struct inet_diag_bc_op op[] = {
+		{
+			.code = INET_DIAG_BC_S_LE,
+		},
+		{
+			.code = INET_DIAG_BC_DEV_COND,
+			.yes = 0xaf,
+			.no = 0xafcd
+		}
+	};
+
+	char buf[sizeof(op)];
+	memcpy(buf, op, sizeof(op[0]));
+	memcpy(buf + sizeof(op[0]), pattern, sizeof(op[1]));
+
+	const unsigned int plen = sizeof(op[1]) - 1 > DEFAULT_STRLEN ?
+		sizeof(op[0]) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_LE");
+		    print_quoted_hex(buf + sizeof(op[0]), plen - sizeof(op[0]));
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_LE");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op[0])));
+
+	memcpy(buf + sizeof(op[0]), &op[1], sizeof(op[1]));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_LE");
+		    printf("{code=INET_DIAG_BC_DEV_COND");
+		    PRINT_FIELD_U(", ", op[1], yes);
+		    PRINT_FIELD_U(", ", op[1], no);
+		    printf("}}"));
+};
+
+static void
+test_inet_diag_bc_mark_cond(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_MARK_COND,
+	};
+	static const struct inet_diag_markcond markcond = {
+		.mark = 0xafbcafcd,
+		.mask = 0xbafaacda
+	};
+	char buf[sizeof(op) + sizeof(markcond)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), pattern, sizeof(markcond));
+
+	const unsigned int plen = sizeof(markcond) - 1 > DEFAULT_STRLEN ?
+		sizeof(markcond) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_MARK_COND");
+		    print_quoted_hex(buf + sizeof(op), plen - sizeof(op));
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_MARK_COND");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op)));
+
+	memcpy(buf + sizeof(op), &markcond, sizeof(markcond));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_MARK_COND");
+		    PRINT_FIELD_U("{", markcond, mark);
+		    PRINT_FIELD_U(", ", markcond, mask);
+		    printf("}}"));
+}
+
+static void
+test_inet_diag_bc_nop(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_AUTO,
+	};
+	char buf[sizeof(op) + 4];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), pattern, 4);
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_AUTO");
+		    print_quoted_hex(buf + sizeof(op),
+				     sizeof(buf) - sizeof(op));
+		    printf("}"));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	test_inet_diag_bc_op(fd);
+	test_inet_diag_bc_s_cond(fd);
+	test_in_addr(fd);
+	test_in6_addr(fd);
+	test_inet_diag_bc_dev_cond(fd);
+	test_inet_diag_bc_s_le(fd);
+	test_inet_diag_bc_mark_cond(fd);
+	test_inet_diag_bc_nop(fd);
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
diff --git a/tests-m32/nlattr_inet_diag_req_v2.gen.test b/tests-m32/nlattr_inet_diag_req_v2.gen.test
new file mode 100755
index 0000000..0260bc4
--- /dev/null
+++ b/tests-m32/nlattr_inet_diag_req_v2.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_v2 +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ndmsg.c b/tests-m32/nlattr_ndmsg.c
new file mode 100644
index 0000000..8538a82
--- /dev/null
+++ b/tests-m32/nlattr_ndmsg.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "test_nlattr.h"
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define NDA_PORT 6
+
+static void
+init_ndmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNEIGH,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ndmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ndmsg, msg,
+		.ndm_family = AF_UNIX,
+		.ndm_ifindex = ifindex_lo(),
+		.ndm_state = NUD_PERMANENT,
+		.ndm_flags = NTF_PROXY,
+		.ndm_type = RTN_UNSPEC
+	);
+}
+
+static void
+print_ndmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNEIGH, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ndm_family=AF_UNIX"
+	       ", ndm_ifindex=" IFINDEX_LO_STR
+	       ", ndm_state=NUD_PERMANENT"
+	       ", ndm_flags=NTF_PROXY"
+	       ", ndm_type=RTN_UNSPEC}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ndmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NDA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ndmsg, print_ndmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ndmsg, print_ndmsg,
+		    NDA_DST, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	static const struct nda_cacheinfo ci = {
+		.ndm_confirmed = 0xabcdedad,
+		.ndm_used = 0xbcdaedad,
+		.ndm_updated = 0xcdbadeda,
+		.ndm_refcnt = 0xdeadbeda
+	};
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndmsg, print_ndmsg,
+			   NDA_CACHEINFO, pattern, ci,
+			   PRINT_FIELD_U("{", ci, ndm_confirmed);
+			   PRINT_FIELD_U(", ", ci, ndm_used);
+			   PRINT_FIELD_U(", ", ci, ndm_updated);
+			   PRINT_FIELD_U(", ", ci, ndm_refcnt);
+			   printf("}"));
+
+	const uint16_t port = 0xabcd;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndmsg, print_ndmsg,
+			   NDA_PORT, pattern, port,
+			   printf("htons(%u)", ntohs(port)));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_ndmsg.gen.test b/tests-m32/nlattr_ndmsg.gen.test
new file mode 100755
index 0000000..06b8f1a
--- /dev/null
+++ b/tests-m32/nlattr_ndmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ndtmsg.c b/tests-m32/nlattr_ndtmsg.c
new file mode 100644
index 0000000..d3f1bdb
--- /dev/null
+++ b/tests-m32/nlattr_ndtmsg.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define NDTA_PARMS 6
+#define NDTPA_IFINDEX 1
+
+static void
+init_ndtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNEIGHTBL,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ndtmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ndtmsg, msg,
+		.ndtm_family = AF_NETLINK
+	);
+}
+
+static void
+print_ndtmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNEIGHTBL, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ndtm_family=AF_NETLINK}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ndtmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NDTA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ndtmsg, print_ndtmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+#ifdef HAVE_STRUCT_NDT_CONFIG
+	static const struct ndt_config ndtc = {
+		.ndtc_key_len = 0xabcd,
+		.ndtc_entry_size = 0xbcda,
+		.ndtc_entries = 0xcdabedad,
+		.ndtc_last_flush = 0xdebaedba,
+		.ndtc_last_rand = 0xedadedab,
+		.ndtc_hash_rnd = 0xfeadedaf,
+		.ndtc_hash_mask = 0xadbcdead,
+		.ndtc_hash_chain_gc = 0xbdaedacd,
+		.ndtc_proxy_qlen = 0xcdeaedab
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndtmsg, print_ndtmsg,
+			   NDTA_CONFIG, pattern, ndtc,
+			   PRINT_FIELD_U("{", ndtc, ndtc_key_len);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_entry_size);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_entries);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_last_flush);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_last_rand);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_hash_rnd);
+			   PRINT_FIELD_0X(", ", ndtc, ndtc_hash_mask);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_hash_chain_gc);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_proxy_qlen);
+			   printf("}"));
+#endif /* HAVE_STRUCT_NDT_CONFIG */
+
+	static const struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = NDTPA_IFINDEX
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndtmsg, print_ndtmsg,
+			   NDTA_PARMS, pattern, nla,
+			   PRINT_FIELD_U("{", nla, nla_len);
+			   printf(", nla_type=NDTPA_IFINDEX}"));
+
+#ifdef HAVE_STRUCT_NDT_STATS
+	static const struct ndt_stats ndtst = {
+		.ndts_allocs		= 0xabcdedabedadedfa,
+		.ndts_destroys		= 0xbcdefabefacdbaad,
+		.ndts_hash_grows	= 0xcdbadefacdcbaede,
+		.ndts_res_failed	= 0xdedbaecfdbcadcfe,
+		.ndts_lookups		= 0xedfafdedbdadedec,
+		.ndts_hits		= 0xfebdeadebcddeade,
+		.ndts_rcv_probes_mcast	= 0xadebfeadecddeafe,
+		.ndts_rcv_probes_ucast	= 0xbcdefeacdadecdfe,
+		.ndts_periodic_gc_runs	= 0xedffeadedeffbecc,
+		.ndts_forced_gc_runs	= 0xfeefefeabedeedcd,
+#ifdef HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS
+		.ndts_table_fulls	= 0xadebfefaecdfeade
+#endif /* HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS */
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndtmsg, print_ndtmsg,
+			   NDTA_STATS, pattern, ndtst,
+			   PRINT_FIELD_U("{", ndtst, ndts_allocs);
+			   PRINT_FIELD_U(", ", ndtst, ndts_destroys);
+			   PRINT_FIELD_U(", ", ndtst, ndts_hash_grows);
+			   PRINT_FIELD_U(", ", ndtst, ndts_res_failed);
+			   PRINT_FIELD_U(", ", ndtst, ndts_lookups);
+			   PRINT_FIELD_U(", ", ndtst, ndts_hits);
+			   PRINT_FIELD_U(", ", ndtst, ndts_rcv_probes_mcast);
+			   PRINT_FIELD_U(", ", ndtst, ndts_rcv_probes_ucast);
+			   PRINT_FIELD_U(", ", ndtst, ndts_periodic_gc_runs);
+			   PRINT_FIELD_U(", ", ndtst, ndts_forced_gc_runs);
+#ifdef HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS
+			   PRINT_FIELD_U(", ", ndtst, ndts_table_fulls);
+#endif /* HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS */
+			   printf("}"));
+#endif /* HAVE_STRUCT_NDT_STATS */
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_ndtmsg.gen.test b/tests-m32/nlattr_ndtmsg.gen.test
new file mode 100755
index 0000000..d75ad57
--- /dev/null
+++ b/tests-m32/nlattr_ndtmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndtmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_netconfmsg.c b/tests-m32/nlattr_netconfmsg.c
new file mode 100644
index 0000000..6866adc
--- /dev/null
+++ b/tests-m32/nlattr_netconfmsg.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_NETCONFMSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/netconf.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_netconfmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNETCONF,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct netconfmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct netconfmsg, msg,
+		.ncm_family = AF_INET
+	);
+}
+
+static void
+print_netconfmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNETCONF, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ncm_family=AF_INET}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct netconfmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NETCONFA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_netconfmsg, print_netconfmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_NETCONFMSG")
+
+#endif
diff --git a/tests-m32/nlattr_netconfmsg.gen.test b/tests-m32/nlattr_netconfmsg.gen.test
new file mode 100755
index 0000000..9a061cb
--- /dev/null
+++ b/tests-m32/nlattr_netconfmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_netconfmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_nlmsgerr.c b/tests-m32/nlattr_nlmsgerr.c
new file mode 100644
index 0000000..837283c
--- /dev/null
+++ b/tests-m32/nlattr_nlmsgerr.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <stdio.h>
+#include <stdint.h>
+#include "test_nlattr.h"
+
+#define NLMSGERR_ATTR_COOKIE 3
+
+static void
+init_nlmsgerr(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = NLMSG_ERROR,
+		.nlmsg_flags = NLM_F_REQUEST | NLM_F_CAPPED
+	);
+
+	struct nlmsgerr *const err = NLMSG_DATA(nlh);
+	SET_STRUCT(struct nlmsgerr, err,
+		.error = -13,
+		.msg = {
+			.nlmsg_len = NLMSG_HDRLEN + 4,
+			.nlmsg_type = NLMSG_NOOP,
+			.nlmsg_flags = NLM_F_REQUEST,
+		}
+	);
+}
+
+static void
+print_nlmsgerr(const unsigned int msg_len)
+{
+	printf("{len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_CAPPED"
+	       ", seq=0, pid=0}, {error=-EACCES"
+	       ", msg={len=%u, type=NLMSG_NOOP"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}",
+	       msg_len, NLMSG_HDRLEN + 4);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct nlmsgerr);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static const uint8_t cookie[] = { 0xab, 0xfe };
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_nlmsgerr, print_nlmsgerr,
+		    NLMSGERR_ATTR_COOKIE,
+		    sizeof(cookie), cookie, sizeof(cookie),
+		    printf("[%u, %u]", cookie[0], cookie[1]);
+		    printf("}"));
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
diff --git a/tests-m32/nlattr_nlmsgerr.gen.test b/tests-m32/nlattr_nlmsgerr.gen.test
new file mode 100755
index 0000000..23df500
--- /dev/null
+++ b/tests-m32/nlattr_nlmsgerr.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_nlmsgerr +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_packet_diag_msg.c b/tests-m32/nlattr_packet_diag_msg.c
new file mode 100644
index 0000000..4211e20
--- /dev/null
+++ b/tests-m32/nlattr_packet_diag_msg.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <net/if.h>
+#include "test_nlattr.h"
+#include <sys/socket.h>
+#include <linux/filter.h>
+#include <linux/packet_diag.h>
+#include <linux/rtnetlink.h>
+#include <linux/sock_diag.h>
+
+static void
+init_packet_diag_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct packet_diag_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct packet_diag_msg, msg,
+		.pdiag_family = AF_PACKET,
+		.pdiag_type = SOCK_STREAM
+	);
+}
+
+static void
+print_packet_diag_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=SOCK_DIAG_BY_FAMILY"
+	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
+	       ", {pdiag_family=AF_PACKET"
+	       ", pdiag_type=SOCK_STREAM, pdiag_num=0"
+	       ", pdiag_ino=0, pdiag_cookie=[0, 0]}",
+	       msg_len);
+}
+
+static void
+print_packet_diag_mclist(const struct packet_diag_mclist *const dml)
+{
+	printf("{pdmc_index=" IFINDEX_LO_STR);
+	PRINT_FIELD_U(", ", *dml, pdmc_count);
+	PRINT_FIELD_U(", ", *dml, pdmc_type);
+	PRINT_FIELD_U(", ", *dml, pdmc_alen);
+	printf(", pdmc_addr=");
+	print_quoted_hex(dml->pdmc_addr, dml->pdmc_alen);
+	printf("}");
+}
+
+static const struct sock_filter filter[] = {
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF+SKF_AD_PKTTYPE),
+	BPF_STMT(BPF_RET|BPF_K, 0x2a)
+};
+
+static void
+print_sock_filter(const struct sock_filter *const f)
+{
+	if (f == filter)
+		printf("BPF_STMT(BPF_LD|BPF_B|BPF_ABS"
+		       ", SKF_AD_OFF+SKF_AD_PKTTYPE)");
+	else
+		printf("BPF_STMT(BPF_RET|BPF_K, 0x2a)");
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct packet_diag_msg);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	static const struct packet_diag_info pinfo = {
+		.pdi_index = 0xabcddafa,
+		.pdi_version = 0xbabcdafb,
+		.pdi_reserve = 0xcfaacdaf,
+		.pdi_copy_thresh = 0xdabacdaf,
+		.pdi_tstamp = 0xeafbaadf,
+		.pdi_flags = PDI_RUNNING
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_packet_diag_msg, print_packet_diag_msg,
+			   PACKET_DIAG_INFO, pattern, pinfo,
+			   PRINT_FIELD_U("{", pinfo, pdi_index);
+			   PRINT_FIELD_U(", ", pinfo, pdi_version);
+			   PRINT_FIELD_U(", ", pinfo, pdi_reserve);
+			   PRINT_FIELD_U(", ", pinfo, pdi_copy_thresh);
+			   PRINT_FIELD_U(", ", pinfo, pdi_tstamp);
+			   printf(", pdi_flags=PDI_RUNNING}"));
+
+	const struct packet_diag_mclist dml[] = {
+		{
+			.pdmc_index = ifindex_lo(),
+			.pdmc_count = 0xabcdaefc,
+			.pdmc_type = 0xcdaf,
+			.pdmc_alen = 4,
+			.pdmc_addr = "1234"
+		},
+		{
+			.pdmc_index = ifindex_lo(),
+			.pdmc_count = 0xdaefeafc,
+			.pdmc_type = 0xadef,
+			.pdmc_alen = 4,
+			.pdmc_addr = "5678"
+		}
+	};
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_packet_diag_msg, print_packet_diag_msg,
+			  PACKET_DIAG_MCLIST, pattern, dml,
+			  print_packet_diag_mclist);
+
+	static const struct packet_diag_ring pdr = {
+		.pdr_block_size = 0xabcdafed,
+		.pdr_block_nr = 0xbcadefae,
+		.pdr_frame_size = 0xcabdfeac,
+		.pdr_frame_nr = 0xdeaeadef,
+		.pdr_retire_tmo = 0xedbafeac,
+		.pdr_sizeof_priv = 0xfeadeacd,
+		.pdr_features = 0xadebadea
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_packet_diag_msg, print_packet_diag_msg,
+			   PACKET_DIAG_RX_RING, pattern, pdr,
+			   PRINT_FIELD_U("{", pdr, pdr_block_size);
+			   PRINT_FIELD_U(", ", pdr, pdr_block_nr);
+			   PRINT_FIELD_U(", ", pdr, pdr_frame_size);
+			   PRINT_FIELD_U(", ", pdr, pdr_frame_nr);
+			   PRINT_FIELD_U(", ", pdr, pdr_retire_tmo);
+			   PRINT_FIELD_U(", ", pdr, pdr_sizeof_priv);
+			   PRINT_FIELD_U(", ", pdr, pdr_features);
+			   printf("}"));
+
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_packet_diag_msg, print_packet_diag_msg,
+			  PACKET_DIAG_FILTER, pattern, filter,
+			  print_sock_filter);
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
diff --git a/tests-m32/nlattr_packet_diag_msg.gen.test b/tests-m32/nlattr_packet_diag_msg.gen.test
new file mode 100755
index 0000000..6af8749
--- /dev/null
+++ b/tests-m32/nlattr_packet_diag_msg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_packet_diag_msg +netlink_sock_diag-v.sh); do not edit.
+. "${srcdir=.}/netlink_sock_diag-v.sh"
diff --git a/tests-m32/nlattr_rtgenmsg.c b/tests-m32/nlattr_rtgenmsg.c
new file mode 100644
index 0000000..ceb061d
--- /dev/null
+++ b/tests-m32/nlattr_rtgenmsg.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+
+#ifdef RTM_GETNSID
+
+# include "test_nlattr.h"
+
+static void
+init_rtgenmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNSID,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct rtgenmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct rtgenmsg, msg,
+		.rtgen_family = AF_UNIX
+	);
+}
+
+static void
+print_rtgenmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNSID, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {rtgen_family=AF_UNIX}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct rtgenmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NETNSA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_rtgenmsg, print_rtgenmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("RTM_GETNSID")
+
+#endif
diff --git a/tests-m32/nlattr_rtgenmsg.gen.test b/tests-m32/nlattr_rtgenmsg.gen.test
new file mode 100755
index 0000000..0ff6d13
--- /dev/null
+++ b/tests-m32/nlattr_rtgenmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtgenmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_rtmsg.c b/tests-m32/nlattr_rtmsg.c
new file mode 100644
index 0000000..5f29f0c
--- /dev/null
+++ b/tests-m32/nlattr_rtmsg.c
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "test_nlattr.h"
+#include <linux/ip.h>
+#include <linux/rtnetlink.h>
+
+#define RTA_ENCAP_TYPE 21
+#define LWTUNNEL_ENCAP_NONE 0
+
+static void
+init_rtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETROUTE,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct rtmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct rtmsg, msg,
+		.rtm_family = AF_UNIX,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_DEFAULT,
+		.rtm_protocol = RTPROT_KERNEL,
+		.rtm_scope = RT_SCOPE_UNIVERSE,
+		.rtm_type = RTN_LOCAL,
+		.rtm_flags = RTM_F_NOTIFY
+	);
+}
+
+static void
+print_rtmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETROUTE, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {rtm_family=AF_UNIX"
+	       ", rtm_dst_len=0, rtm_src_len=0"
+	       ", rtm_tos=IPTOS_LOWDELAY"
+	       ", rtm_table=RT_TABLE_DEFAULT"
+	       ", rtm_protocol=RTPROT_KERNEL"
+	       ", rtm_scope=RT_SCOPE_UNIVERSE"
+	       ", rtm_type=RTN_LOCAL"
+	       ", rtm_flags=RTM_F_NOTIFY}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct rtmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* RTA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_rtmsg, print_rtmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    RTA_DST, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	const uint32_t ifindex = ifindex_lo();
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_OIF, pattern, ifindex,
+			   printf(IFINDEX_LO_STR));
+
+	const uint32_t rt_class_id = RT_TABLE_DEFAULT;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_TABLE, pattern, rt_class_id,
+			   printf("RT_TABLE_DEFAULT"));
+
+	struct nlattr nla = {
+		.nla_type = RTAX_LOCK,
+		.nla_len = sizeof(nla)
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_METRICS, pattern, nla,
+			   printf("{nla_len=%u, nla_type=RTAX_LOCK}",
+				  nla.nla_len));
+	struct rtnexthop nh = {
+		.rtnh_len = sizeof(nh) - 1,
+		.rtnh_flags = RTNH_F_DEAD,
+		.rtnh_hops = 0xab,
+		.rtnh_ifindex = ifindex_lo()
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_MULTIPATH, pattern, nh,
+			   printf("{rtnh_len=%u, rtnh_flags=RTNH_F_DEAD"
+				  ", rtnh_hops=%u"
+				  ", rtnh_ifindex=" IFINDEX_LO_STR "}",
+				  nh.rtnh_len, nh.rtnh_hops));
+
+	char buf[RTNH_ALIGN(sizeof(nh)) + sizeof(nla)];
+	nh.rtnh_len = sizeof(buf);
+	nla.nla_type = RTA_DST;
+	memcpy(buf, &nh, sizeof(nh));
+	memcpy(buf + RTNH_ALIGN(sizeof(nh)), &nla, sizeof(nla));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    RTA_MULTIPATH, sizeof(buf), buf, sizeof(buf),
+		    printf("{rtnh_len=%u, rtnh_flags=RTNH_F_DEAD"
+			   ", rtnh_hops=%u, rtnh_ifindex=" IFINDEX_LO_STR "}"
+			   ", {nla_len=%u, nla_type=RTA_DST}",
+			   nh.rtnh_len, nh.rtnh_hops, nla.nla_len));
+
+	static const struct rta_cacheinfo ci = {
+		.rta_clntref = 0xabcdefab,
+		.rta_lastuse = 0xbdadaedc,
+		.rta_expires = 0xcdadebad,
+		.rta_error = 0xdaedadeb,
+		.rta_used = 0xedfabdad,
+		.rta_id = 0xfeadbcda,
+		.rta_ts = 0xacdbaded,
+		.rta_tsage = 0xbadeadef
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_CACHEINFO, pattern, ci,
+			   PRINT_FIELD_U("{", ci, rta_clntref);
+			   PRINT_FIELD_U(", ", ci, rta_lastuse);
+			   PRINT_FIELD_U(", ", ci, rta_expires);
+			   PRINT_FIELD_U(", ", ci, rta_error);
+			   PRINT_FIELD_U(", ", ci, rta_used);
+			   PRINT_FIELD_X(", ", ci, rta_id);
+			   PRINT_FIELD_U(", ", ci, rta_ts);
+			   PRINT_FIELD_U(", ", ci, rta_tsage);
+			   printf("}"));
+
+#ifdef HAVE_STRUCT_RTA_MFC_STATS
+	static const struct rta_mfc_stats mfcs = {
+		.mfcs_packets = 0xadcdedfdadefadcd,
+		.mfcs_bytes = 0xbaedadedcdedadbd,
+		.mfcs_wrong_if = 0xcddeabeedaedabfa
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_MFC_STATS, pattern, mfcs,
+			   PRINT_FIELD_U("{", mfcs, mfcs_packets);
+			   PRINT_FIELD_U(", ", mfcs, mfcs_bytes);
+			   PRINT_FIELD_U(", ", mfcs, mfcs_wrong_if);
+			   printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_RTVIA
+	static const struct rtvia via = {
+		.rtvia_family = AF_INET
+	};
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_VIA, pattern, via,
+			   printf("{rtvia_family=AF_INET}"));
+
+	static const char address4[] = "12.34.56.78";
+	struct in_addr a4 = {
+		.s_addr = inet_addr(address4)
+	};
+	char rtviabuf[sizeof(via) + sizeof(a4)];
+	memcpy(rtviabuf, &via, sizeof(via));
+	memcpy(rtviabuf + sizeof(via), &a4, sizeof(a4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    RTA_VIA, sizeof(rtviabuf), rtviabuf, sizeof(rtviabuf),
+		    printf("{rtvia_family=AF_INET"
+			   ", rtvia_addr=inet_addr(\"%s\")}", address4));
+#endif
+
+	const uint16_t encap_type = LWTUNNEL_ENCAP_NONE;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_ENCAP_TYPE, pattern, encap_type,
+			   printf("LWTUNNEL_ENCAP_NONE"));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_rtmsg.gen.test b/tests-m32/nlattr_rtmsg.gen.test
new file mode 100755
index 0000000..5525143
--- /dev/null
+++ b/tests-m32/nlattr_rtmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_smc_diag_msg.c b/tests-m32/nlattr_smc_diag_msg.c
new file mode 100644
index 0000000..a06ad62
--- /dev/null
+++ b/tests-m32/nlattr_smc_diag_msg.c
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <sys/socket.h>
+
+#ifdef AF_SMC
+
+# include <stdio.h>
+# include <string.h>
+# include <stdint.h>
+# include <arpa/inet.h>
+# include "test_nlattr.h"
+# include <linux/rtnetlink.h>
+# include <linux/smc_diag.h>
+# include <linux/sock_diag.h>
+
+# ifndef SMC_CLNT
+#  define SMC_CLNT 0
+# endif
+# ifndef SMC_ACTIVE
+#  define SMC_ACTIVE 1
+# endif
+
+static const char address[] = "12.34.56.78";
+
+static void
+init_smc_diag_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct smc_diag_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct smc_diag_msg, msg,
+		.diag_family = AF_SMC,
+		.diag_state = SMC_ACTIVE
+	);
+
+	if (!inet_pton(AF_INET, address, msg->id.idiag_src) ||
+	    !inet_pton(AF_INET, address, msg->id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
+}
+
+static void
+print_smc_diag_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=SOCK_DIAG_BY_FAMILY"
+	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
+	       ", {diag_family=AF_SMC, diag_state=SMC_ACTIVE"
+	       ", diag_fallback=0, diag_shutdown=0"
+	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=0, idiag_cookie=[0, 0]}"
+	       ", diag_uid=0, diag_inode=0}",
+	       msg_len, address, address);
+}
+
+#define PRINT_FIELD_SMC_DIAG_CURSOR(prefix_, where_, field_)		\
+	do {								\
+		printf("%s%s=", (prefix_), #field_);			\
+		PRINT_FIELD_U("{", (where_).field_, reserved);		\
+		PRINT_FIELD_U(", ", (where_).field_, wrap);		\
+		PRINT_FIELD_U(", ", (where_).field_, count);		\
+		printf("}");						\
+	} while (0)
+
+int main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct smc_diag_msg);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	static const struct smc_diag_conninfo cinfo = {
+		.token = 0xabcdefac,
+		.sndbuf_size = 0xbcdaefad,
+		.rmbe_size = 0xcdbaefab,
+		.peer_rmbe_size = 0xdbcdedaf,
+		.rx_prod = {
+			.reserved = 0xabc1,
+			.wrap = 0xbca1,
+			.count = 0xcdedbad1
+		},
+		.rx_cons = {
+			.reserved = 0xabc2,
+			.wrap = 0xbca2,
+			.count = 0xcdedbad2
+		},
+		.tx_prod = {
+			.reserved = 0xabc3,
+			.wrap = 0xbca3,
+			.count = 0xcdedbad3
+		},
+		.tx_cons = {
+			.reserved = 0xabc4,
+			.wrap = 0xbca4,
+			.count = 0xcdedbad4
+		},
+		.rx_prod_flags = 0xff,
+		.rx_conn_state_flags = 0xff,
+		.tx_prod_flags = 0xff,
+		.tx_conn_state_flags = 0xff,
+		.tx_prep = {
+			.reserved = 0xabc5,
+			.wrap = 0xbca5,
+			.count = 0xcdedbad5
+		},
+		.tx_sent = {
+			.reserved = 0xabc6,
+			.wrap = 0xbca6,
+			.count = 0xcdedbad6
+		},
+		.tx_fin = {
+			.reserved = 0xabc7,
+			.wrap = 0xbca7,
+			.count = 0xcdedbad7
+		}
+	};
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_smc_diag_msg, print_smc_diag_msg,
+			   SMC_DIAG_CONNINFO, pattern, cinfo,
+			   PRINT_FIELD_U("{", cinfo, token);
+			   PRINT_FIELD_U(", ", cinfo, sndbuf_size);
+			   PRINT_FIELD_U(", ", cinfo, rmbe_size);
+			   PRINT_FIELD_U(", ", cinfo, peer_rmbe_size);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, rx_prod);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, rx_cons);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_prod);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_cons);
+			   printf(", rx_prod_flags=0xff");
+			   printf(", rx_conn_state_flags=0xff");
+			   printf(", tx_prod_flags=0xff");
+			   printf(", tx_conn_state_flags=0xff");
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_prep);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_sent);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_fin);
+			   printf("}"));
+
+	static const struct smc_diag_lgrinfo linfo = {
+		.lnk[0] = {
+			.link_id = 0xaf,
+			.ibport = 0xfa,
+			.ibname = "123",
+			.gid = "456",
+			.peer_gid = "789"
+		},
+		.role = SMC_CLNT
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_smc_diag_msg, print_smc_diag_msg,
+			   SMC_DIAG_LGRINFO, pattern, linfo,
+			   PRINT_FIELD_U("{lnk[0]={", linfo.lnk[0], link_id);
+			   printf(", ibname=\"%s\"", linfo.lnk[0].ibname);
+			   PRINT_FIELD_U(", ", linfo.lnk[0], ibport);
+			   printf(", gid=\"%s\"", linfo.lnk[0].gid);
+			   printf(", peer_gid=\"%s\"}", linfo.lnk[0].peer_gid);
+			   printf(", role=SMC_CLNT}"));
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("AF_SMC")
+
+#endif
diff --git a/tests-m32/nlattr_smc_diag_msg.gen.test b/tests-m32/nlattr_smc_diag_msg.gen.test
new file mode 100755
index 0000000..3e6407e
--- /dev/null
+++ b/tests-m32/nlattr_smc_diag_msg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_smc_diag_msg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_tcamsg.c b/tests-m32/nlattr_tcamsg.c
new file mode 100644
index 0000000..7f61153
--- /dev/null
+++ b/tests-m32/nlattr_tcamsg.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/rtnetlink.h>
+
+static void
+init_tcamsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETACTION,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcamsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcamsg, msg,
+		.tca_family = AF_INET
+	);
+}
+
+static void
+print_tcamsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETACTION, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tca_family=AF_INET}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct tcamsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* TCA_ACT_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_tcamsg, print_tcamsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_tcamsg.gen.test b/tests-m32/nlattr_tcamsg.gen.test
new file mode 100755
index 0000000..7c30207
--- /dev/null
+++ b/tests-m32/nlattr_tcamsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcamsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_tcmsg.c b/tests-m32/nlattr_tcmsg.c
new file mode 100644
index 0000000..00b7ae4
--- /dev/null
+++ b/tests-m32/nlattr_tcmsg.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/rtnetlink.h>
+
+static void
+init_tcmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETQDISC,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcmsg, msg,
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo()
+	);
+
+}
+
+static void
+print_tcmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETQDISC, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tcm_family=AF_UNIX"
+	       ", tcm_ifindex=" IFINDEX_LO_STR
+	       ", tcm_handle=0, tcm_parent=0, tcm_info=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct tcmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* TCA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_tcmsg, print_tcmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_tcmsg.gen.test b/tests-m32/nlattr_tcmsg.gen.test
new file mode 100755
index 0000000..f5bf7a9
--- /dev/null
+++ b/tests-m32/nlattr_tcmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nsyscalls.c b/tests-m32/nsyscalls.c
index d6b989c..29f444a 100644
--- a/tests-m32/nsyscalls.c
+++ b/tests-m32/nsyscalls.c
@@ -35,31 +35,14 @@
 #include <unistd.h>
 #include <asm/unistd.h>
 
-#define TD 0
-#define TF 0
-#define TI 0
-#define TN 0
-#define TP 0
-#define TS 0
-#define TM 0
-#define TST 0
-#define TLST 0
-#define TFST 0
-#define TSTA 0
-#define TSF 0
-#define TFSF 0
-#define TSFA 0
-#define NF 0
-#define MA 0
-#define SI 0
-#define SE 0
-#define CST 0
-#define SEN(arg) 0, 0
+#include "sysent_shorthand_defs.h"
 
 static const struct_sysent syscallent[] = {
 #include "syscallent.h"
 };
 
+#include "sysent_shorthand_undefs.h"
+
 #if defined __X32_SYSCALL_BIT && defined __NR_read \
  && (__X32_SYSCALL_BIT & __NR_read) != 0
 # define SYSCALL_BIT __X32_SYSCALL_BIT
diff --git a/tests-m32/options-syntax.test b/tests-m32/options-syntax.test
index 7cfc579..b4d9be7 100755
--- a/tests-m32/options-syntax.test
+++ b/tests-m32/options-syntax.test
@@ -28,57 +28,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-. "${srcdir=.}/init.sh"
-
-check_exit_status_and_stderr()
-{
-	$STRACE "$@" 2> "$LOG" &&
-		dump_log_and_fail_with \
-			"strace $* failed to handle the error properly"
-	match_diff "$LOG" "$EXP" ||
-		dump_log_and_fail_with \
-			"strace $* failed to print expected diagnostics"
-}
-
-check_exit_status_and_stderr_using_grep()
-{
-	$STRACE "$@" 2> "$LOG" &&
-		dump_log_and_fail_with \
-			"strace $* failed to handle the error properly"
-	match_grep "$LOG" "$EXP" ||
-		dump_log_and_fail_with \
-			"strace $* failed to print expected diagnostics"
-}
-
-strace_exp="${STRACE##* }"
-
-check_e()
-{
-	local pattern="$1"; shift
-	cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-__EOF__
-	check_exit_status_and_stderr "$@"
-}
-
-check_e_using_grep()
-{
-	local pattern="$1"; shift
-	cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-__EOF__
-	check_exit_status_and_stderr_using_grep "$@"
-}
-
-check_h()
-{
-	local pattern="$1"; shift
-	cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-Try '$strace_exp -h' for more information.
-__EOF__
-	check_exit_status_and_stderr "$@"
-}
+. "${srcdir=.}/syntax.sh"
 
 check_e "Invalid process id: '0'" -p 0
 check_e "Invalid process id: '-42'" -p -42
diff --git a/tests-m32/poll.c b/tests-m32/poll.c
index af66e53..2bf8c1a 100644
--- a/tests-m32/poll.c
+++ b/tests-m32/poll.c
@@ -2,6 +2,7 @@
  * This file is part of poll strace test.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/prctl-seccomp-filter-v.c b/tests-m32/prctl-seccomp-filter-v.c
index 69316fb..cfd5d3d 100644
--- a/tests-m32/prctl-seccomp-filter-v.c
+++ b/tests-m32/prctl-seccomp-filter-v.c
@@ -2,6 +2,7 @@
  * Check verbose decoding of prctl PR_SET_SECCOMP SECCOMP_MODE_FILTER.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,9 +41,7 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-#endif
+#include <linux/filter.h>
 
 #if defined HAVE_PRCTL \
  && defined PR_SET_NO_NEW_PRIVS \
diff --git a/tests-m32/preadv-pwritev.c b/tests-m32/preadv-pwritev.c
index ddbd47f..44ed23a 100644
--- a/tests-m32/preadv-pwritev.c
+++ b/tests-m32/preadv-pwritev.c
@@ -2,6 +2,7 @@
  * Check decoding of preadv and pwritev syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/print_quoted_string.c b/tests-m32/print_quoted_string.c
index 732fe3d..2894e49 100644
--- a/tests-m32/print_quoted_string.c
+++ b/tests-m32/print_quoted_string.c
@@ -16,11 +16,24 @@
 }
 
 void
-print_quoted_memory(const char *instr, const size_t len)
+print_quoted_cstring(const char *instr, const size_t size)
+{
+	const size_t len = strnlen(instr, size);
+	if (len < size) {
+		print_quoted_memory(instr, len);
+	} else {
+		print_quoted_memory(instr, size - 1);
+		printf("...");
+	}
+}
+
+void
+print_quoted_memory(const void *const instr, const size_t len)
 {
 	const unsigned char *str = (const unsigned char *) instr;
 	size_t i;
 
+	putchar('"');
 	for (i = 0; i < len; ++i) {
 		const int c = str[i];
 		switch (c) {
@@ -72,4 +85,17 @@
 		}
 	}
 
+	putchar('"');
+}
+
+void
+print_quoted_hex(const void *const instr, const size_t len)
+{
+	const unsigned char *str = instr;
+	size_t i;
+
+	printf("\"");
+	for (i = 0; i < len; i++)
+		printf("\\x%02x", str[i]);
+	printf("\"");
 }
diff --git a/tests-m32/printpath-umovestr-legacy.test b/tests-m32/printpath-umovestr-legacy.test
new file mode 100755
index 0000000..15f57ed
--- /dev/null
+++ b/tests-m32/printpath-umovestr-legacy.test
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# Force legacy printpath/umovestr using process_vm_readv fault injection.
+#
+# Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+> "$LOG" || fail_ "failed to write $LOG"
+fault_args='-qq -esignal=none -etrace=process_vm_readv -efault=process_vm_readv'
+args='../printpath-umovestr-peekdata'
+
+$STRACE -o "$LOG" $fault_args $args > /dev/null || {
+	rc=$?
+	if [ $rc -eq 77 ]; then
+		skip_ "$fault_args $args exited with code 77"
+	else
+		fail_ "$fault_args $args failed with code $rc"
+	fi
+}
+
+> "$LOG" || fail_ "failed to write $LOG"
+args="-a11 -e signal=none -e trace=chdir $args skip-process_vm_readv-check"
+
+$STRACE -o /dev/null $fault_args \
+	$STRACE -o "$LOG" $args > "$EXP" ||
+	dump_log_and_fail_with "$STRACE $args failed with code $?"
+
+match_diff "$LOG" "$EXP"
diff --git a/tests-m32/printpath-umovestr-peekdata.c b/tests-m32/printpath-umovestr-peekdata.c
new file mode 100644
index 0000000..82f1035
--- /dev/null
+++ b/tests-m32/printpath-umovestr-peekdata.c
@@ -0,0 +1,47 @@
+/*
+ * Test PTRACE_PEEKDATA-based printpath/umovestr.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac < 2 && test_process_vm_readv())
+		error_msg_and_skip("process_vm_readv is available");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printpath(sizeof(long) * 4);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/printpath-umovestr-peekdata.gen.test b/tests-m32/printpath-umovestr-peekdata.gen.test
new file mode 100755
index 0000000..6fe65ee
--- /dev/null
+++ b/tests-m32/printpath-umovestr-peekdata.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printpath-umovestr-peekdata -a11 -e signal=none -e trace=chdir); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e signal=none -e trace=chdir
diff --git a/tests-m32/printpath-umovestr-undumpable.c b/tests-m32/printpath-umovestr-undumpable.c
new file mode 100644
index 0000000..fba8f24
--- /dev/null
+++ b/tests-m32/printpath-umovestr-undumpable.c
@@ -0,0 +1,71 @@
+/*
+ * Force legacy printpath/umovestr using PR_SET_DUMPABLE.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_PRCTL
+# include <sys/prctl.h>
+#endif
+
+#if defined HAVE_PRCTL && defined PR_SET_DUMPABLE
+
+# include <stdio.h>
+# include <unistd.h>
+
+# include "test_ucopy.h"
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	/*
+	 * Clearing dumpable flag disallows process_vm_readv.
+	 * If the kernel does not contain commit
+	 * 84d77d3f06e7e8dea057d10e8ec77ad71f721be3, then
+	 * PTRACE_PEEKDATA remains allowed.
+	 */
+	if (prctl(PR_SET_DUMPABLE, 0))
+		perror_msg_and_skip("PR_SET_DUMPABLE 0");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printpath(sizeof(long) * 4);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_SET_DUMPABLE")
+
+#endif
diff --git a/tests-m32/printpath-umovestr-undumpable.gen.test b/tests-m32/printpath-umovestr-undumpable.gen.test
new file mode 100755
index 0000000..cca6442
--- /dev/null
+++ b/tests-m32/printpath-umovestr-undumpable.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printpath-umovestr-undumpable -a11 -e signal=none -e trace=chdir); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e signal=none -e trace=chdir
diff --git a/tests-m32/printpath-umovestr.c b/tests-m32/printpath-umovestr.c
new file mode 100644
index 0000000..a7251e5
--- /dev/null
+++ b/tests-m32/printpath-umovestr.c
@@ -0,0 +1,45 @@
+/*
+ * Test regular printpath/umovestr.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+#include <sys/param.h>
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	test_printpath(PATH_MAX);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/printpath-umovestr.gen.test b/tests-m32/printpath-umovestr.gen.test
new file mode 100755
index 0000000..c827a7d
--- /dev/null
+++ b/tests-m32/printpath-umovestr.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printpath-umovestr -a11 -e signal=none -e trace=chdir); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e signal=none -e trace=chdir
diff --git a/tests-m32/printstr.c b/tests-m32/printstr.c
index 8e22681..030c1e4 100644
--- a/tests-m32/printstr.c
+++ b/tests-m32/printstr.c
@@ -2,6 +2,7 @@
  * Check decoding of non-NUL-terminated strings when len == -1.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/printstrn-umoven-legacy.test b/tests-m32/printstrn-umoven-legacy.test
new file mode 100755
index 0000000..3b2aa26
--- /dev/null
+++ b/tests-m32/printstrn-umoven-legacy.test
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# Force legacy printstrn/umoven using process_vm_readv fault injection.
+#
+# Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+> "$LOG" || fail_ "failed to write $LOG"
+fault_args='-qq -esignal=none -etrace=process_vm_readv -efault=process_vm_readv'
+args='../printstrn-umoven-peekdata'
+
+$STRACE -o "$LOG" $fault_args $args > /dev/null || {
+	rc=$?
+	if [ $rc -eq 77 ]; then
+		skip_ "$fault_args $args exited with code 77"
+	else
+		fail_ "$fault_args $args failed with code $rc"
+	fi
+}
+
+> "$LOG" || fail_ "failed to write $LOG"
+args="-e signal=none -e trace=add_key $args skip-process_vm_readv-check"
+
+$STRACE -o /dev/null $fault_args \
+	$STRACE -o "$LOG" $args > "$EXP" ||
+	dump_log_and_fail_with "$STRACE $args failed with code $?"
+
+match_diff "$LOG" "$EXP"
diff --git a/tests-m32/printstrn-umoven-peekdata.c b/tests-m32/printstrn-umoven-peekdata.c
new file mode 100644
index 0000000..92a6e6a
--- /dev/null
+++ b/tests-m32/printstrn-umoven-peekdata.c
@@ -0,0 +1,47 @@
+/*
+ * Test PTRACE_PEEKDATA-based printstrn/umoven.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac < 2 && test_process_vm_readv())
+		error_msg_and_skip("process_vm_readv is available");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printstrn(DEFAULT_STRLEN);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/printstrn-umoven-peekdata.gen.test b/tests-m32/printstrn-umoven-peekdata.gen.test
new file mode 100755
index 0000000..61f648a
--- /dev/null
+++ b/tests-m32/printstrn-umoven-peekdata.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printstrn-umoven-peekdata -e signal=none -e trace=add_key); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e signal=none -e trace=add_key
diff --git a/tests-m32/printstrn-umoven-undumpable.c b/tests-m32/printstrn-umoven-undumpable.c
new file mode 100644
index 0000000..b23e220
--- /dev/null
+++ b/tests-m32/printstrn-umoven-undumpable.c
@@ -0,0 +1,71 @@
+/*
+ * Force legacy printpath/umovestr using PR_SET_DUMPABLE.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_PRCTL
+# include <sys/prctl.h>
+#endif
+
+#if defined HAVE_PRCTL && defined PR_SET_DUMPABLE
+
+# include <stdio.h>
+# include <unistd.h>
+
+# include "test_ucopy.h"
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	/*
+	 * Clearing dumpable flag disallows process_vm_readv.
+	 * If the kernel does not contain commit
+	 * 84d77d3f06e7e8dea057d10e8ec77ad71f721be3, then
+	 * PTRACE_PEEKDATA remains allowed.
+	 */
+	if (prctl(PR_SET_DUMPABLE, 0))
+		perror_msg_and_skip("PR_SET_DUMPABLE 0");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printstrn(DEFAULT_STRLEN);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_SET_DUMPABLE")
+
+#endif
diff --git a/tests-m32/printstrn-umoven-undumpable.gen.test b/tests-m32/printstrn-umoven-undumpable.gen.test
new file mode 100755
index 0000000..1dee526
--- /dev/null
+++ b/tests-m32/printstrn-umoven-undumpable.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printstrn-umoven-undumpable -e signal=none -e trace=add_key); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e signal=none -e trace=add_key
diff --git a/tests-m32/printstrn-umoven.c b/tests-m32/printstrn-umoven.c
new file mode 100644
index 0000000..d63f7c5
--- /dev/null
+++ b/tests-m32/printstrn-umoven.c
@@ -0,0 +1,44 @@
+/*
+ * Test regular printstrn/umoven.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	test_printstrn(4096);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/printstrn-umoven.gen.test b/tests-m32/printstrn-umoven.gen.test
new file mode 100755
index 0000000..4187238
--- /dev/null
+++ b/tests-m32/printstrn-umoven.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printstrn-umoven -s4096 -e signal=none -e trace=add_key); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -s4096 -e signal=none -e trace=add_key
diff --git a/tests-m32/process_vm_readv_writev.c b/tests-m32/process_vm_readv_writev.c
index c0f9c31..5ee801b 100644
--- a/tests-m32/process_vm_readv_writev.c
+++ b/tests-m32/process_vm_readv_writev.c
@@ -2,6 +2,7 @@
  * Check decoding of process_vm_readv/process_vm_writev syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/pure_executables.am b/tests-m32/pure_executables.am
index 8563488..9dc532a 100644
--- a/tests-m32/pure_executables.am
+++ b/tests-m32/pure_executables.am
@@ -10,6 +10,7 @@
   aio \
   alarm \
   bpf \
+  bpf-v \
   brk \
   btrfs \
   caps \
@@ -50,6 +51,7 @@
   fcntl \
   fcntl64 \
   fdatasync \
+  fflush \
   file_handle \
   file_ioctl \
   finit_module \
@@ -93,6 +95,7 @@
   getuid \
   getuid32 \
   getxxid \
+  group_req \
   inet-cmsg \
   init_module \
   inotify \
@@ -167,7 +170,9 @@
   net-yy-netlink \
   net-yy-unix \
   netlink_audit \
+  netlink_crypto \
   netlink_generic \
+  netlink_kobject_uevent \
   netlink_netfilter \
   netlink_protocol \
   netlink_route \
@@ -176,8 +181,30 @@
   netlink_xfrm \
   newfstatat \
   nlattr \
+  nlattr_crypto_user_alg \
+  nlattr_br_port_msg \
+  nlattr_dcbmsg \
+  nlattr_fib_rule_hdr \
+  nlattr_ifaddrlblmsg \
+  nlattr_ifaddrmsg \
+  nlattr_ifinfomsg \
+  nlattr_ifla_brport \
+  nlattr_ifla_port \
+  nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
+  nlattr_inet_diag_req_compat \
+  nlattr_inet_diag_req_v2 \
+  nlattr_ndmsg \
+  nlattr_ndtmsg \
+  nlattr_netconfmsg \
   nlattr_netlink_diag_msg \
+  nlattr_nlmsgerr \
+  nlattr_packet_diag_msg \
+  nlattr_rtgenmsg \
+  nlattr_rtmsg \
+  nlattr_smc_diag_msg \
+  nlattr_tcamsg \
+  nlattr_tcmsg \
   nlattr_unix_diag_msg \
   old_mmap \
   oldfstat \
@@ -209,7 +236,13 @@
   preadv \
   preadv-pwritev \
   preadv2-pwritev2 \
+  printpath-umovestr \
+  printpath-umovestr-peekdata \
+  printpath-umovestr-undumpable \
   printstr \
+  printstrn-umoven \
+  printstrn-umoven-peekdata \
+  printstrn-umoven-undumpable \
   prlimit64 \
   process_vm_readv \
   process_vm_writev \
@@ -288,6 +321,9 @@
   sigprocmask \
   sigreturn \
   sigsuspend \
+  so_linger \
+  so_peercred \
+  sock_filter-v \
   socketcall \
   splice \
   stat \
diff --git a/tests-m32/pure_executables.list b/tests-m32/pure_executables.list
index 033208e..dade57b 100755
--- a/tests-m32/pure_executables.list
+++ b/tests-m32/pure_executables.list
@@ -9,6 +9,7 @@
 aio
 alarm
 bpf
+bpf-v
 brk
 btrfs
 caps
@@ -49,6 +50,7 @@
 fcntl
 fcntl64
 fdatasync
+fflush
 file_handle
 file_ioctl
 finit_module
@@ -92,6 +94,7 @@
 getuid
 getuid32
 getxxid
+group_req
 inet-cmsg
 init_module
 inotify
@@ -166,7 +169,9 @@
 net-yy-netlink
 net-yy-unix
 netlink_audit
+netlink_crypto
 netlink_generic
+netlink_kobject_uevent
 netlink_netfilter
 netlink_protocol
 netlink_route
@@ -175,8 +180,30 @@
 netlink_xfrm
 newfstatat
 nlattr
+nlattr_crypto_user_alg
+nlattr_br_port_msg
+nlattr_dcbmsg
+nlattr_fib_rule_hdr
+nlattr_ifaddrlblmsg
+nlattr_ifaddrmsg
+nlattr_ifinfomsg
+nlattr_ifla_brport
+nlattr_ifla_port
+nlattr_ifla_xdp
 nlattr_inet_diag_msg
+nlattr_inet_diag_req_compat
+nlattr_inet_diag_req_v2
+nlattr_ndmsg
+nlattr_ndtmsg
+nlattr_netconfmsg
 nlattr_netlink_diag_msg
+nlattr_nlmsgerr
+nlattr_packet_diag_msg
+nlattr_rtgenmsg
+nlattr_rtmsg
+nlattr_smc_diag_msg
+nlattr_tcamsg
+nlattr_tcmsg
 nlattr_unix_diag_msg
 old_mmap
 oldfstat
@@ -208,7 +235,13 @@
 preadv
 preadv-pwritev
 preadv2-pwritev2
+printpath-umovestr
+printpath-umovestr-peekdata
+printpath-umovestr-undumpable
 printstr
+printstrn-umoven
+printstrn-umoven-peekdata
+printstrn-umoven-undumpable
 prlimit64
 process_vm_readv
 process_vm_writev
@@ -287,6 +320,9 @@
 sigprocmask
 sigreturn
 sigsuspend
+so_linger
+so_peercred
+sock_filter-v
 socketcall
 splice
 stat
diff --git a/tests-m32/qual_inject-syntax.test b/tests-m32/qual_inject-syntax.test
index a9e44d7..7aa6180 100755
--- a/tests-m32/qual_inject-syntax.test
+++ b/tests-m32/qual_inject-syntax.test
@@ -103,6 +103,8 @@
 	   chdir:retval=-1 \
 	   chdir:signal=0 \
 	   chdir:signal=129 \
+	   chdir:signal=1:signal=2 \
+	   chdir:signal=1:retval=0:signal=2 \
 	   chdir:retval=0:retval=1 \
 	   chdir:error=1:error=2 \
 	   chdir:retval=0:error=1 \
diff --git a/tests-m32/quotactl.h b/tests-m32/quotactl.h
index d3cf53b..352f927 100644
--- a/tests-m32/quotactl.h
+++ b/tests-m32/quotactl.h
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/readv.c b/tests-m32/readv.c
index 93f0760..8430ca5 100644
--- a/tests-m32/readv.c
+++ b/tests-m32/readv.c
@@ -2,6 +2,7 @@
  * Check decoding of readv and writev syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/recvmsg.c b/tests-m32/recvmsg.c
index 2d55d55..d2a67d4 100644
--- a/tests-m32/recvmsg.c
+++ b/tests-m32/recvmsg.c
@@ -2,6 +2,7 @@
  * Check decoding of recvmsg and sendmsg syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/request_key.c b/tests-m32/request_key.c
index 03c7a42..866fe76 100644
--- a/tests-m32/request_key.c
+++ b/tests-m32/request_key.c
@@ -2,6 +2,7 @@
  * Check decoding of request_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/rt_sigaction.awk b/tests-m32/rt_sigaction.awk
index 9c3a9ed..9fb3ed5 100644
--- a/tests-m32/rt_sigaction.awk
+++ b/tests-m32/rt_sigaction.awk
@@ -2,6 +2,7 @@
 #
 # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
 # Copyright (c) 2016 Elvira Khabirova <lineprinter0@gmail.com>
+# Copyright (c) 2016-2017 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/rt_sigaction.c b/tests-m32/rt_sigaction.c
index 1c034ff..9c367b2 100644
--- a/tests-m32/rt_sigaction.c
+++ b/tests-m32/rt_sigaction.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/run.sh b/tests-m32/run.sh
index 02d9912..d1b796c 100755
--- a/tests-m32/run.sh
+++ b/tests-m32/run.sh
@@ -5,7 +5,7 @@
 $STRACE -V > /dev/null ||
 	framework_failure_ "$STRACE is not available"
 
-TIMEOUT="timeout -s 9 $TIMEOUT_DURATION"
+TIMEOUT="timeout -k 5 -s XCPU $TIMEOUT_DURATION"
 $TIMEOUT true > /dev/null 2>&1 ||
 	TIMEOUT=
 
diff --git a/tests-m32/scno_tampering.sh b/tests-m32/scno_tampering.sh
index 094175e..282f2f3 100755
--- a/tests-m32/scno_tampering.sh
+++ b/tests-m32/scno_tampering.sh
@@ -51,9 +51,16 @@
 	mips)
 		# Only the native ABI is supported by the kernel properly, see
 		# https://sourceforge.net/p/strace/mailman/message/35587571/
+		msg_prefix="mips $MIPS_ABI scno tampering does not work"
 		uname_m="$(uname -m)"
 		case "$MIPS_ABI:$uname_m" in
-			o32:mips|n64:mips64) ;;
-			*) skip_ "$MIPS_ABI scno tampering does not work on $uname_m yet" ;;
+			n64:mips64) ;;
+			o32:mips)
+				# is it really mips32?
+				if ../is_linux_mips_n64; then
+					skip_ "$msg_prefix on mips n64 yet"
+				fi
+				;;
+			*) skip_ "$msg_prefix on $uname_m yet" ;;
 		esac ;;
 esac
diff --git a/tests-m32/seccomp-filter-v.c b/tests-m32/seccomp-filter-v.c
index f65be7d..e419c6c 100644
--- a/tests-m32/seccomp-filter-v.c
+++ b/tests-m32/seccomp-filter-v.c
@@ -42,9 +42,7 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-#endif
+#include <linux/filter.h>
 
 #if defined __NR_seccomp \
  && defined PR_SET_NO_NEW_PRIVS \
@@ -91,10 +89,6 @@
 	SOCK_FILTER_KILL_PROCESS
 };
 
-#ifndef BPF_MAXINSNS
-# define BPF_MAXINSNS 4096
-#endif
-
 int
 main(void)
 {
diff --git a/tests-m32/seccomp-filter.c b/tests-m32/seccomp-filter.c
index e2bea06..6e00982 100644
--- a/tests-m32/seccomp-filter.c
+++ b/tests-m32/seccomp-filter.c
@@ -37,9 +37,7 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-#endif
+#include <linux/filter.h>
 
 #if defined __NR_seccomp && defined SECCOMP_SET_MODE_FILTER
 
diff --git a/tests-m32/sigaction.c b/tests-m32/sigaction.c
index 7b46944..58ddda9 100644
--- a/tests-m32/sigaction.c
+++ b/tests-m32/sigaction.c
@@ -85,20 +85,26 @@
 }
 
 #if defined SPARC || defined SPARC64
-static const kernel_ulong_t signo =
-	(kernel_ulong_t) 0xbadc0ded00000000ULL | (unsigned int) -SIGUSR1;
+/*
+ * See arch/sparc/kernel/sys_sparc_32.c:sys_sparc_sigaction
+ * and arch/sparc/kernel/sys_sparc32.c:compat_sys_sparc_sigaction
+ */
+# define ADDR_INT ((unsigned int) -0xdefaced)
+# define SIGNO_INT ((unsigned int) -SIGUSR1)
 # define SIG_STR "-SIGUSR1"
 #else
-static const kernel_ulong_t signo =
-	(kernel_ulong_t) 0xbadc0ded00000000ULL | SIGUSR1;
+# define ADDR_INT ((unsigned int) 0xdefaced)
+# define SIGNO_INT ((unsigned int) SIGUSR1)
 # define SIG_STR "SIGUSR1"
 #endif
+static const kernel_ulong_t signo =
+	(kernel_ulong_t) 0xbadc0ded00000000ULL | SIGNO_INT;
+static const kernel_ulong_t addr =
+	(kernel_ulong_t) 0xfacefeed00000000ULL | ADDR_INT;
 
 int
 main(void)
 {
-	static const kernel_ulong_t addr =
-		(kernel_ulong_t) 0xfacefeed0defacedULL;
 	union {
 		sigset_t libc[1];
 		unsigned long old[1];
@@ -131,7 +137,7 @@
 	       (unsigned long) old_act + 2);
 
 	k_sigaction(addr, 0, 0);
-	printf("sigaction(%d, NULL, NULL) = -1 EINVAL (%m)\n", (int) addr);
+	printf("sigaction(%d, NULL, NULL) = -1 EINVAL (%m)\n", ADDR_INT);
 
 	memset(new_act, 0, sizeof(*new_act));
 
diff --git a/tests-m32/so_linger.c b/tests-m32/so_linger.c
new file mode 100644
index 0000000..4dc994b
--- /dev/null
+++ b/tests-m32/so_linger.c
@@ -0,0 +1,136 @@
+/*
+ * Check decoding of SO_LINGER socket option.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <sys/socket.h>
+#include <unistd.h>
+
+static const char *errstr;
+
+static int
+get_linger(int fd, void *val, socklen_t *len)
+{
+	int rc = getsockopt(fd, SOL_SOCKET, SO_LINGER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static int
+set_linger(int fd, void *val, socklen_t len)
+{
+	int rc = setsockopt(fd, SOL_SOCKET, SO_LINGER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct linger, linger);
+	TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+        int fd = socket(AF_UNIX, SOCK_STREAM, 0);
+        if (fd < 0)
+                perror_msg_and_skip("socket AF_UNIX SOCK_STREAM");
+
+	/* classic getsockopt */
+	*len = sizeof(*linger);
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", [%d]) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger, *len, errstr);
+
+	/* classic setsockopt */
+	linger->l_onoff = -15;
+	linger->l_linger = -42;
+	set_linger(fd, linger, sizeof(*linger));
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", %d) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger,
+	       (unsigned int) sizeof(*linger), errstr);
+
+	/* setsockopt with optlen larger than necessary */
+	set_linger(fd, linger, sizeof(*linger) + 1);
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", %d) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger,
+	       (unsigned int) sizeof(*linger) + 1, errstr);
+
+	/* setsockopt with optlen < 0 - EINVAL */
+	set_linger(fd, linger, -1U);
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, %p, -1) = %s\n",
+	       fd, linger, errstr);
+
+	/* setsockopt with optlen smaller than necessary - EINVAL */
+	set_linger(fd, linger, sizeof(linger->l_onoff));
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, %p, %d) = %s\n",
+	       fd, linger, (unsigned int) sizeof(linger->l_onoff), errstr);
+
+	/* setsockopt optval EFAULT */
+	set_linger(fd, &linger->l_linger, sizeof(*linger));
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, %p, %d) = %s\n",
+	       fd, &linger->l_linger, (unsigned int) sizeof(*linger), errstr);
+
+	/* getsockopt with optlen larger than necessary - shortened */
+	*len = sizeof(*linger) + 1;
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", [%u->%d]) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger,
+	       (unsigned int) sizeof(*linger) + 1, *len, errstr);
+
+	/* getsockopt with optlen larger than usual - truncated to l_onoff */
+	*len = sizeof(linger->l_onoff);
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d}"
+	       ", [%d]) = %s\n",
+	       fd, linger->l_onoff, *len, errstr);
+
+	/* getsockopt with optlen larger than usual - truncated to raw */
+	*len = sizeof(*linger) - 1;
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, ", fd);
+	print_quoted_hex(linger, *len);
+	printf(", [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt optval EFAULT */
+	*len = sizeof(*linger);
+	get_linger(fd, &linger->l_linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, %p, [%d]) = %s\n",
+	       fd, &linger->l_linger, *len, errstr);
+
+	/* getsockopt optlen EFAULT */
+	get_linger(fd, linger, len + 1);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, %p, %p) = %s\n",
+	       fd, linger, len + 1, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/so_linger.gen.test b/tests-m32/so_linger.gen.test
new file mode 100755
index 0000000..8362163
--- /dev/null
+++ b/tests-m32/so_linger.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_linger -e trace=getsockopt,setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt,setsockopt
diff --git a/tests-m32/so_peercred.c b/tests-m32/so_peercred.c
new file mode 100644
index 0000000..53bf071
--- /dev/null
+++ b/tests-m32/so_peercred.c
@@ -0,0 +1,117 @@
+/*
+ * Check decoding of SO_PEERCRED socket option.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include <unistd.h>
+
+#include "print_fields.h"
+
+static const char *errstr;
+
+static int
+get_peercred(int fd, void *val, socklen_t *len)
+{
+	int rc = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ucred, peercred);
+	TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+
+	int sv[2];
+	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sv))
+                perror_msg_and_skip("socketpair AF_UNIX SOCK_STREAM");
+
+	/* classic getsockopt */
+	*len = sizeof(*peercred);
+	get_peercred(sv[0], peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", sv[0]);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	PRINT_FIELD_UID(", ", *peercred, uid);
+	PRINT_FIELD_UID(", ", *peercred, gid);
+	printf("}, [%d]) = %s\n", *len, errstr);
+
+	int fd = socket(AF_UNIX, SOCK_STREAM, 0);
+	if (fd < 0)
+		perror_msg_and_skip("socket AF_UNIX SOCK_STREAM");
+
+	/* getsockopt with optlen larger than necessary - shortened */
+	*len = sizeof(*peercred) + 1;
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	PRINT_FIELD_UID(", ", *peercred, uid);
+	PRINT_FIELD_UID(", ", *peercred, gid);
+	printf("}, [%u->%d]) = %s\n",
+	       (unsigned int) sizeof(*peercred) + 1, *len, errstr);
+
+	/* getsockopt with optlen smaller than usual - truncated to ucred.pid */
+	*len = sizeof(peercred->pid);
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	printf("}, [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt with optlen smaller than usual - truncated to ucred.uid */
+	*len = offsetof(struct ucred, gid);
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	PRINT_FIELD_UID(", ", *peercred, uid);
+	printf("}, [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt with optlen larger than usual - truncated to raw */
+	*len = sizeof(*peercred) - 1;
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED, ", fd);
+	print_quoted_hex(peercred, *len);
+	printf(", [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt optval EFAULT */
+	*len = sizeof(*peercred);
+	get_peercred(fd, &peercred->uid, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED, %p, [%d]) = %s\n",
+	       fd, &peercred->uid, *len, errstr);
+
+	/* getsockopt optlen EFAULT */
+	get_peercred(fd, peercred, len + 1);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED, %p, %p) = %s\n",
+	       fd, peercred, len + 1, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/so_peercred.gen.test b/tests-m32/so_peercred.gen.test
new file mode 100755
index 0000000..02eb479
--- /dev/null
+++ b/tests-m32/so_peercred.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred -e trace=getsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt
diff --git a/tests-m32/sock_filter-v.c b/tests-m32/sock_filter-v.c
new file mode 100644
index 0000000..16d5c1c
--- /dev/null
+++ b/tests-m32/sock_filter-v.c
@@ -0,0 +1,181 @@
+/*
+ * Check decoding of socket filters.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <unistd.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <linux/filter.h>
+
+#define PRINT_STMT_SYM(pfx, code, k)	PRINT_STMT_SYM_(pfx, #code, #k)
+#define PRINT_STMT_SYM_(pfx, code, k)	\
+	printf("%sBPF_STMT(%s, %s)", pfx, code, k)
+#define PRINT_STMT_VAL(pfx, code, k)	PRINT_STMT_VAL_(pfx, #code, k)
+#define PRINT_STMT_VAL_(pfx, code, k)	\
+	printf("%sBPF_STMT(%s, %#x)", pfx, code, k)
+
+#define PRINT_JUMP(pfx, code, k, jt, jf)	PRINT_JUMP_(pfx, #code, k, jt, jf)
+#define PRINT_JUMP_(pfx, code, k, jt, jf)	\
+	printf("%sBPF_JUMP(%s, %#x, %#x, %#x)", pfx, code, k, jt, jf)
+
+static const struct sock_filter bpf_filter[] = {
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_LL_OFF+4),
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_NET_OFF+8),
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF+SKF_AD_PROTOCOL),
+	BPF_JUMP(BPF_JMP|BPF_K|BPF_JEQ, IPPROTO_UDP, 0, 5),
+	BPF_STMT(BPF_LD|BPF_W|BPF_LEN, 0),
+	BPF_JUMP(BPF_JMP|BPF_K|BPF_JGE, 100, 0, 3),
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, 42),
+	BPF_JUMP(BPF_JMP|BPF_K|BPF_JEQ, 'a', 0, 1),
+	BPF_STMT(BPF_RET|BPF_K, -1U),
+	BPF_STMT(BPF_RET|BPF_K, 0)
+};
+
+static void
+print_filter(void)
+{
+	PRINT_STMT_SYM("[", BPF_LD|BPF_B|BPF_ABS, SKF_LL_OFF+4);
+	PRINT_STMT_SYM(", ", BPF_LD|BPF_B|BPF_ABS, SKF_NET_OFF+8);
+	PRINT_STMT_SYM(", ", BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF+SKF_AD_PROTOCOL);
+	PRINT_JUMP(", ", BPF_JMP|BPF_K|BPF_JEQ, IPPROTO_UDP, 0, 5);
+	PRINT_STMT_VAL(", ", BPF_LD|BPF_W|BPF_LEN, 0);
+	PRINT_JUMP(", ", BPF_JMP|BPF_K|BPF_JGE, 100, 0, 3);
+	PRINT_STMT_VAL(", ", BPF_LD|BPF_B|BPF_ABS, 42);
+	PRINT_JUMP(", ", BPF_JMP|BPF_K|BPF_JEQ, 'a', 0, 1);
+	PRINT_STMT_VAL(", ", BPF_RET|BPF_K, -1U);
+	PRINT_STMT_VAL(", ", BPF_RET|BPF_K, 0);
+	putchar(']');
+}
+
+static const char *errstr;
+
+static int
+get_filter(int fd, void *val, socklen_t *len)
+{
+	int rc = getsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static int
+set_filter(int fd, void *val, socklen_t len)
+{
+	int rc = setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	int rc;
+	struct sock_filter *const filter =
+		tail_memdup(bpf_filter, sizeof(bpf_filter));
+	void *const efault = filter + ARRAY_SIZE(bpf_filter);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct sock_fprog, prog);
+	TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+
+	prog->len = ARRAY_SIZE(bpf_filter);
+	prog->filter = filter;
+
+	int fd = socket(AF_INET, SOCK_DGRAM, 0);
+	if (fd < 0)
+		perror_msg_and_skip("socket AF_INET SOCK_DGRAM");
+
+	/* query sock_filter program length -> 0 */
+	*len = BPF_MAXINSNS;
+	rc = get_filter(fd, NULL, len);
+	if (rc)
+		perror_msg_and_skip("getsockopt SOL_SOCKET SO_ATTACH_FILTER");
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER"
+	       ", NULL, [%u->0]) = 0\n", fd, BPF_MAXINSNS);
+
+	/* getsockopt NULL optlen - EFAULT */
+	rc = get_filter(fd, NULL, NULL);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, NULL, NULL)"
+	       " = %s\n", fd, errstr);
+
+	/* attach a filter */
+	rc = set_filter(fd, prog, sizeof(*prog));
+	if (rc)
+		perror_msg_and_skip("setsockopt SOL_SOCKET SO_ATTACH_FILTER");
+	printf("setsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, {len=%u, filter=",
+	       fd, prog->len);
+	print_filter();
+	printf("}, %u) = 0\n", (unsigned int) sizeof(*prog));
+
+	/* setsockopt optlen is too small - EINVAL */
+	rc = set_filter(fd, prog, sizeof(*prog) - 4);
+	printf("setsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p, %u) = %s\n",
+	       fd, prog, (unsigned int) sizeof(*prog) - 4, errstr);
+
+#ifdef SO_ATTACH_REUSEPORT_CBPF
+	rc = setsockopt(fd, SOL_SOCKET, SO_ATTACH_REUSEPORT_CBPF,
+			prog, sizeof(*prog));
+	errstr = sprintrc(rc);
+	printf("setsockopt(%d, SOL_SOCKET, SO_ATTACH_REUSEPORT_CBPF"
+	       ", {len=%u, filter=", fd, prog->len);
+	print_filter();
+	printf("}, %u) = %s\n", (unsigned int) sizeof(*prog), errstr);
+#endif
+
+	/* query sock_filter program length -> ARRAY_SIZE(bpf_filter) */
+	*len = 0;
+	rc = get_filter(fd, efault, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p"
+	       ", [0->%u]) = %s\n",
+	       fd, efault, (unsigned int) ARRAY_SIZE(bpf_filter), errstr);
+
+	/* getsockopt optlen is too small - EINVAL */
+	*len = ARRAY_SIZE(bpf_filter) - 1;
+	rc = get_filter(fd, efault, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p"
+	       ", [%u]) = %s\n",
+	       fd, efault, (unsigned int) ARRAY_SIZE(bpf_filter) - 1, errstr);
+
+	/* getsockopt optval EFAULT */
+	*len = ARRAY_SIZE(bpf_filter);
+	rc = get_filter(fd, filter + 1, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p"
+	       ", [%u]) = %s\n", fd, filter + 1,
+	       (unsigned int) ARRAY_SIZE(bpf_filter), errstr);
+
+	/* getsockopt optlen is too large - truncated */
+	*len = ARRAY_SIZE(bpf_filter) + 1;
+	rc = get_filter(fd, filter, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, ", fd);
+	print_filter();
+	printf(", [%u->%d]) = %s\n",
+	       (unsigned int) ARRAY_SIZE(bpf_filter) + 1, *len, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/sock_filter-v.gen.test b/tests-m32/sock_filter-v.gen.test
new file mode 100755
index 0000000..611c2de
--- /dev/null
+++ b/tests-m32/sock_filter-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v -v -e trace=getsockopt,setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -v -e trace=getsockopt,setsockopt
diff --git a/tests-m32/strace-V.test b/tests-m32/strace-V.test
index 8db1395..ec1ca05 100755
--- a/tests-m32/strace-V.test
+++ b/tests-m32/strace-V.test
@@ -8,24 +8,48 @@
 
 run_strace -V > "$LOG"
 
-getval()
+getstr()
 {
 	sed -r -n 's/#define[[:space:]]*'"$1"'[[:space:]]*"([^"]*)".*/\1/p' \
 		../../config.h
 }
 
-config_year=$(getval COPYRIGHT_YEAR)
+# getoption OPTION YES_STRING [NO_STRING]
+#
+# Returns YES_STRING in case OPTION is enabled (present in config.h and has
+# a non-zero numeric value). Otherwise, NO_STRING (or empty string, if not
+# specified) is returned.
+getoption()
+{
+	local opt
+	opt=$(sed -r -n 's/#define[[:space:]]*'"$1"'[[:space:]]*([0-9]+)$/\1/p' \
+		../../config.h)
+	if [ -n "$opt" -a "$opt" -ne 0 ]; then
+		printf "%s" "$2"
+	else
+		printf "%s" "${3-}"
+	fi
+}
+
+config_year=$(getstr COPYRIGHT_YEAR)
 
 [ "$year" -ge "$config_year" ] && [ "$config_year" -ge 2017 ] || {
 	echo >&2 "The year derived from config.h (${config_year}) does not pass sanity checks."
 	exit 1
 }
 
+option_unwind=$(getoption USE_LIBUNWIND " stack-unwind")
+
+features="${option_unwind}"
+[ -n "$features" ] || features=" (none)"
+
 cat > "$EXP" << __EOF__
-$(getval PACKAGE_NAME) -- version $(getval PACKAGE_VERSION)
-Copyright (c) 1991-${config_year} The strace developers <$(getval PACKAGE_URL)>.
+$(getstr PACKAGE_NAME) -- version $(getstr PACKAGE_VERSION)
+Copyright (c) 1991-${config_year} The strace developers <$(getstr PACKAGE_URL)>.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Optional features enabled:${features}
 __EOF__
 
 match_diff "$LOG" "$EXP"
diff --git a/tests-m32/strace-ff.test b/tests-m32/strace-ff.test
index 7107527..6141814 100755
--- a/tests-m32/strace-ff.test
+++ b/tests-m32/strace-ff.test
@@ -7,7 +7,7 @@
 run_prog_skip_if_failed \
 	kill -0 $$
 
-../set_ptracer_any ../sleep 1 > "$OUT" &
+../set_ptracer_any ../sleep 3 > "$OUT" &
 tracee_pid=$!
 
 while ! [ -s "$OUT" ]; do
diff --git a/tests-m32/strace-t.test b/tests-m32/strace-t.test
index 38070f3..73303ae 100755
--- a/tests-m32/strace-t.test
+++ b/tests-m32/strace-t.test
@@ -4,15 +4,26 @@
 
 . "${srcdir=.}/init.sh"
 
-run_prog_skip_if_failed date +%T > /dev/null
+run_prog_skip_if_failed date +%s > "$LOG"
+run_prog_skip_if_failed date +%T --date "@$(cat "$LOG")" > /dev/null
 run_prog ../sleep 0
 
-t0="$(date +%T)"
+s0="$(date +%s)"
 run_strace -t -eexecve $args
-t1="$(date +%T)"
+s1="$(date +%s)"
+
+s="$s0"
+t_reg=
+while [ "$s" -le "$s1" ]; do
+	t="$(date +%T --date "@$s")"
+	[ -z "$t_reg" ] && t_reg="$t" || t_reg="$t_reg|$t"
+	s=$(($s + 1))
+done
+t_reg="($t_reg)"
 
 cat > "$EXP" << __EOF__
-($t0|$t1) execve\\("\\.\\./sleep", \\["\\.\\./sleep", "0"\\], 0x[[:xdigit:]]* /\\* [[:digit:]]* vars \\*/\\) = 0
+$t_reg execve\\("\\.\\./sleep", \\["\\.\\./sleep", "0"\\], 0x[[:xdigit:]]* /\\* [[:digit:]]* vars \\*/\\) = 0
+$t_reg \\+\\+\\+ exited with 0 \\+\\+\\+
 __EOF__
 
 match_grep "$LOG" "$EXP"
diff --git a/tests-m32/strace.supp b/tests-m32/strace.supp
index 578b0a2..248a471 100644
--- a/tests-m32/strace.supp
+++ b/tests-m32/strace.supp
@@ -5,3 +5,13 @@
    fun:sched_getaffinity*
    fun:get_cpuset_size
 }
+
+{
+   qualify_tokens: memleak before error_msg_and_die
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:malloc
+   fun:strdup
+   fun:xstrdup
+   fun:qualify_tokens
+}
diff --git a/tests-m32/syntax.sh b/tests-m32/syntax.sh
new file mode 100644
index 0000000..0a0d2a5
--- /dev/null
+++ b/tests-m32/syntax.sh
@@ -0,0 +1,81 @@
+#!/bin/sh
+#
+# Define syntax testing primitives.
+#
+# Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2016-2017 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+check_exit_status_and_stderr()
+{
+	$STRACE "$@" 2> "$LOG" &&
+		dump_log_and_fail_with \
+			"strace $* failed to handle the error properly"
+	match_diff "$LOG" "$EXP" ||
+		dump_log_and_fail_with \
+			"strace $* failed to print expected diagnostics"
+}
+
+check_exit_status_and_stderr_using_grep()
+{
+	$STRACE "$@" 2> "$LOG" &&
+		dump_log_and_fail_with \
+			"strace $* failed to handle the error properly"
+	match_grep "$LOG" "$EXP" ||
+		dump_log_and_fail_with \
+			"strace $* failed to print expected diagnostics"
+}
+
+strace_exp="${STRACE##* }"
+
+check_e()
+{
+	local pattern="$1"; shift
+	cat > "$EXP" << __EOF__
+$strace_exp: $pattern
+__EOF__
+	check_exit_status_and_stderr "$@"
+}
+
+check_e_using_grep()
+{
+	local pattern="$1"; shift
+	cat > "$EXP" << __EOF__
+$strace_exp: $pattern
+__EOF__
+	check_exit_status_and_stderr_using_grep "$@"
+}
+
+check_h()
+{
+	local pattern="$1"; shift
+	cat > "$EXP" << __EOF__
+$strace_exp: $pattern
+Try '$strace_exp -h' for more information.
+__EOF__
+	check_exit_status_and_stderr "$@"
+}
diff --git a/tests-m32/test_netlink.h b/tests-m32/test_netlink.h
new file mode 100644
index 0000000..f509e18
--- /dev/null
+++ b/tests-m32/test_netlink.h
@@ -0,0 +1,97 @@
+#include "tests.h"
+#include "print_fields.h"
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/socket.h>
+#include "netlink.h"
+
+#define TEST_NETLINK_(fd_, nlh0_,					\
+		      type_, type_str_,					\
+		      flags_, flags_str_,				\
+		      data_len_, src_, slen_, ...)			\
+	do {								\
+		struct nlmsghdr *const TEST_NETLINK_nlh =		\
+			(nlh0_) - (slen_);				\
+		const unsigned int msg_len =				\
+			NLMSG_HDRLEN + (data_len_);			\
+									\
+		SET_STRUCT(struct nlmsghdr, TEST_NETLINK_nlh,		\
+			.nlmsg_len = msg_len,				\
+			.nlmsg_type = (type_),				\
+			.nlmsg_flags = (flags_)				\
+		);							\
+		memcpy(NLMSG_DATA(TEST_NETLINK_nlh), (src_), (slen_));	\
+									\
+		const char *const errstr =				\
+			sprintrc(sendto((fd_), TEST_NETLINK_nlh,	\
+					msg_len, MSG_DONTWAIT,		\
+					NULL, 0));			\
+									\
+		printf("sendto(%d, {{len=%u, type=%s"			\
+		       ", flags=%s, seq=0, pid=0}, ",			\
+		       (fd_), msg_len, (type_str_), (flags_str_));	\
+									\
+		{ __VA_ARGS__; }					\
+									\
+		printf("}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",		\
+		       msg_len, errstr);				\
+	} while (0)
+
+#define TEST_NETLINK(fd_, nlh0_, type_, flags_,				\
+		     data_len_, src_, slen_, ...)			\
+	TEST_NETLINK_((fd_), (nlh0_),					\
+		      (type_), #type_,					\
+		      (flags_), #flags_,				\
+		      (data_len_), (src_), (slen_), __VA_ARGS__)
+
+#define TEST_NETLINK_OBJECT_EX_(fd_, nlh0_,				\
+				type_, type_str_,			\
+				flags_, flags_str_,			\
+				obj_, fallback_func, ...)		\
+	do {								\
+		char pattern[DEFAULT_STRLEN];				\
+		fill_memory_ex(pattern, sizeof(pattern),		\
+			       'a', 'z' - 'a' + 1);			\
+		const unsigned int plen =				\
+			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
+			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
+		/* len < sizeof(obj_) */				\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      (type_), (type_str_),			\
+			      (flags_), (flags_str_),			\
+			      plen, pattern, plen,			\
+			      (fallback_func)(pattern, plen));		\
+		/* short read of sizeof(obj_) */			\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      (type_), (type_str_),			\
+			      (flags_), (flags_str_),			\
+			      sizeof(obj_),				\
+			      pattern, plen,				\
+			      printf("%p",				\
+				     NLMSG_DATA(TEST_NETLINK_nlh)));	\
+		/* sizeof(obj_) */					\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      (type_), (type_str_),			\
+			      (flags_), (flags_str_),			\
+			      sizeof(obj_),				\
+			      &(obj_), sizeof(obj_),			\
+			      __VA_ARGS__);				\
+	} while (0)
+
+#define TEST_NETLINK_OBJECT_EX(fd_, nlh0_,				\
+			       type_, flags_,				\
+			       obj_, fallback_func, ...)		\
+	TEST_NETLINK_OBJECT_EX_((fd_), (nlh0),				\
+				(type_), #type_,			\
+				(flags_), #flags_,			\
+				(obj_), (fallback_func), __VA_ARGS__)
+
+#define TEST_NETLINK_OBJECT(fd_, nlh0_,					\
+			    type_, flags_,				\
+			    obj_, ...)					\
+	TEST_NETLINK_OBJECT_EX_((fd_), (nlh0),				\
+				(type_), #type_,			\
+				(flags_), #flags_,			\
+				(obj_), print_quoted_hex, __VA_ARGS__)
diff --git a/tests-m32/test_nlattr.h b/tests-m32/test_nlattr.h
index 8cbb211..048d547 100644
--- a/tests-m32/test_nlattr.h
+++ b/tests-m32/test_nlattr.h
@@ -29,6 +29,7 @@
 #include "print_fields.h"
 
 #include <stdio.h>
+#include <stdint.h>
 #include <string.h>
 #include <sys/socket.h>
 #include "netlink.h"
@@ -62,14 +63,15 @@
 	do {								\
 		struct nlmsghdr *const nlh =				\
 			(nlh0_) - (NLA_HDRLEN + (slen_));		\
-		struct nlattr *const nla = NLMSG_ATTR(nlh, (hdrlen_));	\
+		struct nlattr *const TEST_NLATTR_nla =			\
+			NLMSG_ATTR(nlh, (hdrlen_));			\
 		const unsigned int nla_len =				\
 			NLA_HDRLEN + (nla_data_len_);			\
 		const unsigned int msg_len =				\
 			NLMSG_SPACE(hdrlen_) + nla_len;			\
 									\
 		(init_msg_)(nlh, msg_len);				\
-		init_nlattr(nla, nla_len, (nla_type_),			\
+		init_nlattr(TEST_NLATTR_nla, nla_len, (nla_type_),	\
 			   (src_), (slen_));				\
 									\
 		const char *const errstr =				\
@@ -95,23 +97,24 @@
 		(nla_type_), #nla_type_,				\
 		(nla_data_len_), (src_), (slen_), __VA_ARGS__)
 
-#define TEST_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,				\
-			   init_msg_, print_msg_,			\
-			   nla_type_, pattern_, obj_, ...)		\
+#define TEST_NLATTR_OBJECT_EX_(fd_, nlh0_, hdrlen_,			\
+			       init_msg_, print_msg_,			\
+			       nla_type_, nla_type_str_,		\
+			       pattern_, obj_, fallback_func, ...)	\
 	do {								\
-		const int plen = sizeof(obj_) - 1 > DEFAULT_STRLEN	\
+		const unsigned int plen =				\
+			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
 			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
 		/* len < sizeof(obj_) */				\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
-			(nla_type_), #nla_type_,			\
-			sizeof(obj_) - 1,				\
-			(pattern_), sizeof(obj_) - 1,			\
-			printf("\"%.*s\"", plen, (pattern_)));		\
+			(nla_type_), (nla_type_str_),			\
+			plen, (pattern_), plen,				\
+			(fallback_func)((pattern_), plen));		\
 		/* short read of sizeof(obj_) */			\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
-			(nla_type_), #nla_type_,			\
+			(nla_type_), (nla_type_str_),			\
 			sizeof(obj_),					\
 			(pattern_), sizeof(obj_) - 1,			\
 			printf("%p",					\
@@ -119,26 +122,44 @@
 		/* sizeof(obj_) */					\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
-			(nla_type_), #nla_type_,			\
+			(nla_type_), (nla_type_str_),			\
 			sizeof(obj_),					\
 			&(obj_), sizeof(obj_),				\
 			__VA_ARGS__);					\
 	} while (0)
 
+#define TEST_NLATTR_OBJECT_EX(fd_, nlh0_, hdrlen_,			\
+			      init_msg_, print_msg_,			\
+			      nla_type_,				\
+			      pattern_, obj_, fallback_func, ...)	\
+	TEST_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),		\
+			       (init_msg_), (print_msg_),		\
+			       (nla_type_), #nla_type_,			\
+			       (pattern_), (obj_), (fallback_func),	\
+			       __VA_ARGS__)
+
+#define TEST_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,				\
+			   init_msg_, print_msg_,			\
+			   nla_type_, pattern_, obj_, ...)		\
+	TEST_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),		\
+			       (init_msg_), (print_msg_),		\
+			       (nla_type_), #nla_type_,			\
+			       (pattern_), (obj_), print_quoted_hex,	\
+			       __VA_ARGS__)
+
 #define TEST_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,				\
 			  init_msg_, print_msg_,			\
 			  nla_type_, pattern_, obj_, print_elem_)	\
 	do {								\
-		const int plen =					\
+		const unsigned int plen =				\
 			sizeof((obj_)[0]) - 1 > DEFAULT_STRLEN		\
 			? DEFAULT_STRLEN : (int) sizeof((obj_)[0]) - 1;	\
 		/* len < sizeof((obj_)[0]) */				\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
-			sizeof((obj_)[0]) - 1,				\
-			(pattern_), sizeof((obj_)[0]) - 1,		\
-			printf("\"%.*s\"", plen, (pattern_)));		\
+			plen, (pattern_), plen,				\
+			print_quoted_hex((pattern_), plen));		\
 		/* sizeof((obj_)[0]) < len < sizeof(obj_) */		\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
@@ -181,3 +202,38 @@
 			}						\
 			printf("]"));					\
 	} while (0)
+
+#define TEST_NESTED_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,			\
+				  init_msg_, print_msg_,		\
+				  nla_type_, pattern_, obj_, ...)	\
+	do {								\
+		const unsigned int plen =				\
+			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
+			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
+		/* len < sizeof(obj_) */				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			plen, (pattern_), plen,				\
+			print_quoted_hex((pattern_), plen);		\
+			printf("}"));					\
+		/* short read of sizeof(obj_) */			\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			sizeof(obj_),					\
+			(pattern_), sizeof(obj_) - 1,			\
+			printf("%p}",					\
+			       RTA_DATA(TEST_NLATTR_nla)));		\
+		/* sizeof(obj_) */					\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			sizeof(obj_),					\
+			&(obj_), sizeof(obj_),				\
+			__VA_ARGS__,					\
+			printf("}"));					\
+	} while (0)
diff --git a/tests-m32/test_printpath.c b/tests-m32/test_printpath.c
new file mode 100644
index 0000000..5f482f2
--- /dev/null
+++ b/tests-m32/test_printpath.c
@@ -0,0 +1,110 @@
+/*
+ * Test printpath/umovestr.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/param.h>
+
+#include "test_ucopy.h"
+
+static void
+test_printpath_at(char *const p, const unsigned int test_max)
+{
+	/*
+	 *       /
+	 *      /.
+	 *     /..
+	 *    /...
+	 *   /../.
+	 *  /../..
+	 * /../../
+	 */
+
+	char *const eop = p + (test_max - 1);
+	*eop = '\0';
+	unsigned int i;
+	for (i = 1; i < test_max; ++i) {
+		const unsigned int i_1 = i - 1;
+		memmove(eop - i, eop - i_1, i_1);
+		eop[-1] = "/.."[i_1 % 3];
+		if (chdir(eop - i))
+			perror_msg_and_fail("chdir");
+		printf("chdir(\"%s\") = 0\n", eop - i);
+	}
+}
+
+static void
+test_efault(const unsigned int test_max)
+{
+	char *p = tail_alloc(test_max);
+	const char *const efault = p + test_max;
+	memset(p, '/', test_max);
+
+	for (; p <= efault; ++p) {
+		if (p <= efault - PATH_MAX)
+			continue;
+		printf("chdir(%p) = %s\n", p, sprintrc(chdir(p)));
+	}
+}
+
+static void
+test_enametoolong(void)
+{
+	char *p = tail_alloc(PATH_MAX);
+	memset(p, '/', PATH_MAX);
+
+	printf("chdir(\"%.*s\"...) = %s\n",
+	       PATH_MAX - 1, p, sprintrc(chdir(p)));
+}
+
+void
+test_printpath(const unsigned int test_max)
+{
+	/*
+	 * /../..|
+	 * /../.|.
+	 * /../|..
+	 * /..|/..
+	 * /.|./..
+	 * /|../..
+	 * |/../..
+	 */
+	const unsigned int page_size = get_page_size();
+	char *p = tail_alloc(test_max + page_size);
+	unsigned int i;
+	for (i = 1; i < sizeof(long); ++i)
+		test_printpath_at(p + i, test_max);
+	for (i = 0; i < sizeof(long); ++i)
+		test_printpath_at(p + page_size - i, test_max);
+	test_efault(test_max);
+	test_enametoolong();
+}
diff --git a/tests-m32/test_printstrn.c b/tests-m32/test_printstrn.c
new file mode 100644
index 0000000..bc9c775
--- /dev/null
+++ b/tests-m32/test_printstrn.c
@@ -0,0 +1,102 @@
+/*
+ * Test printstrn/umoven.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <asm/unistd.h>
+
+#include "scno.h"
+#include "test_ucopy.h"
+
+static const char *errstr;
+
+static void add_key(const char *addr, const unsigned int len)
+{
+	errstr = sprintrc(syscall(__NR_add_key, 0, 0, addr, len, -1));
+}
+
+static void
+test_printstrn_at(char *const p, const unsigned int test_max)
+{
+	unsigned int i;
+
+	for (i = 0; i <= test_max; ++i) {
+		add_key(p + (test_max - i), i);
+		printf("add_key(NULL, NULL, \"%.*s\", %u"
+		       ", KEY_SPEC_THREAD_KEYRING) = %s\n",
+		       (int) i, p + (test_max - i), i, errstr);
+	}
+}
+
+static void
+test_efault(const unsigned int test_max)
+{
+	char *p = tail_alloc(test_max);
+	memset(p, '/', test_max);
+	unsigned int i;
+
+	for (i = 0; i <= test_max; ++i) {
+		unsigned int j;
+		for (j = 1; j <= sizeof(long); ++j) {
+			add_key(p + (test_max - i), i + j);
+			printf("add_key(NULL, NULL, %p, %u"
+			       ", KEY_SPEC_THREAD_KEYRING) = %s\n",
+			       p + (test_max - i), i + j, errstr);
+		}
+	}
+}
+
+void
+test_printstrn(const unsigned int test_max)
+{
+	/*
+	 * abcdefgh|
+	 * abcdefg|h
+	 * abcdef|gh
+	 * abcde|fgh
+	 * abcd|efgh
+	 * abc|defgh
+	 * ab|cdefgh
+	 * a|bcdefgh
+	 * |abcdefgh
+	 */
+	const unsigned int page_size = get_page_size();
+	char *p = tail_alloc(test_max + page_size);
+	fill_memory_ex(p, test_max + page_size, 'a', 'z' - 'a' + 1);
+
+	unsigned int i;
+	for (i = 1; i <= sizeof(long); ++i)
+		test_printstrn_at(p + i, test_max);
+	for (i = 0; i < sizeof(long); ++i)
+		test_printstrn_at(p + page_size - i, test_max);
+	test_efault(test_max);
+}
diff --git a/tests-m32/test_ucopy.c b/tests-m32/test_ucopy.c
new file mode 100644
index 0000000..9ddffbc
--- /dev/null
+++ b/tests-m32/test_ucopy.c
@@ -0,0 +1,162 @@
+/*
+ * Test whether process_vm_readv and PTRACE_PEEKDATA work.
+ *
+ * Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/ptrace.h>
+#include <sys/uio.h>
+#include <sys/wait.h>
+
+#include "test_ucopy.h"
+
+#ifndef HAVE_PROCESS_VM_READV
+
+# include <asm/unistd.h>
+# include "scno.h"
+static ssize_t
+strace_process_vm_readv(pid_t pid,
+		 const struct iovec *lvec,
+		 unsigned long liovcnt,
+		 const struct iovec *rvec,
+		 unsigned long riovcnt,
+		 unsigned long flags)
+{
+	return syscall(__NR_process_vm_readv,
+		       (long) pid, lvec, liovcnt, rvec, riovcnt, flags);
+}
+# define process_vm_readv strace_process_vm_readv
+
+#endif /* !HAVE_PROCESS_VM_READV */
+
+static bool
+call_process_vm_readv(const int pid, long *const addr)
+{
+	long data = 0;
+
+	const struct iovec local = {
+		.iov_base = &data,
+		.iov_len = sizeof(data)
+	};
+	const struct iovec remote = {
+		.iov_base = addr,
+		.iov_len = sizeof(*addr)
+	};
+
+	return process_vm_readv(pid, &local, 1, &remote, 1, 0) == sizeof(data)
+		&& data == 1;
+}
+
+static bool
+call_ptrace_peekdata(const int pid, long *const addr)
+{
+	return ptrace(PTRACE_PEEKDATA, pid, addr, 0) == 1;
+}
+
+static bool
+test_ucopy(bool (*fn)(int pid, long *addr))
+{
+	static long data;
+
+	data = 0;
+	bool rc = false;
+	int saved = 0;
+
+	pid_t pid = fork();
+	if (pid < 0)
+		perror_msg_and_fail("fork");
+
+	if (!pid) {
+		data = 1;
+		if (ptrace(PTRACE_TRACEME, 0, 0, 0))
+			perror_msg_and_fail("PTRACE_TRACEME");
+		raise(SIGSTOP);
+		_exit(0);
+	}
+
+	for (;;) {
+		int status, tracee;
+
+		errno = 0;
+		tracee = wait(&status);
+		if (tracee != pid) {
+			if (errno == EINTR)
+				continue;
+			saved = errno;
+			kill(pid, SIGKILL);
+			errno = saved;
+			perror_msg_and_fail("wait");
+		}
+		if (WIFEXITED(status)) {
+			if (WEXITSTATUS(status) == 0)
+				break;
+			error_msg_and_fail("unexpected exit status %u",
+					   WEXITSTATUS(status));
+		}
+		if (WIFSIGNALED(status))
+			error_msg_and_fail("unexpected signal %u",
+					   WTERMSIG(status));
+		if (!WIFSTOPPED(status) || WSTOPSIG(status) != SIGSTOP) {
+			kill(pid, SIGKILL);
+			error_msg_and_fail("unexpected wait status %x",
+					   status);
+		}
+
+		errno = 0;
+		rc = fn(pid, &data);
+		if (!rc)
+			saved = errno;
+
+		if (ptrace(PTRACE_CONT, pid, 0, 0)) {
+			saved = errno;
+			kill(pid, SIGKILL);
+			errno = saved;
+			perror_msg_and_fail("PTRACE_CONT");
+		}
+	}
+
+	if (!rc)
+		errno = saved;
+	return rc;
+}
+
+bool
+test_process_vm_readv(void)
+{
+	return test_ucopy(call_process_vm_readv);
+}
+
+bool
+test_ptrace_peekdata(void)
+{
+	return test_ucopy(call_ptrace_peekdata);
+}
diff --git a/tests-m32/test_ucopy.h b/tests-m32/test_ucopy.h
new file mode 100644
index 0000000..30d1c11
--- /dev/null
+++ b/tests-m32/test_ucopy.h
@@ -0,0 +1,13 @@
+#include <stdbool.h>
+
+extern bool
+test_process_vm_readv(void);
+
+extern bool
+test_ptrace_peekdata(void);
+
+extern void
+test_printpath(unsigned int test_max_size);
+
+extern void
+test_printstrn(unsigned int test_max_size);
diff --git a/tests-m32/tests.h b/tests-m32/tests.h
index 094f365..d453e3e 100644
--- a/tests-m32/tests.h
+++ b/tests-m32/tests.h
@@ -134,8 +134,17 @@
 /* Print string in a quoted form. */
 void print_quoted_string(const char *);
 
+/*
+ * Print a NUL-terminated string `str' of length up to `size' - 1
+ * in a quoted form.
+ */
+void print_quoted_cstring(const char *str, size_t size);
+
 /* Print memory in a quoted form. */
-void print_quoted_memory(const char *, size_t);
+void print_quoted_memory(const void *, size_t);
+
+/* Print memory in a hexquoted form. */
+void print_quoted_hex(const void *, size_t);
 
 /* Print time_t and nanoseconds in symbolic format. */
 void print_time_t_nsec(time_t, unsigned long long, int);
@@ -188,6 +197,15 @@
 /* Create a pipe with maximized descriptor numbers. */
 void pipe_maxfd(int pipefd[2]);
 
+/* if_nametoindex("lo") */
+unsigned int ifindex_lo(void);
+
+#ifdef HAVE_IF_INDEXTONAME
+# define IFINDEX_LO_STR "if_nametoindex(\"lo\")"
+#else
+# define IFINDEX_LO_STR "1"
+#endif
+
 #define F8ILL_KULONG_SUPPORTED	(sizeof(void *) < sizeof(kernel_ulong_t))
 #define F8ILL_KULONG_MASK	((kernel_ulong_t) 0xffffffff00000000ULL)
 
@@ -225,26 +243,6 @@
 # define SKIP_MAIN_UNDEFINED(arg) \
 	int main(void) { error_msg_and_skip("undefined: %s", arg); }
 
-/*
- * The kernel used to define 64-bit types on 64-bit systems on a per-arch
- * basis.  Some architectures would use unsigned long and others would use
- * unsigned long long.  These types were exported as part of the
- * kernel-userspace ABI and now must be maintained forever.  This matches
- * what the kernel exports for each architecture so we don't need to cast
- * every printing of __u64 or __s64 to stdint types.
- */
-# if SIZEOF_LONG == 4
-#  define PRI__64 "ll"
-# elif defined ALPHA || defined IA64 || defined MIPS || defined POWERPC
-#  define PRI__64 "l"
-# else
-#  define PRI__64 "ll"
-# endif
-
-# define PRI__d64 PRI__64"d"
-# define PRI__u64 PRI__64"u"
-# define PRI__x64 PRI__64"x"
-
 # if WORDS_BIGENDIAN
 #  define LL_PAIR(HI, LO) (HI), (LO)
 # else
diff --git a/tests-m32/times.c b/tests-m32/times.c
index c4cce0e..e2db4e2 100644
--- a/tests-m32/times.c
+++ b/tests-m32/times.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2015 Eugene Syromyatnikov <evgsyr@gmail.com>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/uio.c b/tests-m32/uio.c
index 21f005d..c02c816 100644
--- a/tests-m32/uio.c
+++ b/tests-m32/uio.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/uname.c b/tests-m32/uname.c
index 96db753..23b64c1 100644
--- a/tests-m32/uname.c
+++ b/tests-m32/uname.c
@@ -12,24 +12,23 @@
 	int abbrev = ac > 1;
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct utsname, uname);
 	int rc = syscall(__NR_uname, uname);
-	printf("uname({sysname=\"");
+	printf("uname({sysname=");
 	print_quoted_string(uname->sysname);
-	printf("\", nodename=\"");
+	printf(", nodename=");
 	print_quoted_string(uname->nodename);
 	if (abbrev) {
-		printf("\", ...");
+		printf(", ...");
 	} else {
-		printf("\", release=\"");
+		printf(", release=");
 		print_quoted_string(uname->release);
-		printf("\", version=\"");
+		printf(", version=");
 		print_quoted_string(uname->version);
-		printf("\", machine=\"");
+		printf(", machine=");
 		print_quoted_string(uname->machine);
 # ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
-		printf("\", domainname=\"");
+		printf(", domainname=");
 		print_quoted_string(uname->domainname);
 # endif
-		printf("\"");
 	}
 	printf("}) = %d\n", rc);
 
diff --git a/tests-m32/unix-pair-sendto-recvfrom.c b/tests-m32/unix-pair-sendto-recvfrom.c
index a0c710a..675fc07 100644
--- a/tests-m32/unix-pair-sendto-recvfrom.c
+++ b/tests-m32/unix-pair-sendto-recvfrom.c
@@ -2,6 +2,7 @@
  * Check decoding and dumping of sendto and recvfrom syscalls.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/vmsplice.c b/tests-m32/vmsplice.c
index 4242d9e..6058569 100644
--- a/tests-m32/vmsplice.c
+++ b/tests-m32/vmsplice.c
@@ -2,6 +2,7 @@
  * This file is part of vmsplice strace test.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/xattr.c b/tests-m32/xattr.c
index 03b4270..3bd87cc 100644
--- a/tests-m32/xattr.c
+++ b/tests-m32/xattr.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -112,9 +113,7 @@
 	else {
 		const int ellipsis = rc > DEFAULT_STRLEN;
 
-		putchar('"');
 		print_quoted_memory(big, ellipsis ? DEFAULT_STRLEN : rc);
-		putchar('"');
 		if (ellipsis)
 			fputs("...", stdout);
 	}
diff --git a/tests-m32/xchownx.c b/tests-m32/xchownx.c
index e415fef..beca206 100644
--- a/tests-m32/xchownx.c
+++ b/tests-m32/xchownx.c
@@ -2,6 +2,7 @@
  * Check decoding of chown/chown32/lchown/lchown32/fchown/fchown32 syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-m32/xetitimer.c b/tests-m32/xetitimer.c
index 3a81880..f9cfe0b 100644
--- a/tests-m32/xetitimer.c
+++ b/tests-m32/xetitimer.c
@@ -167,7 +167,7 @@
 	p_new->it_interval.tv_sec = 0xdeadbeefU;
 	p_new->it_interval.tv_usec = 0xfacefeedU;
 	p_new->it_value.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	p_new->it_value.tv_usec = (long) 0xbadc0dedfacefeedLL;
+	p_new->it_value.tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 
 	rc = setitimer(ITIMER_REAL, p_new, p_old);
 	printf("setitimer(ITIMER_REAL"
diff --git a/tests-m32/xettimeofday.c b/tests-m32/xettimeofday.c
index ec422cf..8652b24 100644
--- a/tests-m32/xettimeofday.c
+++ b/tests-m32/xettimeofday.c
@@ -73,7 +73,7 @@
 	       tz->tz_minuteswest, tz->tz_dsttime);
 
 	tv->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv->tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv->tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 	assert(syscall(__NR_settimeofday, tv, tz) == -1);
 	printf("settimeofday({tv_sec=%lld, tv_usec=%llu}"
 	       ", {tz_minuteswest=%d, tz_dsttime=%d}) = -1 EINVAL (%m)\n",
diff --git a/tests-m32/xselect.c b/tests-m32/xselect.c
index 6c8cd81..a25ebcc 100644
--- a/tests-m32/xselect.c
+++ b/tests-m32/xselect.c
@@ -91,7 +91,7 @@
 	FD_SET(fds[0], set);
 	FD_SET(fds[1], set);
 	tv->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv->tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv->tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 	memcpy(&tv_in, tv, sizeof(tv_in));
 	rc = syscall(TEST_SYSCALL_NR, fds[1] + 1, set, set, set, tv);
 	if (rc < 0) {
diff --git a/tests-m32/xutimes.c b/tests-m32/xutimes.c
index 5fd7161..23728a1 100644
--- a/tests-m32/xutimes.c
+++ b/tests-m32/xutimes.c
@@ -107,7 +107,7 @@
 	tv[0].tv_sec = 0xdeadbeefU;
 	tv[0].tv_usec = 0xfacefeedU;
 	tv[1].tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv[1].tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv[1].tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 
 	k_utimes(kfname, (uintptr_t) tv);
 	printf("%s(%s, [", TEST_SYSCALL_STR, qname);
diff --git a/tests-mx32/Makefile.am b/tests-mx32/Makefile.am
index c6793af..043b21f 100644
--- a/tests-mx32/Makefile.am
+++ b/tests-mx32/Makefile.am
@@ -50,6 +50,7 @@
 	get_sigset_size.c \
 	hexdump_strdup.c \
 	hexquote_strndup.c \
+	ifindex.c \
 	inode_of_sockfd.c \
 	libmmsg.c \
 	libsocketcall.c \
@@ -63,7 +64,12 @@
 	skip_unavailable.c \
 	sprintrc.c \
 	tail_alloc.c \
+	test_netlink.h \
 	test_nlattr.h \
+	test_printpath.c \
+	test_printstrn.c \
+	test_ucopy.c \
+	test_ucopy.h \
 	tests.h \
 	tprintf.c \
 	# end of libtests_a_SOURCES
@@ -81,6 +87,8 @@
 	attach-p-cmd-p \
 	block_reset_raise_run \
 	caps-abbrev \
+	clone_parent \
+	clone_ptrace \
 	count-f \
 	execve-v \
 	execveat-v \
@@ -96,6 +104,7 @@
 	ioctl_loop-v \
 	ioctl_nsfs \
 	ioctl_rtc-v \
+	is_linux_mips_n64 \
 	ksysent \
 	mmsg-silent \
 	mmsg_name-v \
@@ -241,18 +250,23 @@
 	attach-f-p.test \
 	attach-p-cmd.test \
 	bexecve.test \
+	clone_parent.test \
+	clone_ptrace.test \
 	count-f.test \
 	count.test \
 	detach-running.test \
 	detach-sleeping.test \
 	detach-stopped.test \
 	filter-unavailable.test \
+	fflush.test \
 	get_regs.test \
 	interactive_block.test \
 	ksysent.test \
 	opipe.test \
 	options-syntax.test \
 	pc.test \
+	printpath-umovestr-legacy.test \
+	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
 	qual_inject-error-signal.test \
@@ -292,7 +306,7 @@
 
 @VALGRIND_CHECK_RULES@
 VALGRIND_FLAGS = --quiet
-VALGRIND_SUPPRESSIONS_FILES = $(srcdir)/strace.supp
+VALGRIND_SUPPRESSIONS_FILES = $(abs_srcdir)/strace.supp
 
 EXTRA_DIST = \
 	caps-abbrev.awk \
@@ -317,6 +331,7 @@
 	lstatx.c \
 	match.awk \
 	net.expected \
+	netlink_sock_diag-v.sh \
 	oldselect.expected \
 	pipe.expected \
 	process_vm_readv_writev.c \
@@ -345,6 +360,7 @@
 	strace.supp \
 	struct_flock.c \
 	sun_path.expected \
+	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
@@ -385,6 +401,10 @@
 clean-local-check:
 	-rm -rf -- $(TESTS:.test=.dir) $(GEN_TESTS:.gen.test=.dir)
 
+.PHONY: check-valgrind-local
+check-valgrind-local: $(check_LIBRARIES) $(check_PROGRAMS)
+
+BUILT_SOURCES = ksysent.h
 CLEANFILES = ksysent.h
 
 include ../scno.am
diff --git a/tests-mx32/Makefile.in b/tests-mx32/Makefile.in
index bf06345..6886c3b 100644
--- a/tests-mx32/Makefile.in
+++ b/tests-mx32/Makefile.in
@@ -139,13 +139,15 @@
 check_PROGRAMS = $(am__EXEEXT_1) answer$(EXEEXT) attach-f-p$(EXEEXT) \
 	attach-f-p-cmd$(EXEEXT) attach-p-cmd-cmd$(EXEEXT) \
 	attach-p-cmd-p$(EXEEXT) block_reset_raise_run$(EXEEXT) \
-	caps-abbrev$(EXEEXT) count-f$(EXEEXT) execve-v$(EXEEXT) \
+	caps-abbrev$(EXEEXT) clone_parent$(EXEEXT) \
+	clone_ptrace$(EXEEXT) count-f$(EXEEXT) execve-v$(EXEEXT) \
 	execveat-v$(EXEEXT) filter-unavailable$(EXEEXT) \
 	fork-f$(EXEEXT) getpid$(EXEEXT) getppid$(EXEEXT) \
 	gettid$(EXEEXT) int_0x80$(EXEEXT) ioctl_dm-v$(EXEEXT) \
 	ioctl_evdev-v$(EXEEXT) ioctl_loop-nv$(EXEEXT) \
 	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
-	ksysent$(EXEEXT) mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
+	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
+	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
 	msg_control-v$(EXEEXT) net-accept-connect$(EXEEXT) \
 	netlink_inet_diag$(EXEEXT) netlink_netlink_diag$(EXEEXT) \
 	netlink_unix_diag$(EXEEXT) nsyscalls$(EXEEXT) pc$(EXEEXT) \
@@ -170,7 +172,7 @@
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_code_coverage.m4 \
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
-	$(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/mpers.m4 $(top_srcdir)/m4/st_bpf.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
 	$(top_srcdir)/m4/st_warn_cflags.m4 \
 	$(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
@@ -195,6 +197,7 @@
 	libtests_a-get_sigset_size.$(OBJEXT) \
 	libtests_a-hexdump_strdup.$(OBJEXT) \
 	libtests_a-hexquote_strndup.$(OBJEXT) \
+	libtests_a-ifindex.$(OBJEXT) \
 	libtests_a-inode_of_sockfd.$(OBJEXT) \
 	libtests_a-libmmsg.$(OBJEXT) \
 	libtests_a-libsocketcall.$(OBJEXT) \
@@ -206,13 +209,15 @@
 	libtests_a-signal2name.$(OBJEXT) \
 	libtests_a-skip_unavailable.$(OBJEXT) \
 	libtests_a-sprintrc.$(OBJEXT) libtests_a-tail_alloc.$(OBJEXT) \
-	libtests_a-tprintf.$(OBJEXT)
+	libtests_a-test_printpath.$(OBJEXT) \
+	libtests_a-test_printstrn.$(OBJEXT) \
+	libtests_a-test_ucopy.$(OBJEXT) libtests_a-tprintf.$(OBJEXT)
 libtests_a_OBJECTS = $(am_libtests_a_OBJECTS)
 am__EXEEXT_1 = _newselect$(EXEEXT) accept$(EXEEXT) accept4$(EXEEXT) \
 	access$(EXEEXT) acct$(EXEEXT) add_key$(EXEEXT) \
 	adjtimex$(EXEEXT) aio$(EXEEXT) alarm$(EXEEXT) bpf$(EXEEXT) \
-	brk$(EXEEXT) btrfs$(EXEEXT) caps$(EXEEXT) chmod$(EXEEXT) \
-	chown$(EXEEXT) chown32$(EXEEXT) chroot$(EXEEXT) \
+	bpf-v$(EXEEXT) brk$(EXEEXT) btrfs$(EXEEXT) caps$(EXEEXT) \
+	chmod$(EXEEXT) chown$(EXEEXT) chown32$(EXEEXT) chroot$(EXEEXT) \
 	clock_adjtime$(EXEEXT) clock_nanosleep$(EXEEXT) \
 	clock_xettime$(EXEEXT) copy_file_range$(EXEEXT) creat$(EXEEXT) \
 	delete_module$(EXEEXT) dup$(EXEEXT) dup2$(EXEEXT) \
@@ -224,53 +229,66 @@
 	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) fchdir$(EXEEXT) \
 	fchmod$(EXEEXT) fchmodat$(EXEEXT) fchown$(EXEEXT) \
 	fchown32$(EXEEXT) fchownat$(EXEEXT) fcntl$(EXEEXT) \
-	fcntl64$(EXEEXT) fdatasync$(EXEEXT) file_handle$(EXEEXT) \
-	file_ioctl$(EXEEXT) finit_module$(EXEEXT) flock$(EXEEXT) \
-	fstat$(EXEEXT) fstat64$(EXEEXT) fstatat64$(EXEEXT) \
-	fstatfs$(EXEEXT) fstatfs64$(EXEEXT) fsync$(EXEEXT) \
-	ftruncate$(EXEEXT) ftruncate64$(EXEEXT) futex$(EXEEXT) \
-	futimesat$(EXEEXT) get_mempolicy$(EXEEXT) getcpu$(EXEEXT) \
-	getcwd$(EXEEXT) getdents$(EXEEXT) getdents64$(EXEEXT) \
-	getegid$(EXEEXT) getegid32$(EXEEXT) geteuid$(EXEEXT) \
-	geteuid32$(EXEEXT) getgid$(EXEEXT) getgid32$(EXEEXT) \
-	getgroups$(EXEEXT) getgroups32$(EXEEXT) getpeername$(EXEEXT) \
-	getpgrp$(EXEEXT) getpid$(EXEEXT) getppid$(EXEEXT) \
-	getrandom$(EXEEXT) getresgid$(EXEEXT) getresgid32$(EXEEXT) \
-	getresuid$(EXEEXT) getresuid32$(EXEEXT) getrlimit$(EXEEXT) \
-	getrusage$(EXEEXT) getsid$(EXEEXT) getsockname$(EXEEXT) \
-	getuid$(EXEEXT) getuid32$(EXEEXT) getxxid$(EXEEXT) \
-	inet-cmsg$(EXEEXT) init_module$(EXEEXT) inotify$(EXEEXT) \
-	inotify_init1$(EXEEXT) ioctl$(EXEEXT) ioctl_block$(EXEEXT) \
-	ioctl_dm$(EXEEXT) ioctl_evdev$(EXEEXT) ioctl_loop$(EXEEXT) \
-	ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) ioctl_scsi$(EXEEXT) \
-	ioctl_sg_io_v3$(EXEEXT) ioctl_sg_io_v4$(EXEEXT) \
-	ioctl_sock_gifconf$(EXEEXT) ioctl_uffdio$(EXEEXT) \
-	ioctl_v4l2$(EXEEXT) ioperm$(EXEEXT) iopl$(EXEEXT) \
-	ioprio$(EXEEXT) ip_mreq$(EXEEXT) ipc$(EXEEXT) ipc_msg$(EXEEXT) \
-	ipc_msgbuf$(EXEEXT) ipc_sem$(EXEEXT) ipc_shm$(EXEEXT) \
-	kcmp$(EXEEXT) kexec_file_load$(EXEEXT) kexec_load$(EXEEXT) \
-	keyctl$(EXEEXT) kill$(EXEEXT) lchown$(EXEEXT) \
-	lchown32$(EXEEXT) link$(EXEEXT) linkat$(EXEEXT) \
-	llseek$(EXEEXT) lookup_dcookie$(EXEEXT) lseek$(EXEEXT) \
-	lstat$(EXEEXT) lstat64$(EXEEXT) madvise$(EXEEXT) \
-	mbind$(EXEEXT) membarrier$(EXEEXT) memfd_create$(EXEEXT) \
-	migrate_pages$(EXEEXT) mincore$(EXEEXT) mkdir$(EXEEXT) \
-	mkdirat$(EXEEXT) mknod$(EXEEXT) mknodat$(EXEEXT) \
-	mlock$(EXEEXT) mlock2$(EXEEXT) mlockall$(EXEEXT) mmap$(EXEEXT) \
-	mmap64$(EXEEXT) mmsg$(EXEEXT) mmsg_name$(EXEEXT) \
-	mount$(EXEEXT) move_pages$(EXEEXT) mq$(EXEEXT) \
-	mq_sendrecv$(EXEEXT) mq_sendrecv-read$(EXEEXT) \
+	fcntl64$(EXEEXT) fdatasync$(EXEEXT) fflush$(EXEEXT) \
+	file_handle$(EXEEXT) file_ioctl$(EXEEXT) finit_module$(EXEEXT) \
+	flock$(EXEEXT) fstat$(EXEEXT) fstat64$(EXEEXT) \
+	fstatat64$(EXEEXT) fstatfs$(EXEEXT) fstatfs64$(EXEEXT) \
+	fsync$(EXEEXT) ftruncate$(EXEEXT) ftruncate64$(EXEEXT) \
+	futex$(EXEEXT) futimesat$(EXEEXT) get_mempolicy$(EXEEXT) \
+	getcpu$(EXEEXT) getcwd$(EXEEXT) getdents$(EXEEXT) \
+	getdents64$(EXEEXT) getegid$(EXEEXT) getegid32$(EXEEXT) \
+	geteuid$(EXEEXT) geteuid32$(EXEEXT) getgid$(EXEEXT) \
+	getgid32$(EXEEXT) getgroups$(EXEEXT) getgroups32$(EXEEXT) \
+	getpeername$(EXEEXT) getpgrp$(EXEEXT) getpid$(EXEEXT) \
+	getppid$(EXEEXT) getrandom$(EXEEXT) getresgid$(EXEEXT) \
+	getresgid32$(EXEEXT) getresuid$(EXEEXT) getresuid32$(EXEEXT) \
+	getrlimit$(EXEEXT) getrusage$(EXEEXT) getsid$(EXEEXT) \
+	getsockname$(EXEEXT) getuid$(EXEEXT) getuid32$(EXEEXT) \
+	getxxid$(EXEEXT) group_req$(EXEEXT) inet-cmsg$(EXEEXT) \
+	init_module$(EXEEXT) inotify$(EXEEXT) inotify_init1$(EXEEXT) \
+	ioctl$(EXEEXT) ioctl_block$(EXEEXT) ioctl_dm$(EXEEXT) \
+	ioctl_evdev$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
+	ioctl_rtc$(EXEEXT) ioctl_scsi$(EXEEXT) ioctl_sg_io_v3$(EXEEXT) \
+	ioctl_sg_io_v4$(EXEEXT) ioctl_sock_gifconf$(EXEEXT) \
+	ioctl_uffdio$(EXEEXT) ioctl_v4l2$(EXEEXT) ioperm$(EXEEXT) \
+	iopl$(EXEEXT) ioprio$(EXEEXT) ip_mreq$(EXEEXT) ipc$(EXEEXT) \
+	ipc_msg$(EXEEXT) ipc_msgbuf$(EXEEXT) ipc_sem$(EXEEXT) \
+	ipc_shm$(EXEEXT) kcmp$(EXEEXT) kexec_file_load$(EXEEXT) \
+	kexec_load$(EXEEXT) keyctl$(EXEEXT) kill$(EXEEXT) \
+	lchown$(EXEEXT) lchown32$(EXEEXT) link$(EXEEXT) \
+	linkat$(EXEEXT) llseek$(EXEEXT) lookup_dcookie$(EXEEXT) \
+	lseek$(EXEEXT) lstat$(EXEEXT) lstat64$(EXEEXT) \
+	madvise$(EXEEXT) mbind$(EXEEXT) membarrier$(EXEEXT) \
+	memfd_create$(EXEEXT) migrate_pages$(EXEEXT) mincore$(EXEEXT) \
+	mkdir$(EXEEXT) mkdirat$(EXEEXT) mknod$(EXEEXT) \
+	mknodat$(EXEEXT) mlock$(EXEEXT) mlock2$(EXEEXT) \
+	mlockall$(EXEEXT) mmap$(EXEEXT) mmap64$(EXEEXT) mmsg$(EXEEXT) \
+	mmsg_name$(EXEEXT) mount$(EXEEXT) move_pages$(EXEEXT) \
+	mq$(EXEEXT) mq_sendrecv$(EXEEXT) mq_sendrecv-read$(EXEEXT) \
 	mq_sendrecv-write$(EXEEXT) msg_control$(EXEEXT) \
 	msg_name$(EXEEXT) munlockall$(EXEEXT) nanosleep$(EXEEXT) \
 	net-icmp_filter$(EXEEXT) net-sockaddr$(EXEEXT) \
 	net-y-unix$(EXEEXT) net-yy-inet$(EXEEXT) \
 	net-yy-netlink$(EXEEXT) net-yy-unix$(EXEEXT) \
-	netlink_audit$(EXEEXT) netlink_generic$(EXEEXT) \
+	netlink_audit$(EXEEXT) netlink_crypto$(EXEEXT) \
+	netlink_generic$(EXEEXT) netlink_kobject_uevent$(EXEEXT) \
 	netlink_netfilter$(EXEEXT) netlink_protocol$(EXEEXT) \
 	netlink_route$(EXEEXT) netlink_selinux$(EXEEXT) \
 	netlink_sock_diag$(EXEEXT) netlink_xfrm$(EXEEXT) \
 	newfstatat$(EXEEXT) nlattr$(EXEEXT) \
-	nlattr_inet_diag_msg$(EXEEXT) nlattr_netlink_diag_msg$(EXEEXT) \
+	nlattr_crypto_user_alg$(EXEEXT) nlattr_br_port_msg$(EXEEXT) \
+	nlattr_dcbmsg$(EXEEXT) nlattr_fib_rule_hdr$(EXEEXT) \
+	nlattr_ifaddrlblmsg$(EXEEXT) nlattr_ifaddrmsg$(EXEEXT) \
+	nlattr_ifinfomsg$(EXEEXT) nlattr_ifla_brport$(EXEEXT) \
+	nlattr_ifla_port$(EXEEXT) nlattr_ifla_xdp$(EXEEXT) \
+	nlattr_inet_diag_msg$(EXEEXT) \
+	nlattr_inet_diag_req_compat$(EXEEXT) \
+	nlattr_inet_diag_req_v2$(EXEEXT) nlattr_ndmsg$(EXEEXT) \
+	nlattr_ndtmsg$(EXEEXT) nlattr_netconfmsg$(EXEEXT) \
+	nlattr_netlink_diag_msg$(EXEEXT) nlattr_nlmsgerr$(EXEEXT) \
+	nlattr_packet_diag_msg$(EXEEXT) nlattr_rtgenmsg$(EXEEXT) \
+	nlattr_rtmsg$(EXEEXT) nlattr_smc_diag_msg$(EXEEXT) \
+	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
 	oldfstat$(EXEEXT) oldlstat$(EXEEXT) oldselect$(EXEEXT) \
 	oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
@@ -283,15 +301,20 @@
 	prctl-securebits$(EXEEXT) prctl-tid_address$(EXEEXT) \
 	prctl-tsc$(EXEEXT) pread64-pwrite64$(EXEEXT) preadv$(EXEEXT) \
 	preadv-pwritev$(EXEEXT) preadv2-pwritev2$(EXEEXT) \
-	printstr$(EXEEXT) prlimit64$(EXEEXT) process_vm_readv$(EXEEXT) \
-	process_vm_writev$(EXEEXT) pselect6$(EXEEXT) ptrace$(EXEEXT) \
-	pwritev$(EXEEXT) quotactl$(EXEEXT) quotactl-xfs$(EXEEXT) \
-	read-write$(EXEEXT) readahead$(EXEEXT) readdir$(EXEEXT) \
-	readlink$(EXEEXT) readlinkat$(EXEEXT) readv$(EXEEXT) \
-	reboot$(EXEEXT) recvfrom$(EXEEXT) recvmmsg-timeout$(EXEEXT) \
-	recvmsg$(EXEEXT) remap_file_pages$(EXEEXT) rename$(EXEEXT) \
-	renameat$(EXEEXT) renameat2$(EXEEXT) request_key$(EXEEXT) \
-	rmdir$(EXEEXT) rt_sigaction$(EXEEXT) rt_sigpending$(EXEEXT) \
+	printpath-umovestr$(EXEEXT) \
+	printpath-umovestr-peekdata$(EXEEXT) \
+	printpath-umovestr-undumpable$(EXEEXT) printstr$(EXEEXT) \
+	printstrn-umoven$(EXEEXT) printstrn-umoven-peekdata$(EXEEXT) \
+	printstrn-umoven-undumpable$(EXEEXT) prlimit64$(EXEEXT) \
+	process_vm_readv$(EXEEXT) process_vm_writev$(EXEEXT) \
+	pselect6$(EXEEXT) ptrace$(EXEEXT) pwritev$(EXEEXT) \
+	quotactl$(EXEEXT) quotactl-xfs$(EXEEXT) read-write$(EXEEXT) \
+	readahead$(EXEEXT) readdir$(EXEEXT) readlink$(EXEEXT) \
+	readlinkat$(EXEEXT) readv$(EXEEXT) reboot$(EXEEXT) \
+	recvfrom$(EXEEXT) recvmmsg-timeout$(EXEEXT) recvmsg$(EXEEXT) \
+	remap_file_pages$(EXEEXT) rename$(EXEEXT) renameat$(EXEEXT) \
+	renameat2$(EXEEXT) request_key$(EXEEXT) rmdir$(EXEEXT) \
+	rt_sigaction$(EXEEXT) rt_sigpending$(EXEEXT) \
 	rt_sigprocmask$(EXEEXT) rt_sigqueueinfo$(EXEEXT) \
 	rt_sigreturn$(EXEEXT) rt_sigsuspend$(EXEEXT) \
 	rt_sigtimedwait$(EXEEXT) rt_tgsigqueueinfo$(EXEEXT) \
@@ -311,23 +334,25 @@
 	shmxt$(EXEEXT) shutdown$(EXEEXT) sigaction$(EXEEXT) \
 	sigaltstack$(EXEEXT) siginfo$(EXEEXT) signal$(EXEEXT) \
 	signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
-	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) socketcall$(EXEEXT) \
-	splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
-	statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
-	sxetmask$(EXEEXT) symlink$(EXEEXT) symlinkat$(EXEEXT) \
-	sync$(EXEEXT) sync_file_range$(EXEEXT) \
-	sync_file_range2$(EXEEXT) sysinfo$(EXEEXT) syslog$(EXEEXT) \
-	tee$(EXEEXT) time$(EXEEXT) timer_create$(EXEEXT) \
-	timer_xettime$(EXEEXT) timerfd_xettime$(EXEEXT) times$(EXEEXT) \
-	times-fail$(EXEEXT) truncate$(EXEEXT) truncate64$(EXEEXT) \
-	ugetrlimit$(EXEEXT) uio$(EXEEXT) umask$(EXEEXT) \
-	umount$(EXEEXT) umount2$(EXEEXT) umoven-illptr$(EXEEXT) \
-	umovestr$(EXEEXT) umovestr-illptr$(EXEEXT) umovestr2$(EXEEXT) \
-	umovestr3$(EXEEXT) uname$(EXEEXT) unlink$(EXEEXT) \
-	unlinkat$(EXEEXT) unshare$(EXEEXT) userfaultfd$(EXEEXT) \
-	ustat$(EXEEXT) utime$(EXEEXT) utimensat$(EXEEXT) \
-	utimes$(EXEEXT) vhangup$(EXEEXT) vmsplice$(EXEEXT) \
-	wait4$(EXEEXT) waitid$(EXEEXT) waitpid$(EXEEXT) xattr$(EXEEXT) \
+	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
+	so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
+	socketcall$(EXEEXT) splice$(EXEEXT) stat$(EXEEXT) \
+	stat64$(EXEEXT) statfs$(EXEEXT) statfs64$(EXEEXT) \
+	statx$(EXEEXT) swap$(EXEEXT) sxetmask$(EXEEXT) \
+	symlink$(EXEEXT) symlinkat$(EXEEXT) sync$(EXEEXT) \
+	sync_file_range$(EXEEXT) sync_file_range2$(EXEEXT) \
+	sysinfo$(EXEEXT) syslog$(EXEEXT) tee$(EXEEXT) time$(EXEEXT) \
+	timer_create$(EXEEXT) timer_xettime$(EXEEXT) \
+	timerfd_xettime$(EXEEXT) times$(EXEEXT) times-fail$(EXEEXT) \
+	truncate$(EXEEXT) truncate64$(EXEEXT) ugetrlimit$(EXEEXT) \
+	uio$(EXEEXT) umask$(EXEEXT) umount$(EXEEXT) umount2$(EXEEXT) \
+	umoven-illptr$(EXEEXT) umovestr$(EXEEXT) \
+	umovestr-illptr$(EXEEXT) umovestr2$(EXEEXT) umovestr3$(EXEEXT) \
+	uname$(EXEEXT) unlink$(EXEEXT) unlinkat$(EXEEXT) \
+	unshare$(EXEEXT) userfaultfd$(EXEEXT) ustat$(EXEEXT) \
+	utime$(EXEEXT) utimensat$(EXEEXT) utimes$(EXEEXT) \
+	vhangup$(EXEEXT) vmsplice$(EXEEXT) wait4$(EXEEXT) \
+	waitid$(EXEEXT) waitpid$(EXEEXT) xattr$(EXEEXT) \
 	xattr-strings$(EXEEXT) xet_robust_list$(EXEEXT) \
 	xetitimer$(EXEEXT) xetpgid$(EXEEXT) xetpriority$(EXEEXT) \
 	xettimeofday$(EXEEXT)
@@ -394,6 +419,10 @@
 bpf_OBJECTS = bpf.$(OBJEXT)
 bpf_LDADD = $(LDADD)
 bpf_DEPENDENCIES = libtests.a
+bpf_v_SOURCES = bpf-v.c
+bpf_v_OBJECTS = bpf-v.$(OBJEXT)
+bpf_v_LDADD = $(LDADD)
+bpf_v_DEPENDENCIES = libtests.a
 brk_SOURCES = brk.c
 brk_OBJECTS = brk.$(OBJEXT)
 brk_LDADD = $(LDADD)
@@ -437,6 +466,14 @@
 clock_xettime_SOURCES = clock_xettime.c
 clock_xettime_OBJECTS = clock_xettime.$(OBJEXT)
 clock_xettime_DEPENDENCIES = $(LDADD)
+clone_parent_SOURCES = clone_parent.c
+clone_parent_OBJECTS = clone_parent.$(OBJEXT)
+clone_parent_LDADD = $(LDADD)
+clone_parent_DEPENDENCIES = libtests.a
+clone_ptrace_SOURCES = clone_ptrace.c
+clone_ptrace_OBJECTS = clone_ptrace.$(OBJEXT)
+clone_ptrace_LDADD = $(LDADD)
+clone_ptrace_DEPENDENCIES = libtests.a
 copy_file_range_SOURCES = copy_file_range.c
 copy_file_range_OBJECTS = copy_file_range.$(OBJEXT)
 copy_file_range_LDADD = $(LDADD)
@@ -568,6 +605,10 @@
 fdatasync_OBJECTS = fdatasync.$(OBJEXT)
 fdatasync_LDADD = $(LDADD)
 fdatasync_DEPENDENCIES = libtests.a
+fflush_SOURCES = fflush.c
+fflush_OBJECTS = fflush.$(OBJEXT)
+fflush_LDADD = $(LDADD)
+fflush_DEPENDENCIES = libtests.a
 file_handle_SOURCES = file_handle.c
 file_handle_OBJECTS = file_handle.$(OBJEXT)
 file_handle_LDADD = $(LDADD)
@@ -751,6 +792,10 @@
 getxxid_OBJECTS = getxxid.$(OBJEXT)
 getxxid_LDADD = $(LDADD)
 getxxid_DEPENDENCIES = libtests.a
+group_req_SOURCES = group_req.c
+group_req_OBJECTS = group_req.$(OBJEXT)
+group_req_LDADD = $(LDADD)
+group_req_DEPENDENCIES = libtests.a
 inet_cmsg_SOURCES = inet-cmsg.c
 inet_cmsg_OBJECTS = inet-cmsg.$(OBJEXT)
 inet_cmsg_LDADD = $(LDADD)
@@ -883,6 +928,10 @@
 ipc_shm_OBJECTS = ipc_shm.$(OBJEXT)
 ipc_shm_LDADD = $(LDADD)
 ipc_shm_DEPENDENCIES = libtests.a
+is_linux_mips_n64_SOURCES = is_linux_mips_n64.c
+is_linux_mips_n64_OBJECTS = is_linux_mips_n64.$(OBJEXT)
+is_linux_mips_n64_LDADD = $(LDADD)
+is_linux_mips_n64_DEPENDENCIES = libtests.a
 kcmp_SOURCES = kcmp.c
 kcmp_OBJECTS = kcmp.$(OBJEXT)
 kcmp_LDADD = $(LDADD)
@@ -1091,6 +1140,10 @@
 netlink_audit_OBJECTS = netlink_audit.$(OBJEXT)
 netlink_audit_LDADD = $(LDADD)
 netlink_audit_DEPENDENCIES = libtests.a
+netlink_crypto_SOURCES = netlink_crypto.c
+netlink_crypto_OBJECTS = netlink_crypto.$(OBJEXT)
+netlink_crypto_LDADD = $(LDADD)
+netlink_crypto_DEPENDENCIES = libtests.a
 netlink_generic_SOURCES = netlink_generic.c
 netlink_generic_OBJECTS = netlink_generic.$(OBJEXT)
 netlink_generic_LDADD = $(LDADD)
@@ -1099,6 +1152,10 @@
 netlink_inet_diag_OBJECTS = netlink_inet_diag.$(OBJEXT)
 netlink_inet_diag_LDADD = $(LDADD)
 netlink_inet_diag_DEPENDENCIES = libtests.a
+netlink_kobject_uevent_SOURCES = netlink_kobject_uevent.c
+netlink_kobject_uevent_OBJECTS = netlink_kobject_uevent.$(OBJEXT)
+netlink_kobject_uevent_LDADD = $(LDADD)
+netlink_kobject_uevent_DEPENDENCIES = libtests.a
 netlink_netfilter_SOURCES = netlink_netfilter.c
 netlink_netfilter_OBJECTS = netlink_netfilter.$(OBJEXT)
 netlink_netfilter_LDADD = $(LDADD)
@@ -1139,14 +1196,103 @@
 nlattr_OBJECTS = nlattr.$(OBJEXT)
 nlattr_LDADD = $(LDADD)
 nlattr_DEPENDENCIES = libtests.a
+nlattr_br_port_msg_SOURCES = nlattr_br_port_msg.c
+nlattr_br_port_msg_OBJECTS = nlattr_br_port_msg.$(OBJEXT)
+nlattr_br_port_msg_LDADD = $(LDADD)
+nlattr_br_port_msg_DEPENDENCIES = libtests.a
+nlattr_crypto_user_alg_SOURCES = nlattr_crypto_user_alg.c
+nlattr_crypto_user_alg_OBJECTS = nlattr_crypto_user_alg.$(OBJEXT)
+nlattr_crypto_user_alg_LDADD = $(LDADD)
+nlattr_crypto_user_alg_DEPENDENCIES = libtests.a
+nlattr_dcbmsg_SOURCES = nlattr_dcbmsg.c
+nlattr_dcbmsg_OBJECTS = nlattr_dcbmsg.$(OBJEXT)
+nlattr_dcbmsg_LDADD = $(LDADD)
+nlattr_dcbmsg_DEPENDENCIES = libtests.a
+nlattr_fib_rule_hdr_SOURCES = nlattr_fib_rule_hdr.c
+nlattr_fib_rule_hdr_OBJECTS = nlattr_fib_rule_hdr.$(OBJEXT)
+nlattr_fib_rule_hdr_LDADD = $(LDADD)
+nlattr_fib_rule_hdr_DEPENDENCIES = libtests.a
+nlattr_ifaddrlblmsg_SOURCES = nlattr_ifaddrlblmsg.c
+nlattr_ifaddrlblmsg_OBJECTS = nlattr_ifaddrlblmsg.$(OBJEXT)
+nlattr_ifaddrlblmsg_LDADD = $(LDADD)
+nlattr_ifaddrlblmsg_DEPENDENCIES = libtests.a
+nlattr_ifaddrmsg_SOURCES = nlattr_ifaddrmsg.c
+nlattr_ifaddrmsg_OBJECTS = nlattr_ifaddrmsg.$(OBJEXT)
+nlattr_ifaddrmsg_LDADD = $(LDADD)
+nlattr_ifaddrmsg_DEPENDENCIES = libtests.a
+nlattr_ifinfomsg_SOURCES = nlattr_ifinfomsg.c
+nlattr_ifinfomsg_OBJECTS = nlattr_ifinfomsg.$(OBJEXT)
+nlattr_ifinfomsg_LDADD = $(LDADD)
+nlattr_ifinfomsg_DEPENDENCIES = libtests.a
+nlattr_ifla_brport_SOURCES = nlattr_ifla_brport.c
+nlattr_ifla_brport_OBJECTS = nlattr_ifla_brport.$(OBJEXT)
+nlattr_ifla_brport_LDADD = $(LDADD)
+nlattr_ifla_brport_DEPENDENCIES = libtests.a
+nlattr_ifla_port_SOURCES = nlattr_ifla_port.c
+nlattr_ifla_port_OBJECTS = nlattr_ifla_port.$(OBJEXT)
+nlattr_ifla_port_LDADD = $(LDADD)
+nlattr_ifla_port_DEPENDENCIES = libtests.a
+nlattr_ifla_xdp_SOURCES = nlattr_ifla_xdp.c
+nlattr_ifla_xdp_OBJECTS = nlattr_ifla_xdp.$(OBJEXT)
+nlattr_ifla_xdp_LDADD = $(LDADD)
+nlattr_ifla_xdp_DEPENDENCIES = libtests.a
 nlattr_inet_diag_msg_SOURCES = nlattr_inet_diag_msg.c
 nlattr_inet_diag_msg_OBJECTS = nlattr_inet_diag_msg.$(OBJEXT)
 nlattr_inet_diag_msg_LDADD = $(LDADD)
 nlattr_inet_diag_msg_DEPENDENCIES = libtests.a
+nlattr_inet_diag_req_compat_SOURCES = nlattr_inet_diag_req_compat.c
+nlattr_inet_diag_req_compat_OBJECTS =  \
+	nlattr_inet_diag_req_compat.$(OBJEXT)
+nlattr_inet_diag_req_compat_LDADD = $(LDADD)
+nlattr_inet_diag_req_compat_DEPENDENCIES = libtests.a
+nlattr_inet_diag_req_v2_SOURCES = nlattr_inet_diag_req_v2.c
+nlattr_inet_diag_req_v2_OBJECTS = nlattr_inet_diag_req_v2.$(OBJEXT)
+nlattr_inet_diag_req_v2_LDADD = $(LDADD)
+nlattr_inet_diag_req_v2_DEPENDENCIES = libtests.a
+nlattr_ndmsg_SOURCES = nlattr_ndmsg.c
+nlattr_ndmsg_OBJECTS = nlattr_ndmsg.$(OBJEXT)
+nlattr_ndmsg_LDADD = $(LDADD)
+nlattr_ndmsg_DEPENDENCIES = libtests.a
+nlattr_ndtmsg_SOURCES = nlattr_ndtmsg.c
+nlattr_ndtmsg_OBJECTS = nlattr_ndtmsg.$(OBJEXT)
+nlattr_ndtmsg_LDADD = $(LDADD)
+nlattr_ndtmsg_DEPENDENCIES = libtests.a
+nlattr_netconfmsg_SOURCES = nlattr_netconfmsg.c
+nlattr_netconfmsg_OBJECTS = nlattr_netconfmsg.$(OBJEXT)
+nlattr_netconfmsg_LDADD = $(LDADD)
+nlattr_netconfmsg_DEPENDENCIES = libtests.a
 nlattr_netlink_diag_msg_SOURCES = nlattr_netlink_diag_msg.c
 nlattr_netlink_diag_msg_OBJECTS = nlattr_netlink_diag_msg.$(OBJEXT)
 nlattr_netlink_diag_msg_LDADD = $(LDADD)
 nlattr_netlink_diag_msg_DEPENDENCIES = libtests.a
+nlattr_nlmsgerr_SOURCES = nlattr_nlmsgerr.c
+nlattr_nlmsgerr_OBJECTS = nlattr_nlmsgerr.$(OBJEXT)
+nlattr_nlmsgerr_LDADD = $(LDADD)
+nlattr_nlmsgerr_DEPENDENCIES = libtests.a
+nlattr_packet_diag_msg_SOURCES = nlattr_packet_diag_msg.c
+nlattr_packet_diag_msg_OBJECTS = nlattr_packet_diag_msg.$(OBJEXT)
+nlattr_packet_diag_msg_LDADD = $(LDADD)
+nlattr_packet_diag_msg_DEPENDENCIES = libtests.a
+nlattr_rtgenmsg_SOURCES = nlattr_rtgenmsg.c
+nlattr_rtgenmsg_OBJECTS = nlattr_rtgenmsg.$(OBJEXT)
+nlattr_rtgenmsg_LDADD = $(LDADD)
+nlattr_rtgenmsg_DEPENDENCIES = libtests.a
+nlattr_rtmsg_SOURCES = nlattr_rtmsg.c
+nlattr_rtmsg_OBJECTS = nlattr_rtmsg.$(OBJEXT)
+nlattr_rtmsg_LDADD = $(LDADD)
+nlattr_rtmsg_DEPENDENCIES = libtests.a
+nlattr_smc_diag_msg_SOURCES = nlattr_smc_diag_msg.c
+nlattr_smc_diag_msg_OBJECTS = nlattr_smc_diag_msg.$(OBJEXT)
+nlattr_smc_diag_msg_LDADD = $(LDADD)
+nlattr_smc_diag_msg_DEPENDENCIES = libtests.a
+nlattr_tcamsg_SOURCES = nlattr_tcamsg.c
+nlattr_tcamsg_OBJECTS = nlattr_tcamsg.$(OBJEXT)
+nlattr_tcamsg_LDADD = $(LDADD)
+nlattr_tcamsg_DEPENDENCIES = libtests.a
+nlattr_tcmsg_SOURCES = nlattr_tcmsg.c
+nlattr_tcmsg_OBJECTS = nlattr_tcmsg.$(OBJEXT)
+nlattr_tcmsg_LDADD = $(LDADD)
+nlattr_tcmsg_DEPENDENCIES = libtests.a
 nlattr_unix_diag_msg_SOURCES = nlattr_unix_diag_msg.c
 nlattr_unix_diag_msg_OBJECTS = nlattr_unix_diag_msg.$(OBJEXT)
 nlattr_unix_diag_msg_LDADD = $(LDADD)
@@ -1305,10 +1451,39 @@
 print_maxfd_OBJECTS = print_maxfd.$(OBJEXT)
 print_maxfd_LDADD = $(LDADD)
 print_maxfd_DEPENDENCIES = libtests.a
+printpath_umovestr_SOURCES = printpath-umovestr.c
+printpath_umovestr_OBJECTS = printpath-umovestr.$(OBJEXT)
+printpath_umovestr_LDADD = $(LDADD)
+printpath_umovestr_DEPENDENCIES = libtests.a
+printpath_umovestr_peekdata_SOURCES = printpath-umovestr-peekdata.c
+printpath_umovestr_peekdata_OBJECTS =  \
+	printpath-umovestr-peekdata.$(OBJEXT)
+printpath_umovestr_peekdata_LDADD = $(LDADD)
+printpath_umovestr_peekdata_DEPENDENCIES = libtests.a
+printpath_umovestr_undumpable_SOURCES =  \
+	printpath-umovestr-undumpable.c
+printpath_umovestr_undumpable_OBJECTS =  \
+	printpath-umovestr-undumpable.$(OBJEXT)
+printpath_umovestr_undumpable_LDADD = $(LDADD)
+printpath_umovestr_undumpable_DEPENDENCIES = libtests.a
 printstr_SOURCES = printstr.c
 printstr_OBJECTS = printstr.$(OBJEXT)
 printstr_LDADD = $(LDADD)
 printstr_DEPENDENCIES = libtests.a
+printstrn_umoven_SOURCES = printstrn-umoven.c
+printstrn_umoven_OBJECTS = printstrn-umoven.$(OBJEXT)
+printstrn_umoven_LDADD = $(LDADD)
+printstrn_umoven_DEPENDENCIES = libtests.a
+printstrn_umoven_peekdata_SOURCES = printstrn-umoven-peekdata.c
+printstrn_umoven_peekdata_OBJECTS =  \
+	printstrn-umoven-peekdata.$(OBJEXT)
+printstrn_umoven_peekdata_LDADD = $(LDADD)
+printstrn_umoven_peekdata_DEPENDENCIES = libtests.a
+printstrn_umoven_undumpable_SOURCES = printstrn-umoven-undumpable.c
+printstrn_umoven_undumpable_OBJECTS =  \
+	printstrn-umoven-undumpable.$(OBJEXT)
+printstrn_umoven_undumpable_LDADD = $(LDADD)
+printstrn_umoven_undumpable_DEPENDENCIES = libtests.a
 prlimit64_SOURCES = prlimit64.c
 prlimit64_OBJECTS = prlimit64.$(OBJEXT)
 prlimit64_LDADD = $(LDADD)
@@ -1685,6 +1860,18 @@
 sleep_OBJECTS = sleep.$(OBJEXT)
 sleep_LDADD = $(LDADD)
 sleep_DEPENDENCIES = libtests.a
+so_linger_SOURCES = so_linger.c
+so_linger_OBJECTS = so_linger.$(OBJEXT)
+so_linger_LDADD = $(LDADD)
+so_linger_DEPENDENCIES = libtests.a
+so_peercred_SOURCES = so_peercred.c
+so_peercred_OBJECTS = so_peercred.$(OBJEXT)
+so_peercred_LDADD = $(LDADD)
+so_peercred_DEPENDENCIES = libtests.a
+sock_filter_v_SOURCES = sock_filter-v.c
+sock_filter_v_OBJECTS = sock_filter-v.$(OBJEXT)
+sock_filter_v_LDADD = $(LDADD)
+sock_filter_v_DEPENDENCIES = libtests.a
 socketcall_SOURCES = socketcall.c
 socketcall_OBJECTS = socketcall.$(OBJEXT)
 socketcall_LDADD = $(LDADD)
@@ -1981,16 +2168,17 @@
 SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
 	access.c acct.c add_key.c adjtimex.c aio.c alarm.c answer.c \
 	attach-f-p.c attach-f-p-cmd.c attach-p-cmd-cmd.c \
-	attach-p-cmd-p.c block_reset_raise_run.c bpf.c brk.c btrfs.c \
-	caps.c caps-abbrev.c chmod.c chown.c chown32.c chroot.c \
-	clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	copy_file_range.c count-f.c creat.c delete_module.c dup.c \
-	dup2.c dup3.c epoll_create.c epoll_create1.c epoll_ctl.c \
-	epoll_pwait.c epoll_wait.c erestartsys.c eventfd.c execve.c \
-	execve-v.c execveat.c execveat-v.c faccessat.c fadvise64.c \
-	fadvise64_64.c fallocate.c fanotify_init.c fanotify_mark.c \
-	fchdir.c fchmod.c fchmodat.c fchown.c fchown32.c fchownat.c \
-	fcntl.c fcntl64.c fdatasync.c file_handle.c file_ioctl.c \
+	attach-p-cmd-p.c block_reset_raise_run.c bpf.c bpf-v.c brk.c \
+	btrfs.c caps.c caps-abbrev.c chmod.c chown.c chown32.c \
+	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
+	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
+	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
+	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
+	fallocate.c fanotify_init.c fanotify_mark.c fchdir.c fchmod.c \
+	fchmodat.c fchown.c fchown32.c fchownat.c fcntl.c fcntl64.c \
+	fdatasync.c fflush.c file_handle.c file_ioctl.c \
 	filter-unavailable.c finit_module.c flock.c fork-f.c fstat.c \
 	fstat64.c fstatat64.c fstatfs.c fstatfs64.c fsync.c \
 	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
@@ -1999,7 +2187,7 @@
 	getgroups.c getgroups32.c getpeername.c getpgrp.c getpid.c \
 	getppid.c getrandom.c getresgid.c getresgid32.c getresuid.c \
 	getresuid32.c getrlimit.c getrusage.c getsid.c getsockname.c \
-	gettid.c getuid.c getuid32.c getxxid.c inet-cmsg.c \
+	gettid.c getuid.c getuid32.c getxxid.c group_req.c inet-cmsg.c \
 	init_module.c inotify.c inotify_init1.c int_0x80.c ioctl.c \
 	ioctl_block.c ioctl_dm.c ioctl_dm-v.c ioctl_evdev.c \
 	ioctl_evdev-v.c ioctl_loop.c ioctl_loop-nv.c ioctl_loop-v.c \
@@ -2007,56 +2195,69 @@
 	ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
 	ioctl_sock_gifconf.c ioctl_uffdio.c ioctl_v4l2.c ioperm.c \
 	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msgbuf.c \
-	ipc_sem.c ipc_shm.c kcmp.c kexec_file_load.c kexec_load.c \
-	keyctl.c kill.c ksysent.c lchown.c lchown32.c link.c linkat.c \
-	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
-	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
-	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
-	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
-	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
-	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
-	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
-	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
-	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
-	netlink_audit.c netlink_generic.c netlink_inet_diag.c \
-	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
-	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
-	netlink_unix_diag.c netlink_xfrm.c newfstatat.c nlattr.c \
-	nlattr_inet_diag_msg.c nlattr_netlink_diag_msg.c \
-	nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c oldfstat.c \
-	oldlstat.c oldselect.c oldstat.c open.c openat.c osf_utimes.c \
-	pause.c pc.c perf_event_open.c perf_event_open_nonverbose.c \
-	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
-	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
-	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
-	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c \
+	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
+	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
+	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
+	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
+	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
+	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
+	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
+	munlockall.c nanosleep.c net-accept-connect.c \
+	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
+	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
+	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
+	netlink_kobject_uevent.c netlink_netfilter.c \
+	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
+	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
+	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
+	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
+	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
+	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
+	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
+	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
+	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
+	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
+	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
+	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
+	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
+	osf_utimes.c pause.c pc.c perf_event_open.c \
+	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
+	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
+	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
+	prctl-dumpable.c prctl-name.c prctl-no-args.c \
+	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
-	preadv2-pwritev2.c print_maxfd.c printstr.c prlimit64.c \
-	process_vm_readv.c process_vm_writev.c pselect6.c ptrace.c \
-	pwritev.c qual_fault.c qual_inject-error-signal.c \
-	qual_inject-retval.c qual_inject-signal.c qual_signal.c \
-	quotactl.c quotactl-v.c quotactl-xfs.c quotactl-xfs-v.c \
-	read-write.c readahead.c readdir.c readlink.c readlinkat.c \
-	readv.c reboot.c recvfrom.c recvmmsg-timeout.c recvmsg.c \
-	redirect-fds.c remap_file_pages.c rename.c renameat.c \
-	renameat2.c request_key.c restart_syscall.c rmdir.c \
-	rt_sigaction.c rt_sigpending.c rt_sigprocmask.c \
-	rt_sigqueueinfo.c rt_sigreturn.c rt_sigsuspend.c \
-	rt_sigtimedwait.c rt_tgsigqueueinfo.c run_expect_termsig.c \
-	sched_get_priority_mxx.c sched_rr_get_interval.c \
-	sched_xetaffinity.c sched_xetattr.c sched_xetparam.c \
-	sched_xetscheduler.c sched_yield.c scm_rights.c \
-	seccomp-filter.c seccomp-filter-v.c seccomp-strict.c select.c \
-	semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c setdomainname.c setfsgid.c setfsgid32.c \
-	setfsuid.c setfsuid32.c setgid.c setgid32.c setgroups.c \
-	setgroups32.c sethostname.c setns.c setregid.c setregid32.c \
-	setresgid.c setresgid32.c setresuid.c setresuid32.c setreuid.c \
-	setreuid32.c setrlimit.c setuid.c setuid32.c shmxt.c \
-	shutdown.c sigaction.c sigaltstack.c siginfo.c signal.c \
-	signal_receive.c signalfd4.c sigpending.c sigprocmask.c \
-	sigreturn.c sigsuspend.c sleep.c socketcall.c splice.c \
+	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
+	printpath-umovestr-peekdata.c printpath-umovestr-undumpable.c \
+	printstr.c printstrn-umoven.c printstrn-umoven-peekdata.c \
+	printstrn-umoven-undumpable.c prlimit64.c process_vm_readv.c \
+	process_vm_writev.c pselect6.c ptrace.c pwritev.c qual_fault.c \
+	qual_inject-error-signal.c qual_inject-retval.c \
+	qual_inject-signal.c qual_signal.c quotactl.c quotactl-v.c \
+	quotactl-xfs.c quotactl-xfs-v.c read-write.c readahead.c \
+	readdir.c readlink.c readlinkat.c readv.c reboot.c recvfrom.c \
+	recvmmsg-timeout.c recvmsg.c redirect-fds.c remap_file_pages.c \
+	rename.c renameat.c renameat2.c request_key.c \
+	restart_syscall.c rmdir.c rt_sigaction.c rt_sigpending.c \
+	rt_sigprocmask.c rt_sigqueueinfo.c rt_sigreturn.c \
+	rt_sigsuspend.c rt_sigtimedwait.c rt_tgsigqueueinfo.c \
+	run_expect_termsig.c sched_get_priority_mxx.c \
+	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
+	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
+	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
+	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
+	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	setfsgid32.c setfsuid.c setfsuid32.c setgid.c setgid32.c \
+	setgroups.c setgroups32.c sethostname.c setns.c setregid.c \
+	setregid32.c setresgid.c setresgid32.c setresuid.c \
+	setresuid32.c setreuid.c setreuid32.c setrlimit.c setuid.c \
+	setuid32.c shmxt.c shutdown.c sigaction.c sigaltstack.c \
+	siginfo.c signal.c signal_receive.c signalfd4.c sigpending.c \
+	sigprocmask.c sigreturn.c sigsuspend.c sleep.c so_linger.c \
+	so_peercred.c sock_filter-v.c socketcall.c splice.c \
 	$(stack_fcall_SOURCES) stat.c stat64.c statfs.c statfs64.c \
 	statx.c swap.c sxetmask.c symlink.c symlinkat.c sync.c \
 	sync_file_range.c sync_file_range2.c sysinfo.c syslog.c tee.c \
@@ -2073,16 +2274,17 @@
 DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
 	access.c acct.c add_key.c adjtimex.c aio.c alarm.c answer.c \
 	attach-f-p.c attach-f-p-cmd.c attach-p-cmd-cmd.c \
-	attach-p-cmd-p.c block_reset_raise_run.c bpf.c brk.c btrfs.c \
-	caps.c caps-abbrev.c chmod.c chown.c chown32.c chroot.c \
-	clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	copy_file_range.c count-f.c creat.c delete_module.c dup.c \
-	dup2.c dup3.c epoll_create.c epoll_create1.c epoll_ctl.c \
-	epoll_pwait.c epoll_wait.c erestartsys.c eventfd.c execve.c \
-	execve-v.c execveat.c execveat-v.c faccessat.c fadvise64.c \
-	fadvise64_64.c fallocate.c fanotify_init.c fanotify_mark.c \
-	fchdir.c fchmod.c fchmodat.c fchown.c fchown32.c fchownat.c \
-	fcntl.c fcntl64.c fdatasync.c file_handle.c file_ioctl.c \
+	attach-p-cmd-p.c block_reset_raise_run.c bpf.c bpf-v.c brk.c \
+	btrfs.c caps.c caps-abbrev.c chmod.c chown.c chown32.c \
+	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
+	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
+	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
+	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
+	fallocate.c fanotify_init.c fanotify_mark.c fchdir.c fchmod.c \
+	fchmodat.c fchown.c fchown32.c fchownat.c fcntl.c fcntl64.c \
+	fdatasync.c fflush.c file_handle.c file_ioctl.c \
 	filter-unavailable.c finit_module.c flock.c fork-f.c fstat.c \
 	fstat64.c fstatat64.c fstatfs.c fstatfs64.c fsync.c \
 	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
@@ -2091,7 +2293,7 @@
 	getgroups.c getgroups32.c getpeername.c getpgrp.c getpid.c \
 	getppid.c getrandom.c getresgid.c getresgid32.c getresuid.c \
 	getresuid32.c getrlimit.c getrusage.c getsid.c getsockname.c \
-	gettid.c getuid.c getuid32.c getxxid.c inet-cmsg.c \
+	gettid.c getuid.c getuid32.c getxxid.c group_req.c inet-cmsg.c \
 	init_module.c inotify.c inotify_init1.c int_0x80.c ioctl.c \
 	ioctl_block.c ioctl_dm.c ioctl_dm-v.c ioctl_evdev.c \
 	ioctl_evdev-v.c ioctl_loop.c ioctl_loop-nv.c ioctl_loop-v.c \
@@ -2099,56 +2301,69 @@
 	ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
 	ioctl_sock_gifconf.c ioctl_uffdio.c ioctl_v4l2.c ioperm.c \
 	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msgbuf.c \
-	ipc_sem.c ipc_shm.c kcmp.c kexec_file_load.c kexec_load.c \
-	keyctl.c kill.c ksysent.c lchown.c lchown32.c link.c linkat.c \
-	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
-	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
-	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
-	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
-	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
-	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
-	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
-	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
-	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
-	netlink_audit.c netlink_generic.c netlink_inet_diag.c \
-	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
-	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
-	netlink_unix_diag.c netlink_xfrm.c newfstatat.c nlattr.c \
-	nlattr_inet_diag_msg.c nlattr_netlink_diag_msg.c \
-	nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c oldfstat.c \
-	oldlstat.c oldselect.c oldstat.c open.c openat.c osf_utimes.c \
-	pause.c pc.c perf_event_open.c perf_event_open_nonverbose.c \
-	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
-	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
-	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
-	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c \
+	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
+	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
+	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
+	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
+	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
+	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
+	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
+	munlockall.c nanosleep.c net-accept-connect.c \
+	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
+	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
+	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
+	netlink_kobject_uevent.c netlink_netfilter.c \
+	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
+	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
+	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
+	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
+	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
+	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
+	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
+	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
+	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
+	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
+	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
+	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
+	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
+	osf_utimes.c pause.c pc.c perf_event_open.c \
+	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
+	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
+	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
+	prctl-dumpable.c prctl-name.c prctl-no-args.c \
+	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
-	preadv2-pwritev2.c print_maxfd.c printstr.c prlimit64.c \
-	process_vm_readv.c process_vm_writev.c pselect6.c ptrace.c \
-	pwritev.c qual_fault.c qual_inject-error-signal.c \
-	qual_inject-retval.c qual_inject-signal.c qual_signal.c \
-	quotactl.c quotactl-v.c quotactl-xfs.c quotactl-xfs-v.c \
-	read-write.c readahead.c readdir.c readlink.c readlinkat.c \
-	readv.c reboot.c recvfrom.c recvmmsg-timeout.c recvmsg.c \
-	redirect-fds.c remap_file_pages.c rename.c renameat.c \
-	renameat2.c request_key.c restart_syscall.c rmdir.c \
-	rt_sigaction.c rt_sigpending.c rt_sigprocmask.c \
-	rt_sigqueueinfo.c rt_sigreturn.c rt_sigsuspend.c \
-	rt_sigtimedwait.c rt_tgsigqueueinfo.c run_expect_termsig.c \
-	sched_get_priority_mxx.c sched_rr_get_interval.c \
-	sched_xetaffinity.c sched_xetattr.c sched_xetparam.c \
-	sched_xetscheduler.c sched_yield.c scm_rights.c \
-	seccomp-filter.c seccomp-filter-v.c seccomp-strict.c select.c \
-	semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c setdomainname.c setfsgid.c setfsgid32.c \
-	setfsuid.c setfsuid32.c setgid.c setgid32.c setgroups.c \
-	setgroups32.c sethostname.c setns.c setregid.c setregid32.c \
-	setresgid.c setresgid32.c setresuid.c setresuid32.c setreuid.c \
-	setreuid32.c setrlimit.c setuid.c setuid32.c shmxt.c \
-	shutdown.c sigaction.c sigaltstack.c siginfo.c signal.c \
-	signal_receive.c signalfd4.c sigpending.c sigprocmask.c \
-	sigreturn.c sigsuspend.c sleep.c socketcall.c splice.c \
+	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
+	printpath-umovestr-peekdata.c printpath-umovestr-undumpable.c \
+	printstr.c printstrn-umoven.c printstrn-umoven-peekdata.c \
+	printstrn-umoven-undumpable.c prlimit64.c process_vm_readv.c \
+	process_vm_writev.c pselect6.c ptrace.c pwritev.c qual_fault.c \
+	qual_inject-error-signal.c qual_inject-retval.c \
+	qual_inject-signal.c qual_signal.c quotactl.c quotactl-v.c \
+	quotactl-xfs.c quotactl-xfs-v.c read-write.c readahead.c \
+	readdir.c readlink.c readlinkat.c readv.c reboot.c recvfrom.c \
+	recvmmsg-timeout.c recvmsg.c redirect-fds.c remap_file_pages.c \
+	rename.c renameat.c renameat2.c request_key.c \
+	restart_syscall.c rmdir.c rt_sigaction.c rt_sigpending.c \
+	rt_sigprocmask.c rt_sigqueueinfo.c rt_sigreturn.c \
+	rt_sigsuspend.c rt_sigtimedwait.c rt_tgsigqueueinfo.c \
+	run_expect_termsig.c sched_get_priority_mxx.c \
+	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
+	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
+	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
+	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
+	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	setfsgid32.c setfsuid.c setfsuid32.c setgid.c setgid32.c \
+	setgroups.c setgroups32.c sethostname.c setns.c setregid.c \
+	setregid32.c setresgid.c setresgid32.c setresuid.c \
+	setresuid32.c setreuid.c setreuid32.c setrlimit.c setuid.c \
+	setuid32.c shmxt.c shutdown.c sigaction.c sigaltstack.c \
+	siginfo.c signal.c signal_receive.c signalfd4.c sigpending.c \
+	sigprocmask.c sigreturn.c sigsuspend.c sleep.c so_linger.c \
+	so_peercred.c sock_filter-v.c socketcall.c splice.c \
 	$(stack_fcall_SOURCES) stat.c stat64.c statfs.c statfs64.c \
 	statx.c swap.c sxetmask.c symlink.c symlinkat.c sync.c \
 	sync_file_range.c sync_file_range2.c sysinfo.c syslog.c tee.c \
@@ -2167,7 +2382,10 @@
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-am__extra_recursive_targets = check-valgrind-recursive
+am__extra_recursive_targets = check-valgrind-recursive \
+	check-valgrind-memcheck-recursive \
+	check-valgrind-helgrind-recursive check-valgrind-drd-recursive \
+	check-valgrind-sgcheck-recursive
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
@@ -2410,6 +2628,7 @@
 CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
 CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
 CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
 COPYRIGHT_YEAR = @COPYRIGHT_YEAR@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
@@ -2444,6 +2663,7 @@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANPAGE_DATE = @MANPAGE_DATE@
 MIPS_ABI = @MIPS_ABI@
 MKDIR_P = @MKDIR_P@
 OBJEXT = @OBJEXT@
@@ -2551,6 +2771,7 @@
 	get_sigset_size.c \
 	hexdump_strdup.c \
 	hexquote_strndup.c \
+	ifindex.c \
 	inode_of_sockfd.c \
 	libmmsg.c \
 	libsocketcall.c \
@@ -2564,7 +2785,12 @@
 	skip_unavailable.c \
 	sprintrc.c \
 	tail_alloc.c \
+	test_netlink.h \
 	test_nlattr.h \
+	test_printpath.c \
+	test_printstrn.c \
+	test_ucopy.c \
+	test_ucopy.h \
 	tests.h \
 	tprintf.c \
 	# end of libtests_a_SOURCES
@@ -2585,6 +2811,7 @@
   aio \
   alarm \
   bpf \
+  bpf-v \
   brk \
   btrfs \
   caps \
@@ -2625,6 +2852,7 @@
   fcntl \
   fcntl64 \
   fdatasync \
+  fflush \
   file_handle \
   file_ioctl \
   finit_module \
@@ -2668,6 +2896,7 @@
   getuid \
   getuid32 \
   getxxid \
+  group_req \
   inet-cmsg \
   init_module \
   inotify \
@@ -2742,7 +2971,9 @@
   net-yy-netlink \
   net-yy-unix \
   netlink_audit \
+  netlink_crypto \
   netlink_generic \
+  netlink_kobject_uevent \
   netlink_netfilter \
   netlink_protocol \
   netlink_route \
@@ -2751,8 +2982,30 @@
   netlink_xfrm \
   newfstatat \
   nlattr \
+  nlattr_crypto_user_alg \
+  nlattr_br_port_msg \
+  nlattr_dcbmsg \
+  nlattr_fib_rule_hdr \
+  nlattr_ifaddrlblmsg \
+  nlattr_ifaddrmsg \
+  nlattr_ifinfomsg \
+  nlattr_ifla_brport \
+  nlattr_ifla_port \
+  nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
+  nlattr_inet_diag_req_compat \
+  nlattr_inet_diag_req_v2 \
+  nlattr_ndmsg \
+  nlattr_ndtmsg \
+  nlattr_netconfmsg \
   nlattr_netlink_diag_msg \
+  nlattr_nlmsgerr \
+  nlattr_packet_diag_msg \
+  nlattr_rtgenmsg \
+  nlattr_rtmsg \
+  nlattr_smc_diag_msg \
+  nlattr_tcamsg \
+  nlattr_tcmsg \
   nlattr_unix_diag_msg \
   old_mmap \
   oldfstat \
@@ -2784,7 +3037,13 @@
   preadv \
   preadv-pwritev \
   preadv2-pwritev2 \
+  printpath-umovestr \
+  printpath-umovestr-peekdata \
+  printpath-umovestr-undumpable \
   printstr \
+  printstrn-umoven \
+  printstrn-umoven-peekdata \
+  printstrn-umoven-undumpable \
   prlimit64 \
   process_vm_readv \
   process_vm_writev \
@@ -2863,6 +3122,9 @@
   sigprocmask \
   sigreturn \
   sigsuspend \
+  so_linger \
+  so_peercred \
+  sock_filter-v \
   socketcall \
   splice \
   stat \
@@ -2954,35 +3216,36 @@
 GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test \
 	access.gen.test acct.gen.test add_key.gen.test \
 	adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test \
-	btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test \
-	chroot.gen.test clock.gen.test clock_adjtime.gen.test \
-	clock_nanosleep.gen.test clock_xettime.gen.test \
-	copy_file_range.gen.test creat.gen.test delete_module.gen.test \
-	dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test \
-	epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test \
-	epoll_wait.gen.test erestartsys.gen.test execveat.gen.test \
-	execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test \
-	fallocate.gen.test fanotify_init.gen.test \
-	fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test \
-	fchmodat.gen.test fchown.gen.test fchown32.gen.test \
-	fchownat.gen.test fcntl.gen.test fcntl64.gen.test \
-	fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test \
-	finit_module.gen.test flock.gen.test fork-f.gen.test \
-	fstat.gen.test fstat64.gen.test fstatat64.gen.test \
-	fstatfs.gen.test fstatfs64.gen.test fsync.gen.test \
-	ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test \
-	get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test \
-	getdents.gen.test getdents64.gen.test getegid.gen.test \
-	getegid32.gen.test geteuid.gen.test geteuid32.gen.test \
-	getgid.gen.test getgid32.gen.test getgroups.gen.test \
-	getgroups32.gen.test getpeername.gen.test getpgrp.gen.test \
-	getpid.gen.test getppid.gen.test getrandom.gen.test \
-	getresgid.gen.test getresgid32.gen.test getresuid.gen.test \
-	getresuid32.gen.test getrlimit.gen.test getrusage.gen.test \
-	getsid.gen.test getsockname.gen.test gettid.gen.test \
-	getuid32.gen.test getxxid.gen.test inet-cmsg.gen.test \
-	init_module.gen.test inotify.gen.test inotify_init1.gen.test \
-	int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test \
+	bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test \
+	chown32.gen.test chroot.gen.test clock.gen.test \
+	clock_adjtime.gen.test clock_nanosleep.gen.test \
+	clock_xettime.gen.test copy_file_range.gen.test creat.gen.test \
+	delete_module.gen.test dup.gen.test dup2.gen.test \
+	dup3.gen.test epoll_create.gen.test epoll_create1.gen.test \
+	epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test \
+	erestartsys.gen.test execveat.gen.test execveat-v.gen.test \
+	faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test \
+	fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test \
+	fchmod.gen.test fchmodat.gen.test fchown.gen.test \
+	fchown32.gen.test fchownat.gen.test fcntl.gen.test \
+	fcntl64.gen.test fdatasync.gen.test file_handle.gen.test \
+	file_ioctl.gen.test finit_module.gen.test flock.gen.test \
+	fork-f.gen.test fstat.gen.test fstat64.gen.test \
+	fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test \
+	fsync.gen.test ftruncate.gen.test ftruncate64.gen.test \
+	futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test \
+	getcwd.gen.test getdents.gen.test getdents64.gen.test \
+	getegid.gen.test getegid32.gen.test geteuid.gen.test \
+	geteuid32.gen.test getgid.gen.test getgid32.gen.test \
+	getgroups.gen.test getgroups32.gen.test getpeername.gen.test \
+	getpgrp.gen.test getpid.gen.test getppid.gen.test \
+	getrandom.gen.test getresgid.gen.test getresgid32.gen.test \
+	getresuid.gen.test getresuid32.gen.test getrlimit.gen.test \
+	getrusage.gen.test getsid.gen.test getsockname.gen.test \
+	gettid.gen.test getuid32.gen.test getxxid.gen.test \
+	group_req.gen.test inet-cmsg.gen.test init_module.gen.test \
+	inotify.gen.test inotify_init1.gen.test int_0x80.gen.test \
+	ioctl_block.gen.test ioctl_evdev.gen.test \
 	ioctl_evdev-v.gen.test ioctl_loop.gen.test \
 	ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test \
 	ioctl_rtc-v.gen.test ioctl_scsi.gen.test \
@@ -3006,11 +3269,24 @@
 	msg_control-v.gen.test msg_name.gen.test munlockall.gen.test \
 	nanosleep.gen.test net-icmp_filter.gen.test \
 	net-sockaddr.gen.test netlink_audit.gen.test \
-	netlink_generic.gen.test netlink_netfilter.gen.test \
+	netlink_crypto.gen.test netlink_generic.gen.test \
+	netlink_kobject_uevent.gen.test netlink_netfilter.gen.test \
 	netlink_protocol.gen.test netlink_route.gen.test \
 	netlink_selinux.gen.test netlink_xfrm.gen.test \
 	newfstatat.gen.test nlattr.gen.test \
-	nlattr_inet_diag_msg.gen.test nlattr_netlink_diag_msg.gen.test \
+	nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test \
+	nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test \
+	nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test \
+	nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test \
+	nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test \
+	nlattr_inet_diag_msg.gen.test \
+	nlattr_inet_diag_req_compat.gen.test \
+	nlattr_inet_diag_req_v2.gen.test nlattr_ndmsg.gen.test \
+	nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test \
+	nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test \
+	nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test \
+	nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test \
+	nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
 	nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
 	oldfstat.gen.test oldlstat.gen.test oldstat.gen.test \
 	open.gen.test openat.gen.test osf_utimes.gen.test \
@@ -3020,7 +3296,12 @@
 	pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test \
 	ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test \
 	preadv.gen.test preadv-pwritev.gen.test \
-	preadv2-pwritev2.gen.test printstr.gen.test prlimit64.gen.test \
+	preadv2-pwritev2.gen.test printstr.gen.test \
+	printpath-umovestr.gen.test \
+	printpath-umovestr-peekdata.gen.test \
+	printpath-umovestr-undumpable.gen.test \
+	printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test \
+	printstrn-umoven-undumpable.gen.test prlimit64.gen.test \
 	process_vm_readv.gen.test process_vm_writev.gen.test \
 	pselect6.gen.test ptrace.gen.test pwritev.gen.test \
 	quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test \
@@ -3051,6 +3332,7 @@
 	sigaction.gen.test siginfo.gen.test signal.gen.test \
 	signal_receive.gen.test signalfd4.gen.test sigpending.gen.test \
 	sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test \
+	so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test \
 	socketcall.gen.test splice.gen.test stat.gen.test \
 	stat64.gen.test statfs.gen.test statfs64.gen.test \
 	statx.gen.test swap.gen.test sxetmask.gen.test \
@@ -3141,18 +3423,23 @@
 	attach-f-p.test \
 	attach-p-cmd.test \
 	bexecve.test \
+	clone_parent.test \
+	clone_ptrace.test \
 	count-f.test \
 	count.test \
 	detach-running.test \
 	detach-sleeping.test \
 	detach-stopped.test \
 	filter-unavailable.test \
+	fflush.test \
 	get_regs.test \
 	interactive_block.test \
 	ksysent.test \
 	opipe.test \
 	options-syntax.test \
 	pc.test \
+	printpath-umovestr-legacy.test \
+	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
 	qual_inject-error-signal.test \
@@ -3187,7 +3474,7 @@
 TEST_LOG_COMPILER = env
 AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) MIPS_ABI=$(MIPS_ABI) $(srcdir)/run.sh
 VALGRIND_FLAGS = --quiet
-VALGRIND_SUPPRESSIONS_FILES = $(srcdir)/strace.supp
+VALGRIND_SUPPRESSIONS_FILES = $(abs_srcdir)/strace.supp
 EXTRA_DIST = \
 	caps-abbrev.awk \
 	caps.awk \
@@ -3211,6 +3498,7 @@
 	lstatx.c \
 	match.awk \
 	net.expected \
+	netlink_sock_diag-v.sh \
 	oldselect.expected \
 	pipe.expected \
 	process_vm_readv_writev.c \
@@ -3239,6 +3527,7 @@
 	strace.supp \
 	struct_flock.c \
 	sun_path.expected \
+	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
@@ -3263,6 +3552,7 @@
 	$(TESTS)
 
 objects = $(filter %.$(OBJEXT),$(SOURCES:.c=.$(OBJEXT)))
+BUILT_SOURCES = ksysent.h scno.h
 CLEANFILES = ksysent.h syscallent.i scno.h
 SCNO_CPPFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 		$(ARCH_MFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS)
@@ -3270,7 +3560,8 @@
 digits = [[:digit:]][[:digit:]]*
 al_nums = [[:alnum:]_][[:alnum:]_]*
 SCNO_SED = /TRACE_INDIRECT_SUBCALL/d; s/^\[[[:space:]]*\($(digits)\)\][[:space:]]*=[[:space:]]*{[^,]*,[^,]*,[^,]*,[[:space:]]*"\($(al_nums)\)"[[:space:]]*},.*/\#ifndef __NR_\2\n\# define __NR_\2 (SYSCALL_BIT | \1)\n\#endif/p
-all: all-am
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs
@@ -3381,6 +3672,10 @@
 	@rm -f bpf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bpf_OBJECTS) $(bpf_LDADD) $(LIBS)
 
+bpf-v$(EXEEXT): $(bpf_v_OBJECTS) $(bpf_v_DEPENDENCIES) $(EXTRA_bpf_v_DEPENDENCIES) 
+	@rm -f bpf-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_v_OBJECTS) $(bpf_v_LDADD) $(LIBS)
+
 brk$(EXEEXT): $(brk_OBJECTS) $(brk_DEPENDENCIES) $(EXTRA_brk_DEPENDENCIES) 
 	@rm -f brk$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(brk_OBJECTS) $(brk_LDADD) $(LIBS)
@@ -3425,6 +3720,14 @@
 	@rm -f clock_xettime$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(clock_xettime_OBJECTS) $(clock_xettime_LDADD) $(LIBS)
 
+clone_parent$(EXEEXT): $(clone_parent_OBJECTS) $(clone_parent_DEPENDENCIES) $(EXTRA_clone_parent_DEPENDENCIES) 
+	@rm -f clone_parent$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(clone_parent_OBJECTS) $(clone_parent_LDADD) $(LIBS)
+
+clone_ptrace$(EXEEXT): $(clone_ptrace_OBJECTS) $(clone_ptrace_DEPENDENCIES) $(EXTRA_clone_ptrace_DEPENDENCIES) 
+	@rm -f clone_ptrace$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(clone_ptrace_OBJECTS) $(clone_ptrace_LDADD) $(LIBS)
+
 copy_file_range$(EXEEXT): $(copy_file_range_OBJECTS) $(copy_file_range_DEPENDENCIES) $(EXTRA_copy_file_range_DEPENDENCIES) 
 	@rm -f copy_file_range$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(copy_file_range_OBJECTS) $(copy_file_range_LDADD) $(LIBS)
@@ -3557,6 +3860,10 @@
 	@rm -f fdatasync$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fdatasync_OBJECTS) $(fdatasync_LDADD) $(LIBS)
 
+fflush$(EXEEXT): $(fflush_OBJECTS) $(fflush_DEPENDENCIES) $(EXTRA_fflush_DEPENDENCIES) 
+	@rm -f fflush$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fflush_OBJECTS) $(fflush_LDADD) $(LIBS)
+
 file_handle$(EXEEXT): $(file_handle_OBJECTS) $(file_handle_DEPENDENCIES) $(EXTRA_file_handle_DEPENDENCIES) 
 	@rm -f file_handle$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(file_handle_OBJECTS) $(file_handle_LDADD) $(LIBS)
@@ -3741,6 +4048,10 @@
 	@rm -f getxxid$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(getxxid_OBJECTS) $(getxxid_LDADD) $(LIBS)
 
+group_req$(EXEEXT): $(group_req_OBJECTS) $(group_req_DEPENDENCIES) $(EXTRA_group_req_DEPENDENCIES) 
+	@rm -f group_req$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(group_req_OBJECTS) $(group_req_LDADD) $(LIBS)
+
 inet-cmsg$(EXEEXT): $(inet_cmsg_OBJECTS) $(inet_cmsg_DEPENDENCIES) $(EXTRA_inet_cmsg_DEPENDENCIES) 
 	@rm -f inet-cmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(inet_cmsg_OBJECTS) $(inet_cmsg_LDADD) $(LIBS)
@@ -3873,6 +4184,10 @@
 	@rm -f ipc_shm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_shm_OBJECTS) $(ipc_shm_LDADD) $(LIBS)
 
+is_linux_mips_n64$(EXEEXT): $(is_linux_mips_n64_OBJECTS) $(is_linux_mips_n64_DEPENDENCIES) $(EXTRA_is_linux_mips_n64_DEPENDENCIES) 
+	@rm -f is_linux_mips_n64$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(is_linux_mips_n64_OBJECTS) $(is_linux_mips_n64_LDADD) $(LIBS)
+
 kcmp$(EXEEXT): $(kcmp_OBJECTS) $(kcmp_DEPENDENCIES) $(EXTRA_kcmp_DEPENDENCIES) 
 	@rm -f kcmp$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kcmp_OBJECTS) $(kcmp_LDADD) $(LIBS)
@@ -4085,6 +4400,10 @@
 	@rm -f netlink_audit$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_audit_OBJECTS) $(netlink_audit_LDADD) $(LIBS)
 
+netlink_crypto$(EXEEXT): $(netlink_crypto_OBJECTS) $(netlink_crypto_DEPENDENCIES) $(EXTRA_netlink_crypto_DEPENDENCIES) 
+	@rm -f netlink_crypto$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(netlink_crypto_OBJECTS) $(netlink_crypto_LDADD) $(LIBS)
+
 netlink_generic$(EXEEXT): $(netlink_generic_OBJECTS) $(netlink_generic_DEPENDENCIES) $(EXTRA_netlink_generic_DEPENDENCIES) 
 	@rm -f netlink_generic$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_generic_OBJECTS) $(netlink_generic_LDADD) $(LIBS)
@@ -4093,6 +4412,10 @@
 	@rm -f netlink_inet_diag$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_inet_diag_OBJECTS) $(netlink_inet_diag_LDADD) $(LIBS)
 
+netlink_kobject_uevent$(EXEEXT): $(netlink_kobject_uevent_OBJECTS) $(netlink_kobject_uevent_DEPENDENCIES) $(EXTRA_netlink_kobject_uevent_DEPENDENCIES) 
+	@rm -f netlink_kobject_uevent$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(netlink_kobject_uevent_OBJECTS) $(netlink_kobject_uevent_LDADD) $(LIBS)
+
 netlink_netfilter$(EXEEXT): $(netlink_netfilter_OBJECTS) $(netlink_netfilter_DEPENDENCIES) $(EXTRA_netlink_netfilter_DEPENDENCIES) 
 	@rm -f netlink_netfilter$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_netfilter_OBJECTS) $(netlink_netfilter_LDADD) $(LIBS)
@@ -4133,14 +4456,102 @@
 	@rm -f nlattr$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_OBJECTS) $(nlattr_LDADD) $(LIBS)
 
+nlattr_br_port_msg$(EXEEXT): $(nlattr_br_port_msg_OBJECTS) $(nlattr_br_port_msg_DEPENDENCIES) $(EXTRA_nlattr_br_port_msg_DEPENDENCIES) 
+	@rm -f nlattr_br_port_msg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_br_port_msg_OBJECTS) $(nlattr_br_port_msg_LDADD) $(LIBS)
+
+nlattr_crypto_user_alg$(EXEEXT): $(nlattr_crypto_user_alg_OBJECTS) $(nlattr_crypto_user_alg_DEPENDENCIES) $(EXTRA_nlattr_crypto_user_alg_DEPENDENCIES) 
+	@rm -f nlattr_crypto_user_alg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_crypto_user_alg_OBJECTS) $(nlattr_crypto_user_alg_LDADD) $(LIBS)
+
+nlattr_dcbmsg$(EXEEXT): $(nlattr_dcbmsg_OBJECTS) $(nlattr_dcbmsg_DEPENDENCIES) $(EXTRA_nlattr_dcbmsg_DEPENDENCIES) 
+	@rm -f nlattr_dcbmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_dcbmsg_OBJECTS) $(nlattr_dcbmsg_LDADD) $(LIBS)
+
+nlattr_fib_rule_hdr$(EXEEXT): $(nlattr_fib_rule_hdr_OBJECTS) $(nlattr_fib_rule_hdr_DEPENDENCIES) $(EXTRA_nlattr_fib_rule_hdr_DEPENDENCIES) 
+	@rm -f nlattr_fib_rule_hdr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_fib_rule_hdr_OBJECTS) $(nlattr_fib_rule_hdr_LDADD) $(LIBS)
+
+nlattr_ifaddrlblmsg$(EXEEXT): $(nlattr_ifaddrlblmsg_OBJECTS) $(nlattr_ifaddrlblmsg_DEPENDENCIES) $(EXTRA_nlattr_ifaddrlblmsg_DEPENDENCIES) 
+	@rm -f nlattr_ifaddrlblmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifaddrlblmsg_OBJECTS) $(nlattr_ifaddrlblmsg_LDADD) $(LIBS)
+
+nlattr_ifaddrmsg$(EXEEXT): $(nlattr_ifaddrmsg_OBJECTS) $(nlattr_ifaddrmsg_DEPENDENCIES) $(EXTRA_nlattr_ifaddrmsg_DEPENDENCIES) 
+	@rm -f nlattr_ifaddrmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifaddrmsg_OBJECTS) $(nlattr_ifaddrmsg_LDADD) $(LIBS)
+
+nlattr_ifinfomsg$(EXEEXT): $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_DEPENDENCIES) $(EXTRA_nlattr_ifinfomsg_DEPENDENCIES) 
+	@rm -f nlattr_ifinfomsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_LDADD) $(LIBS)
+
+nlattr_ifla_brport$(EXEEXT): $(nlattr_ifla_brport_OBJECTS) $(nlattr_ifla_brport_DEPENDENCIES) $(EXTRA_nlattr_ifla_brport_DEPENDENCIES) 
+	@rm -f nlattr_ifla_brport$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_brport_OBJECTS) $(nlattr_ifla_brport_LDADD) $(LIBS)
+
+nlattr_ifla_port$(EXEEXT): $(nlattr_ifla_port_OBJECTS) $(nlattr_ifla_port_DEPENDENCIES) $(EXTRA_nlattr_ifla_port_DEPENDENCIES) 
+	@rm -f nlattr_ifla_port$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_port_OBJECTS) $(nlattr_ifla_port_LDADD) $(LIBS)
+
+nlattr_ifla_xdp$(EXEEXT): $(nlattr_ifla_xdp_OBJECTS) $(nlattr_ifla_xdp_DEPENDENCIES) $(EXTRA_nlattr_ifla_xdp_DEPENDENCIES) 
+	@rm -f nlattr_ifla_xdp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_xdp_OBJECTS) $(nlattr_ifla_xdp_LDADD) $(LIBS)
+
 nlattr_inet_diag_msg$(EXEEXT): $(nlattr_inet_diag_msg_OBJECTS) $(nlattr_inet_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_inet_diag_msg_DEPENDENCIES) 
 	@rm -f nlattr_inet_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_msg_OBJECTS) $(nlattr_inet_diag_msg_LDADD) $(LIBS)
 
+nlattr_inet_diag_req_compat$(EXEEXT): $(nlattr_inet_diag_req_compat_OBJECTS) $(nlattr_inet_diag_req_compat_DEPENDENCIES) $(EXTRA_nlattr_inet_diag_req_compat_DEPENDENCIES) 
+	@rm -f nlattr_inet_diag_req_compat$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_req_compat_OBJECTS) $(nlattr_inet_diag_req_compat_LDADD) $(LIBS)
+
+nlattr_inet_diag_req_v2$(EXEEXT): $(nlattr_inet_diag_req_v2_OBJECTS) $(nlattr_inet_diag_req_v2_DEPENDENCIES) $(EXTRA_nlattr_inet_diag_req_v2_DEPENDENCIES) 
+	@rm -f nlattr_inet_diag_req_v2$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_req_v2_OBJECTS) $(nlattr_inet_diag_req_v2_LDADD) $(LIBS)
+
+nlattr_ndmsg$(EXEEXT): $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_DEPENDENCIES) $(EXTRA_nlattr_ndmsg_DEPENDENCIES) 
+	@rm -f nlattr_ndmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_LDADD) $(LIBS)
+
+nlattr_ndtmsg$(EXEEXT): $(nlattr_ndtmsg_OBJECTS) $(nlattr_ndtmsg_DEPENDENCIES) $(EXTRA_nlattr_ndtmsg_DEPENDENCIES) 
+	@rm -f nlattr_ndtmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ndtmsg_OBJECTS) $(nlattr_ndtmsg_LDADD) $(LIBS)
+
+nlattr_netconfmsg$(EXEEXT): $(nlattr_netconfmsg_OBJECTS) $(nlattr_netconfmsg_DEPENDENCIES) $(EXTRA_nlattr_netconfmsg_DEPENDENCIES) 
+	@rm -f nlattr_netconfmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_netconfmsg_OBJECTS) $(nlattr_netconfmsg_LDADD) $(LIBS)
+
 nlattr_netlink_diag_msg$(EXEEXT): $(nlattr_netlink_diag_msg_OBJECTS) $(nlattr_netlink_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_netlink_diag_msg_DEPENDENCIES) 
 	@rm -f nlattr_netlink_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_netlink_diag_msg_OBJECTS) $(nlattr_netlink_diag_msg_LDADD) $(LIBS)
 
+nlattr_nlmsgerr$(EXEEXT): $(nlattr_nlmsgerr_OBJECTS) $(nlattr_nlmsgerr_DEPENDENCIES) $(EXTRA_nlattr_nlmsgerr_DEPENDENCIES) 
+	@rm -f nlattr_nlmsgerr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_nlmsgerr_OBJECTS) $(nlattr_nlmsgerr_LDADD) $(LIBS)
+
+nlattr_packet_diag_msg$(EXEEXT): $(nlattr_packet_diag_msg_OBJECTS) $(nlattr_packet_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_packet_diag_msg_DEPENDENCIES) 
+	@rm -f nlattr_packet_diag_msg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_packet_diag_msg_OBJECTS) $(nlattr_packet_diag_msg_LDADD) $(LIBS)
+
+nlattr_rtgenmsg$(EXEEXT): $(nlattr_rtgenmsg_OBJECTS) $(nlattr_rtgenmsg_DEPENDENCIES) $(EXTRA_nlattr_rtgenmsg_DEPENDENCIES) 
+	@rm -f nlattr_rtgenmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_rtgenmsg_OBJECTS) $(nlattr_rtgenmsg_LDADD) $(LIBS)
+
+nlattr_rtmsg$(EXEEXT): $(nlattr_rtmsg_OBJECTS) $(nlattr_rtmsg_DEPENDENCIES) $(EXTRA_nlattr_rtmsg_DEPENDENCIES) 
+	@rm -f nlattr_rtmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_rtmsg_OBJECTS) $(nlattr_rtmsg_LDADD) $(LIBS)
+
+nlattr_smc_diag_msg$(EXEEXT): $(nlattr_smc_diag_msg_OBJECTS) $(nlattr_smc_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_smc_diag_msg_DEPENDENCIES) 
+	@rm -f nlattr_smc_diag_msg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_smc_diag_msg_OBJECTS) $(nlattr_smc_diag_msg_LDADD) $(LIBS)
+
+nlattr_tcamsg$(EXEEXT): $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_DEPENDENCIES) $(EXTRA_nlattr_tcamsg_DEPENDENCIES) 
+	@rm -f nlattr_tcamsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_LDADD) $(LIBS)
+
+nlattr_tcmsg$(EXEEXT): $(nlattr_tcmsg_OBJECTS) $(nlattr_tcmsg_DEPENDENCIES) $(EXTRA_nlattr_tcmsg_DEPENDENCIES) 
+	@rm -f nlattr_tcmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tcmsg_OBJECTS) $(nlattr_tcmsg_LDADD) $(LIBS)
+
 nlattr_unix_diag_msg$(EXEEXT): $(nlattr_unix_diag_msg_OBJECTS) $(nlattr_unix_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_unix_diag_msg_DEPENDENCIES) 
 	@rm -f nlattr_unix_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_unix_diag_msg_OBJECTS) $(nlattr_unix_diag_msg_LDADD) $(LIBS)
@@ -4297,10 +4708,34 @@
 	@rm -f print_maxfd$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(print_maxfd_OBJECTS) $(print_maxfd_LDADD) $(LIBS)
 
+printpath-umovestr$(EXEEXT): $(printpath_umovestr_OBJECTS) $(printpath_umovestr_DEPENDENCIES) $(EXTRA_printpath_umovestr_DEPENDENCIES) 
+	@rm -f printpath-umovestr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printpath_umovestr_OBJECTS) $(printpath_umovestr_LDADD) $(LIBS)
+
+printpath-umovestr-peekdata$(EXEEXT): $(printpath_umovestr_peekdata_OBJECTS) $(printpath_umovestr_peekdata_DEPENDENCIES) $(EXTRA_printpath_umovestr_peekdata_DEPENDENCIES) 
+	@rm -f printpath-umovestr-peekdata$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printpath_umovestr_peekdata_OBJECTS) $(printpath_umovestr_peekdata_LDADD) $(LIBS)
+
+printpath-umovestr-undumpable$(EXEEXT): $(printpath_umovestr_undumpable_OBJECTS) $(printpath_umovestr_undumpable_DEPENDENCIES) $(EXTRA_printpath_umovestr_undumpable_DEPENDENCIES) 
+	@rm -f printpath-umovestr-undumpable$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printpath_umovestr_undumpable_OBJECTS) $(printpath_umovestr_undumpable_LDADD) $(LIBS)
+
 printstr$(EXEEXT): $(printstr_OBJECTS) $(printstr_DEPENDENCIES) $(EXTRA_printstr_DEPENDENCIES) 
 	@rm -f printstr$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(printstr_OBJECTS) $(printstr_LDADD) $(LIBS)
 
+printstrn-umoven$(EXEEXT): $(printstrn_umoven_OBJECTS) $(printstrn_umoven_DEPENDENCIES) $(EXTRA_printstrn_umoven_DEPENDENCIES) 
+	@rm -f printstrn-umoven$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printstrn_umoven_OBJECTS) $(printstrn_umoven_LDADD) $(LIBS)
+
+printstrn-umoven-peekdata$(EXEEXT): $(printstrn_umoven_peekdata_OBJECTS) $(printstrn_umoven_peekdata_DEPENDENCIES) $(EXTRA_printstrn_umoven_peekdata_DEPENDENCIES) 
+	@rm -f printstrn-umoven-peekdata$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printstrn_umoven_peekdata_OBJECTS) $(printstrn_umoven_peekdata_LDADD) $(LIBS)
+
+printstrn-umoven-undumpable$(EXEEXT): $(printstrn_umoven_undumpable_OBJECTS) $(printstrn_umoven_undumpable_DEPENDENCIES) $(EXTRA_printstrn_umoven_undumpable_DEPENDENCIES) 
+	@rm -f printstrn-umoven-undumpable$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printstrn_umoven_undumpable_OBJECTS) $(printstrn_umoven_undumpable_LDADD) $(LIBS)
+
 prlimit64$(EXEEXT): $(prlimit64_OBJECTS) $(prlimit64_DEPENDENCIES) $(EXTRA_prlimit64_DEPENDENCIES) 
 	@rm -f prlimit64$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prlimit64_OBJECTS) $(prlimit64_LDADD) $(LIBS)
@@ -4677,6 +5112,18 @@
 	@rm -f sleep$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(sleep_OBJECTS) $(sleep_LDADD) $(LIBS)
 
+so_linger$(EXEEXT): $(so_linger_OBJECTS) $(so_linger_DEPENDENCIES) $(EXTRA_so_linger_DEPENDENCIES) 
+	@rm -f so_linger$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_linger_OBJECTS) $(so_linger_LDADD) $(LIBS)
+
+so_peercred$(EXEEXT): $(so_peercred_OBJECTS) $(so_peercred_DEPENDENCIES) $(EXTRA_so_peercred_DEPENDENCIES) 
+	@rm -f so_peercred$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_OBJECTS) $(so_peercred_LDADD) $(LIBS)
+
+sock_filter-v$(EXEEXT): $(sock_filter_v_OBJECTS) $(sock_filter_v_DEPENDENCIES) $(EXTRA_sock_filter_v_DEPENDENCIES) 
+	@rm -f sock_filter-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_OBJECTS) $(sock_filter_v_LDADD) $(LIBS)
+
 socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_socketcall_DEPENDENCIES) 
 	@rm -f socketcall$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
@@ -4958,6 +5405,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach-p-cmd-cmd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach-p-cmd-p.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/block_reset_raise_run.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/brk.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btrfs.Po@am__quote@
@@ -4970,6 +5418,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_adjtime.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_nanosleep.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_xettime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clone_parent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clone_ptrace.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy_file_range.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count-f.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/creat.Po@am__quote@
@@ -5003,6 +5453,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdatasync.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fflush.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_handle.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_ioctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filter-unavailable.Po@am__quote@
@@ -5049,6 +5500,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getuid.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getuid32.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getxxid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/group_req.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet-cmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init_module.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inotify.Po@am__quote@
@@ -5082,6 +5534,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_linux_mips_n64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcmp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_file_load.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_load.Po@am__quote@
@@ -5098,6 +5551,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-get_sigset_size.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-hexdump_strdup.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-hexquote_strndup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-ifindex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-inode_of_sockfd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libmmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libsocketcall.Po@am__quote@
@@ -5111,6 +5565,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-skip_unavailable.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-sprintrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-tail_alloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-test_printpath.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-test_printstrn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-test_ucopy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-tprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linkat.Po@am__quote@
@@ -5157,8 +5614,10 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net-yy-netlink.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net-yy-unix.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_audit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_crypto.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_generic.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_inet_diag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_kobject_uevent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_netfilter.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_netlink_diag.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_protocol.Po@am__quote@
@@ -5169,8 +5628,30 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_xfrm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newfstatat-newfstatat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_br_port_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_crypto_user_alg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_dcbmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_fib_rule_hdr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifaddrlblmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifaddrmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifinfomsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifla_brport.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifla_port.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifla_xdp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_compat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_v2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndtmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_netconfmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_netlink_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_nlmsgerr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_packet_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtgenmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_smc_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcamsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_unix_diag_msg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap.Po@am__quote@
@@ -5210,7 +5691,13 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preadv2-pwritev2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preadv_pwritev-preadv-pwritev.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_maxfd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printpath-umovestr-peekdata.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printpath-umovestr-undumpable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printpath-umovestr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstrn-umoven-peekdata.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstrn-umoven-undumpable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstrn-umoven.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prlimit64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process_vm_readv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process_vm_writev.Po@am__quote@
@@ -5305,6 +5792,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigreturn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigsuspend.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_linger.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socketcall.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splice.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-0.Po@am__quote@
@@ -5501,6 +5991,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-hexquote_strndup.obj `if test -f 'hexquote_strndup.c'; then $(CYGPATH_W) 'hexquote_strndup.c'; else $(CYGPATH_W) '$(srcdir)/hexquote_strndup.c'; fi`
 
+libtests_a-ifindex.o: ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-ifindex.o -MD -MP -MF $(DEPDIR)/libtests_a-ifindex.Tpo -c -o libtests_a-ifindex.o `test -f 'ifindex.c' || echo '$(srcdir)/'`ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-ifindex.Tpo $(DEPDIR)/libtests_a-ifindex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='ifindex.c' object='libtests_a-ifindex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-ifindex.o `test -f 'ifindex.c' || echo '$(srcdir)/'`ifindex.c
+
+libtests_a-ifindex.obj: ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-ifindex.obj -MD -MP -MF $(DEPDIR)/libtests_a-ifindex.Tpo -c -o libtests_a-ifindex.obj `if test -f 'ifindex.c'; then $(CYGPATH_W) 'ifindex.c'; else $(CYGPATH_W) '$(srcdir)/ifindex.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-ifindex.Tpo $(DEPDIR)/libtests_a-ifindex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='ifindex.c' object='libtests_a-ifindex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-ifindex.obj `if test -f 'ifindex.c'; then $(CYGPATH_W) 'ifindex.c'; else $(CYGPATH_W) '$(srcdir)/ifindex.c'; fi`
+
 libtests_a-inode_of_sockfd.o: inode_of_sockfd.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-inode_of_sockfd.o -MD -MP -MF $(DEPDIR)/libtests_a-inode_of_sockfd.Tpo -c -o libtests_a-inode_of_sockfd.o `test -f 'inode_of_sockfd.c' || echo '$(srcdir)/'`inode_of_sockfd.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-inode_of_sockfd.Tpo $(DEPDIR)/libtests_a-inode_of_sockfd.Po
@@ -5683,6 +6187,48 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-tail_alloc.obj `if test -f 'tail_alloc.c'; then $(CYGPATH_W) 'tail_alloc.c'; else $(CYGPATH_W) '$(srcdir)/tail_alloc.c'; fi`
 
+libtests_a-test_printpath.o: test_printpath.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printpath.o -MD -MP -MF $(DEPDIR)/libtests_a-test_printpath.Tpo -c -o libtests_a-test_printpath.o `test -f 'test_printpath.c' || echo '$(srcdir)/'`test_printpath.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printpath.Tpo $(DEPDIR)/libtests_a-test_printpath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printpath.c' object='libtests_a-test_printpath.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printpath.o `test -f 'test_printpath.c' || echo '$(srcdir)/'`test_printpath.c
+
+libtests_a-test_printpath.obj: test_printpath.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printpath.obj -MD -MP -MF $(DEPDIR)/libtests_a-test_printpath.Tpo -c -o libtests_a-test_printpath.obj `if test -f 'test_printpath.c'; then $(CYGPATH_W) 'test_printpath.c'; else $(CYGPATH_W) '$(srcdir)/test_printpath.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printpath.Tpo $(DEPDIR)/libtests_a-test_printpath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printpath.c' object='libtests_a-test_printpath.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printpath.obj `if test -f 'test_printpath.c'; then $(CYGPATH_W) 'test_printpath.c'; else $(CYGPATH_W) '$(srcdir)/test_printpath.c'; fi`
+
+libtests_a-test_printstrn.o: test_printstrn.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printstrn.o -MD -MP -MF $(DEPDIR)/libtests_a-test_printstrn.Tpo -c -o libtests_a-test_printstrn.o `test -f 'test_printstrn.c' || echo '$(srcdir)/'`test_printstrn.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printstrn.Tpo $(DEPDIR)/libtests_a-test_printstrn.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printstrn.c' object='libtests_a-test_printstrn.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printstrn.o `test -f 'test_printstrn.c' || echo '$(srcdir)/'`test_printstrn.c
+
+libtests_a-test_printstrn.obj: test_printstrn.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printstrn.obj -MD -MP -MF $(DEPDIR)/libtests_a-test_printstrn.Tpo -c -o libtests_a-test_printstrn.obj `if test -f 'test_printstrn.c'; then $(CYGPATH_W) 'test_printstrn.c'; else $(CYGPATH_W) '$(srcdir)/test_printstrn.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printstrn.Tpo $(DEPDIR)/libtests_a-test_printstrn.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printstrn.c' object='libtests_a-test_printstrn.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printstrn.obj `if test -f 'test_printstrn.c'; then $(CYGPATH_W) 'test_printstrn.c'; else $(CYGPATH_W) '$(srcdir)/test_printstrn.c'; fi`
+
+libtests_a-test_ucopy.o: test_ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_ucopy.o -MD -MP -MF $(DEPDIR)/libtests_a-test_ucopy.Tpo -c -o libtests_a-test_ucopy.o `test -f 'test_ucopy.c' || echo '$(srcdir)/'`test_ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_ucopy.Tpo $(DEPDIR)/libtests_a-test_ucopy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_ucopy.c' object='libtests_a-test_ucopy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_ucopy.o `test -f 'test_ucopy.c' || echo '$(srcdir)/'`test_ucopy.c
+
+libtests_a-test_ucopy.obj: test_ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_ucopy.obj -MD -MP -MF $(DEPDIR)/libtests_a-test_ucopy.Tpo -c -o libtests_a-test_ucopy.obj `if test -f 'test_ucopy.c'; then $(CYGPATH_W) 'test_ucopy.c'; else $(CYGPATH_W) '$(srcdir)/test_ucopy.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_ucopy.Tpo $(DEPDIR)/libtests_a-test_ucopy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_ucopy.c' object='libtests_a-test_ucopy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_ucopy.obj `if test -f 'test_ucopy.c'; then $(CYGPATH_W) 'test_ucopy.c'; else $(CYGPATH_W) '$(srcdir)/test_ucopy.c'; fi`
+
 libtests_a-tprintf.o: tprintf.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-tprintf.o -MD -MP -MF $(DEPDIR)/libtests_a-tprintf.Tpo -c -o libtests_a-tprintf.o `test -f 'tprintf.c' || echo '$(srcdir)/'`tprintf.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-tprintf.Tpo $(DEPDIR)/libtests_a-tprintf.Po
@@ -5893,6 +6439,10 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o uio-uio.obj `if test -f 'uio.c'; then $(CYGPATH_W) 'uio.c'; else $(CYGPATH_W) '$(srcdir)/uio.c'; fi`
 check-valgrind-local: 
+check-valgrind-memcheck-local: 
+check-valgrind-helgrind-local: 
+check-valgrind-drd-local: 
+check-valgrind-sgcheck-local: 
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -6135,10 +6685,12 @@
 check-am: all-am
 	$(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) $(check_PROGRAMS)
 	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: check-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
 all-am: Makefile
 installdirs:
-install: install-am
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
 install-exec: install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
@@ -6172,10 +6724,27 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 check-valgrind: check-valgrind-am
 
 check-valgrind-am: check-valgrind-local
 
+check-valgrind-drd: check-valgrind-drd-am
+
+check-valgrind-drd-am: check-valgrind-drd-local
+
+check-valgrind-helgrind: check-valgrind-helgrind-am
+
+check-valgrind-helgrind-am: check-valgrind-helgrind-local
+
+check-valgrind-memcheck: check-valgrind-memcheck-am
+
+check-valgrind-memcheck-am: check-valgrind-memcheck-local
+
+check-valgrind-sgcheck: check-valgrind-sgcheck-am
+
+check-valgrind-sgcheck-am: check-valgrind-sgcheck-local
+
 clean: clean-am
 
 clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \
@@ -6246,10 +6815,14 @@
 
 uninstall-am:
 
-.MAKE: check-am install-am install-strip
+.MAKE: all check check-am install install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am \
-	check-valgrind-am check-valgrind-local clean \
+	check-valgrind-am check-valgrind-drd-am \
+	check-valgrind-drd-local check-valgrind-helgrind-am \
+	check-valgrind-helgrind-local check-valgrind-local \
+	check-valgrind-memcheck-am check-valgrind-memcheck-local \
+	check-valgrind-sgcheck-am check-valgrind-sgcheck-local clean \
 	clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \
 	clean-local cscopelist-am ctags ctags-am distclean \
 	distclean-compile distclean-generic distclean-tags distdir dvi \
@@ -6294,6 +6867,9 @@
 $(srcdir)/bpf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/btrfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6534,6 +7110,9 @@
 $(srcdir)/getxxid.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/group_req.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/inet-cmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6744,9 +7323,15 @@
 $(srcdir)/netlink_audit.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_crypto.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_generic.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_kobject_uevent.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_netfilter.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6768,12 +7353,78 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_br_port_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_dcbmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_fib_rule_hdr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrlblmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_brport.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_xdp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_inet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_inet_diag_req_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_netconfmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_netlink_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_nlmsgerr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_packet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtgenmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_unix_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6843,6 +7494,24 @@
 $(srcdir)/printstr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/printpath-umovestr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/prlimit64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7086,6 +7755,15 @@
 $(srcdir)/sigsuspend.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_linger.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/socketcall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7286,6 +7964,9 @@
 clean-local-check:
 	-rm -rf -- $(TESTS:.test=.dir) $(GEN_TESTS:.gen.test=.dir)
 
+.PHONY: check-valgrind-local
+check-valgrind-local: $(check_LIBRARIES) $(check_PROGRAMS)
+
 syscallent.i: $(top_builddir)/config.h $(top_srcdir)/$(OS)/$(ARCH)/syscallent.h
 	$(CPP) -P $(SCNO_CPPFLAGS) -include $^ -o $@
 
diff --git a/tests-mx32/add_key.c b/tests-mx32/add_key.c
index 1de0cc3..999da03 100644
--- a/tests-mx32/add_key.c
+++ b/tests-mx32/add_key.c
@@ -2,6 +2,7 @@
  * Check decoding of add_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/aio.c b/tests-mx32/aio.c
index 77b6c05..335bb31 100644
--- a/tests-mx32/aio.c
+++ b/tests-mx32/aio.c
@@ -239,11 +239,12 @@
 	if (rc != (long) nr)
 		perror_msg_and_skip("io_submit");
 	printf("io_submit(%#lx, %u, ["
-	       "{data=%#" PRI__x64 ", pread, reqprio=11, fildes=0, "
-		"buf=%p, nbytes=%u, offset=%" PRI__d64 "}, "
-	       "{data=%#" PRI__x64 ", pread, reqprio=22, fildes=0, "
-		"buf=%p, nbytes=%u, offset=%" PRI__d64 "}"
-	       "]) = %s\n",
+	       "{aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREAD"
+		", aio_reqprio=11, aio_fildes=0, aio_buf=%p, aio_nbytes=%u"
+		", aio_offset=%" PRI__d64
+	       "}, {aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREAD"
+		", aio_reqprio=22, aio_fildes=0, aio_buf=%p, aio_nbytes=%u"
+		", aio_offset=%" PRI__d64 "}]) = %s\n",
 	       *ctx, nr,
 	       cb[0].aio_data, data0, sizeof_data0, cb[0].aio_offset,
 	       cb[1].aio_data, data1, sizeof_data1, cb[1].aio_offset,
@@ -299,8 +300,9 @@
 	       sprintrc(rc));
 
 	rc = syscall(__NR_io_cancel, *ctx, cbc, ev);
-	printf("io_cancel(%#lx, {data=%#" PRI__x64
-	       ", pread, reqprio=99, fildes=-42}, %p) = %s\n",
+	printf("io_cancel(%#lx, {aio_data=%#" PRI__x64
+		", aio_lio_opcode=IOCB_CMD_PREAD, aio_reqprio=99"
+		", aio_fildes=-42}, %p) = %s\n",
 	       *ctx, cbc->aio_data, ev, sprintrc(rc));
 
 	rc = syscall(__NR_io_submit, (unsigned long) 0xfacef157beeff00dULL,
@@ -315,21 +317,25 @@
 
 	rc = syscall(__NR_io_submit, *ctx, 1057L, cbvs2);
 	printf("io_submit(%#lx, %ld, ["
-	       "{data=%#" PRI__x64 ", key=%u, %hu /* SUB_??? */, fildes=%d}, "
-	       "{key=%u, pwrite, reqprio=%hd, fildes=%d, str=NULL"
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64
+	       "{aio_data=%#" PRI__x64 ", aio_key=%u"
+		", aio_lio_opcode=%hu /* IOCB_CMD_??? */, aio_fildes=%d}"
+		", {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITE, aio_reqprio=%hd"
+		", aio_fildes=%d, aio_buf=NULL"
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
 # ifdef IOCB_FLAG_RESFD
-		", resfd=%d, flags=%#x"
+		", aio_resfd=%d, aio_flags=%#x"
 # endif
-		"}, "
-	       "{key=%u, pwrite, reqprio=%hd, fildes=%d, buf=%#" PRI__x64
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}, "
-	       "{key=%u, pwrite, reqprio=%hd, fildes=%d"
-		", str=\"\\0\\1\\2\\3%.28s\"..."
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}, "
-	       "{key=%u, pwritev, reqprio=%hd, fildes=%d, buf=%#" PRI__x64
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}"
-	       ", {NULL}, {%#lx}, %p]) = %s\n",
+	       "}, {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITE"
+		", aio_reqprio=%hd, aio_fildes=%d, aio_buf=%#" PRI__x64
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
+	       "}, {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITE"
+		", aio_reqprio=%hd, aio_fildes=%d"
+		", aio_buf=\"\\0\\1\\2\\3%.28s\"..."
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
+	       "}, {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITEV"
+		", aio_reqprio=%hd, aio_fildes=%d, aio_buf=%#" PRI__x64
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
+	       "}, {NULL}, {%#lx}, %p]) = %s\n",
 	       *ctx, 1057L,
 	       cbv2[0].aio_data, cbv2[0].aio_key,
 	       cbv2[0].aio_lio_opcode, cbv2[0].aio_fildes,
@@ -350,12 +356,14 @@
 	if (rc != (long) nr)
 		perror_msg_and_skip("io_submit");
 	printf("io_submit(%#lx, %u, ["
-	       "{data=%#" PRI__x64 ", preadv, reqprio=%hd, fildes=0, "
-		"iovec=[{iov_base=%p, iov_len=%u}"
-		", {iov_base=%p, iov_len=%u}], offset=%" PRI__d64 "}, "
-	       "{data=%#" PRI__x64 ", preadv, reqprio=%hd, fildes=0, "
-		"iovec=[{iov_base=%p, iov_len=%u}"
-		", {iov_base=%p, iov_len=%u}], offset=%" PRI__d64 "}"
+	       "{aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREADV"
+		", aio_reqprio=%hd, aio_fildes=0, "
+		"aio_buf=[{iov_base=%p, iov_len=%u}"
+	       ", {iov_base=%p, iov_len=%u}], aio_offset=%" PRI__d64 "}, "
+	       "{aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREADV"
+		", aio_reqprio=%hd, aio_fildes=0"
+		", aio_buf=[{iov_base=%p, iov_len=%u}"
+		", {iov_base=%p, iov_len=%u}], aio_offset=%" PRI__d64 "}"
 	       "]) = %s\n",
 	       *ctx, nr,
 	       cbv[0].aio_data, cbv[0].aio_reqprio,
diff --git a/tests-mx32/bpf-v.c b/tests-mx32/bpf-v.c
new file mode 100644
index 0000000..3f44f24
--- /dev/null
+++ b/tests-mx32/bpf-v.c
@@ -0,0 +1,3 @@
+/* This file is part of bpf-v strace test. */
+#define VERBOSE 1
+#include "bpf.c"
diff --git a/tests-mx32/bpf-v.gen.test b/tests-mx32/bpf-v.gen.test
new file mode 100755
index 0000000..e57154e
--- /dev/null
+++ b/tests-mx32/bpf-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-v -a20 -v -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -v -e trace=bpf
diff --git a/tests-mx32/bpf.c b/tests-mx32/bpf.c
index 40f96a7..bec30f8 100644
--- a/tests-mx32/bpf.c
+++ b/tests-mx32/bpf.c
@@ -1,4 +1,6 @@
 /*
+ * Check bpf syscall decoding.
+ *
  * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
  * All rights reserved.
  *
@@ -28,18 +30,25 @@
 #include "tests.h"
 #include <asm/unistd.h>
 
-#if defined HAVE_UNION_BPF_ATTR_LOG_BUF && defined __NR_bpf
+#if defined __NR_bpf				\
+ && (defined HAVE_UNION_BPF_ATTR_ATTACH_FLAGS	\
+  || defined HAVE_UNION_BPF_ATTR_BPF_FD		\
+  || defined HAVE_UNION_BPF_ATTR_FLAGS		\
+  || defined HAVE_UNION_BPF_ATTR_INNER_MAP_FD	\
+  || defined HAVE_UNION_BPF_ATTR_PROG_FLAGS)
+
+# include <stddef.h>
 # include <stdio.h>
 # include <stdint.h>
+# include <string.h>
 # include <unistd.h>
 # include <linux/bpf.h>
 
-static const struct bpf_insn insns[] = {
-	{ .code = BPF_JMP | BPF_EXIT }
-};
-
+static const kernel_ulong_t long_bits = (kernel_ulong_t) 0xfacefeed00000000ULL;
 static const char *errstr;
-static char log_buf[4096];
+static unsigned int sizeof_attr = sizeof(union bpf_attr);
+static unsigned int page_size;
+static unsigned long end_of_page;
 
 static long
 sys_bpf(kernel_ulong_t cmd, kernel_ulong_t attr, kernel_ulong_t size)
@@ -49,45 +58,374 @@
 	return rc;
 }
 
-static int
-map_create(void)
+# if VERBOSE
+#  define print_extra_data(addr_, size_) print_quoted_hex((addr_), (size_))
+# else
+#  define print_extra_data(addr_, size_) printf("...")
+#endif
+
+# define TEST_BPF_(cmd_, cmd_str_,					\
+		  init_first_, print_first_,				\
+		  init_attr_, print_attr_)				\
+	do {								\
+		/* zero addr */						\
+		sys_bpf(cmd_, 0, long_bits | sizeof(union bpf_attr));	\
+		printf("bpf(%s, NULL, %u) = %s\n",			\
+		       cmd_str_, sizeof_attr, errstr);			\
+									\
+		/* zero size */						\
+		unsigned long addr = end_of_page - sizeof_attr;		\
+		sys_bpf(cmd_, addr, long_bits);				\
+		printf("bpf(%s, %#lx, 0) = %s\n",			\
+		       cmd_str_, addr, errstr);				\
+									\
+		/* the first field only */				\
+		unsigned int offset = init_first_(end_of_page);		\
+		addr = end_of_page - offset;				\
+		sys_bpf(cmd_, addr, offset);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_first_(addr);					\
+		printf("}, %u) = %s\n", offset, errstr);		\
+									\
+		/* efault after the first field */			\
+		sys_bpf(cmd_, addr, offset + 1);			\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr, offset + 1, errstr);		\
+									\
+		/* the relevant part of union bpf_attr */		\
+		offset = init_attr_(end_of_page);			\
+		addr = end_of_page - offset;				\
+		sys_bpf(cmd_, addr, offset);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_attr_(addr);					\
+		printf("}, %u) = %s\n", offset, errstr);		\
+									\
+		/* short read of the relevant part of union bpf_attr */	\
+		sys_bpf(cmd_, addr + 1, offset);			\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr + 1, offset, errstr);		\
+									\
+		if (offset < sizeof_attr) {				\
+			/* short read of the whole union bpf_attr */	\
+			memmove((void *) end_of_page - sizeof_attr + 1,	\
+				(void *) addr, offset);			\
+			addr = end_of_page - sizeof_attr + 1;		\
+			memset((void *) addr + offset, 0,		\
+			       sizeof_attr - offset - 1);		\
+			sys_bpf(cmd_, addr, sizeof_attr);		\
+			printf("bpf(%s, %#lx, %u) = %s\n",		\
+			       cmd_str_, addr, sizeof_attr, errstr);	\
+									\
+			/* the whole union bpf_attr */			\
+			memmove((void *) end_of_page - sizeof_attr,	\
+				(void *) addr, offset);			\
+			addr = end_of_page - sizeof_attr;		\
+			memset((void *) addr + offset, 0,		\
+			       sizeof_attr - offset);			\
+			sys_bpf(cmd_, addr, sizeof_attr);		\
+			printf("bpf(%s, {", cmd_str_);			\
+			print_attr_(addr);				\
+			printf("}, %u) = %s\n", sizeof_attr, errstr);	\
+									\
+			/* non-zero bytes after the relevant part */	\
+			fill_memory_ex((void *) addr + offset,		\
+				       sizeof_attr - offset, '0', 10);	\
+			sys_bpf(cmd_, addr, sizeof_attr);		\
+			printf("bpf(%s, {", cmd_str_);			\
+			print_attr_(addr);				\
+			printf(", ");					\
+			print_extra_data((void *) addr + offset,	\
+					 sizeof_attr - offset);		\
+			printf("}, %u) = %s\n", sizeof_attr, errstr);	\
+		}							\
+									\
+		/* short read of the whole page */			\
+		memmove((void *) end_of_page - page_size + 1,		\
+			(void *) addr, offset);				\
+		addr = end_of_page - page_size + 1;			\
+		memset((void *) addr + offset, 0,			\
+		       page_size - offset - 1);				\
+		sys_bpf(cmd_, addr, page_size);				\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr, page_size, errstr);		\
+									\
+		/* the whole page */					\
+		memmove((void *) end_of_page - page_size,		\
+			(void *) addr, offset);				\
+		addr = end_of_page - page_size;				\
+		memset((void *) addr + offset, 0, page_size - offset);	\
+		sys_bpf(cmd_, addr, page_size);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_attr_(addr);					\
+		printf("}, %u) = %s\n", page_size, errstr);		\
+									\
+		/* non-zero bytes after the whole union bpf_attr */	\
+		fill_memory_ex((void *) addr + offset,			\
+			       page_size - offset, '0', 10);		\
+		sys_bpf(cmd_, addr, page_size);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_attr_(addr);					\
+		printf(", ");						\
+		print_extra_data((void *) addr + offset,		\
+				 page_size - offset);			\
+		printf("}, %u) = %s\n", page_size, errstr);		\
+									\
+		/* more than a page */					\
+		sys_bpf(cmd_, addr, page_size + 1);			\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr, page_size + 1, errstr);		\
+	} while (0)							\
+	/* End of TEST_BPF_ definition. */
+
+# define TEST_BPF(cmd_)							\
+	TEST_BPF_((cmd_), #cmd_,					\
+		  init_ ## cmd_ ## _first, print_ ## cmd_ ## _first,	\
+		  init_ ## cmd_ ## _attr, print_ ## cmd_ ## _attr)	\
+	/* End of TEST_BPF definition. */
+
+# ifdef HAVE_UNION_BPF_ATTR_INNER_MAP_FD
+
+static unsigned int
+init_BPF_MAP_CREATE_first(const unsigned long eop)
 {
-	union bpf_attr attr = {
-		.key_size = 4,
-		.value_size = 8,
-		.max_entries = 256
-	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(BPF_MAP_CREATE, (unsigned long) t_attr, sizeof(attr));
+	static const union bpf_attr attr = { .map_type = 2 };
+	static const unsigned int offset = sizeof(attr.map_type);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.map_type, offset);
+	return offset;
 }
 
-static int
-map_any(int cmd)
+static void
+print_BPF_MAP_CREATE_first(const unsigned long addr)
 {
-	union bpf_attr attr = {
+	printf("map_type=BPF_MAP_TYPE_ARRAY, key_size=0, value_size=0"
+	       ", max_entries=0, map_flags=0, inner_map_fd=0");
+}
+
+static unsigned int
+init_BPF_MAP_CREATE_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_type = 1,
+		.key_size = 4,
+		.value_size = 8,
+		.max_entries = 256,
+		.map_flags = 1,
+		.inner_map_fd = -1
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, inner_map_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_CREATE_attr(const unsigned long addr)
+{
+	printf("map_type=BPF_MAP_TYPE_HASH, key_size=4"
+	       ", value_size=8, max_entries=256"
+	       ", map_flags=BPF_F_NO_PREALLOC, inner_map_fd=-1");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_INNER_MAP_FD */
+
+# ifdef HAVE_UNION_BPF_ATTR_FLAGS
+
+static unsigned int
+init_BPF_MAP_LOOKUP_ELEM_first(const unsigned long eop)
+{
+	static const union bpf_attr attr = { .map_fd = -1 };
+	static const unsigned int offset = sizeof(attr.map_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.map_fd, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_LOOKUP_ELEM_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0, value=0");
+}
+
+static unsigned int
+init_BPF_MAP_LOOKUP_ELEM_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
 		.map_fd = -1,
 		.key = 0xdeadbeef,
 		.value = 0xbadc0ded
 	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(cmd, (unsigned long) t_attr, sizeof(attr));
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, value);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
 }
 
-static int
-prog_load(void)
+static void
+print_BPF_MAP_LOOKUP_ELEM_attr(const unsigned long addr)
 {
-	union bpf_attr attr = {
-		.insn_cnt = sizeof(insns) / sizeof(insns[0]),
-		.insns = (unsigned long) insns,
-		.license = (unsigned long) "GPL",
+	printf("map_fd=-1, key=0xdeadbeef, value=0xbadc0ded");
+}
+
+#  define init_BPF_MAP_UPDATE_ELEM_first init_BPF_MAP_LOOKUP_ELEM_first
+
+static void
+print_BPF_MAP_UPDATE_ELEM_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0, value=0, flags=BPF_ANY");
+}
+
+static unsigned int
+init_BPF_MAP_UPDATE_ELEM_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_fd = -1,
+		.key = 0xdeadbeef,
+		.value = 0xbadc0ded,
+		.flags = 2
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, flags);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_UPDATE_ELEM_attr(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0xdeadbeef, value=0xbadc0ded, flags=BPF_EXIST");
+}
+
+#  define init_BPF_MAP_DELETE_ELEM_first init_BPF_MAP_LOOKUP_ELEM_first
+
+static void
+print_BPF_MAP_DELETE_ELEM_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0");
+}
+
+static unsigned int
+init_BPF_MAP_DELETE_ELEM_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_fd = -1,
+		.key = 0xdeadbeef
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, key);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_DELETE_ELEM_attr(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0xdeadbeef");
+}
+
+#  define init_BPF_MAP_GET_NEXT_KEY_first init_BPF_MAP_LOOKUP_ELEM_first
+
+static void
+print_BPF_MAP_GET_NEXT_KEY_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0, next_key=0");
+}
+
+static unsigned int
+init_BPF_MAP_GET_NEXT_KEY_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_fd = -1,
+		.key = 0xdeadbeef,
+		.next_key = 0xbadc0ded
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, next_key);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_GET_NEXT_KEY_attr(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0xdeadbeef, next_key=0xbadc0ded");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_FLAGS */
+
+# ifdef HAVE_UNION_BPF_ATTR_PROG_FLAGS
+
+static unsigned int
+init_BPF_PROG_LOAD_first(const unsigned long eop)
+{
+	static const union bpf_attr attr = { .prog_type = 1 };
+	static const unsigned int offset = sizeof(attr.prog_type);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.prog_type, offset);
+	return offset;
+}
+
+static void
+print_BPF_PROG_LOAD_first(const unsigned long addr)
+{
+
+	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=0, insns=0"
+	       ", license=NULL, log_level=0, log_size=0, log_buf=0"
+	       ", kern_version=0, prog_flags=0");
+}
+
+static const struct bpf_insn insns[] = {
+	{ .code = BPF_JMP | BPF_EXIT }
+};
+static char log_buf[4096];
+
+static unsigned int
+init_BPF_PROG_LOAD_attr(const unsigned long eop)
+{
+	const union bpf_attr attr = {
+		.prog_type = 1,
+		.insn_cnt = ARRAY_SIZE(insns),
+		.insns = (uintptr_t) insns,
+		.license = (uintptr_t) "GPL",
 		.log_level = 42,
 		.log_size = sizeof(log_buf),
-		.log_buf = (unsigned long) log_buf
+		.log_buf = (uintptr_t) log_buf,
+		.kern_version = 0xcafef00d,
+		.prog_flags = 1
 	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(BPF_PROG_LOAD, (unsigned long) t_attr, sizeof(attr));
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, prog_flags);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
 }
 
+static void
+print_BPF_PROG_LOAD_attr(const unsigned long addr)
+{
+	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=%u, insns=%p"
+	       ", license=\"GPL\", log_level=42, log_size=4096, log_buf=%p"
+	       ", kern_version=%u, prog_flags=BPF_F_STRICT_ALIGNMENT",
+	       (unsigned int) ARRAY_SIZE(insns), insns,
+	       log_buf, 0xcafef00d);
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_PROG_FLAGS */
+
 /*
  * bpf() syscall and its first six commands were introduced in Linux kernel
  * 3.18. Some additional commands were added afterwards, so we need to take
@@ -96,134 +434,165 @@
  * BPF_OBJ_PIN and BPF_OBJ_GET commands appear in kernel 4.4.
  */
 # ifdef HAVE_UNION_BPF_ATTR_BPF_FD
-static int
-obj_manage(int cmd)
+
+static unsigned int
+init_BPF_OBJ_PIN_first(const unsigned long eop)
 {
-	union bpf_attr attr = {
-		.pathname = (unsigned long) "/sys/fs/bpf/foo/bar",
+	static const union bpf_attr attr = {};
+	static const unsigned int offset = sizeof(attr.pathname);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.pathname, offset);
+	return offset;
+}
+
+static void
+print_BPF_OBJ_PIN_first(const unsigned long addr)
+{
+
+	printf("pathname=NULL, bpf_fd=0");
+}
+
+static unsigned int
+init_BPF_OBJ_PIN_attr(const unsigned long eop)
+{
+	const union bpf_attr attr = {
+		.pathname = (uintptr_t) "/sys/fs/bpf/foo/bar",
 		.bpf_fd = -1
 	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(cmd, (unsigned long) t_attr, sizeof(attr));
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, bpf_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
 }
-# endif
+
+static void
+print_BPF_OBJ_PIN_attr(const unsigned long addr)
+{
+	printf("pathname=\"/sys/fs/bpf/foo/bar\", bpf_fd=-1");
+}
+
+#  define init_BPF_OBJ_GET_first init_BPF_OBJ_PIN_first
+#  define print_BPF_OBJ_GET_first print_BPF_OBJ_PIN_first
+#  define init_BPF_OBJ_GET_attr init_BPF_OBJ_PIN_attr
+#  define print_BPF_OBJ_GET_attr print_BPF_OBJ_PIN_attr
+
+# endif /* HAVE_UNION_BPF_ATTR_BPF_FD */
 
 /* BPF_PROG_ATTACH and BPF_PROG_DETACH commands appear in kernel 4.10. */
 # ifdef HAVE_UNION_BPF_ATTR_ATTACH_FLAGS
-static int
-prog_cgroup(int cmd)
-{
-	union bpf_attr attr = {
-		.target_fd = -1,
-		.attach_bpf_fd = -1,
-		.attach_type = 0,
-		.attach_flags = 1
-	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(cmd, (unsigned long) t_attr, sizeof(attr));
-}
-# endif
 
-static unsigned long efault;
+static unsigned int
+init_BPF_PROG_ATTACH_first(const unsigned long eop)
+{
+	static const union bpf_attr attr = { .target_fd = -1 };
+	static const unsigned int offset = sizeof(attr.target_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.target_fd, offset);
+	return offset;
+}
 
 static void
-bogus_bpf(int cmd, const char *name)
+print_BPF_PROG_ATTACH_first(const unsigned long addr)
 {
-	const unsigned long bogus_size = 1024;
-	const unsigned long bogus_addr = efault - bogus_size;
-
-	sys_bpf(cmd, efault, 4);
-	printf("bpf(%s, %#lx, %lu) = %s\n",
-	       name, efault, 4UL, errstr);
-
-	sys_bpf(cmd, efault, bogus_size);
-	printf("bpf(%s, %#lx, %lu) = %s\n",
-	       name, efault, bogus_size, errstr);
-
-	sys_bpf(cmd, bogus_addr, 0);
-	printf("bpf(%s, %#lx, %lu) = %s\n",
-	       name, bogus_addr, 0UL, errstr);
+	printf("target_fd=-1, attach_bpf_fd=0"
+	       ", attach_type=BPF_CGROUP_INET_INGRESS, attach_flags=0");
 }
 
-#define BOGUS_BPF(cmd)	bogus_bpf(cmd, #cmd)
+static unsigned int
+init_BPF_PROG_ATTACH_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.target_fd = -1,
+		.attach_bpf_fd = -2,
+		.attach_type = 2,
+		.attach_flags = 1
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, attach_flags);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_PROG_ATTACH_attr(const unsigned long addr)
+{
+	printf("target_fd=-1, attach_bpf_fd=-2"
+	       ", attach_type=BPF_CGROUP_INET_SOCK_CREATE"
+	       ", attach_flags=BPF_F_ALLOW_OVERRIDE");
+}
+
+#  define init_BPF_PROG_DETACH_first init_BPF_PROG_ATTACH_first
+
+static unsigned int
+init_BPF_PROG_DETACH_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.target_fd = -1,
+		.attach_type = 2
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, attach_type);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+
+static void
+print_BPF_PROG_DETACH_first(const unsigned long addr)
+{
+	printf("target_fd=-1, attach_type=BPF_CGROUP_INET_INGRESS");
+}
+
+static void
+print_BPF_PROG_DETACH_attr(const unsigned long addr)
+{
+	printf("target_fd=-1, attach_type=BPF_CGROUP_INET_SOCK_CREATE");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_ATTACH_FLAGS */
 
 int
 main(void)
 {
-	efault = (unsigned long) tail_alloc(1) + 1;
+	page_size = get_page_size();
+	end_of_page = (unsigned long) tail_alloc(1) + 1;
 
-	map_create();
-	printf("bpf(BPF_MAP_CREATE"
-	       ", {map_type=BPF_MAP_TYPE_UNSPEC, key_size=4"
-	       ", value_size=8, max_entries=256}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_CREATE);
+# ifdef HAVE_UNION_BPF_ATTR_INNER_MAP_FD
+	TEST_BPF(BPF_MAP_CREATE);
+# endif
 
-	map_any(BPF_MAP_LOOKUP_ELEM);
-	printf("bpf(BPF_MAP_LOOKUP_ELEM"
-	       ", {map_fd=-1, key=0xdeadbeef}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_LOOKUP_ELEM);
+# ifdef HAVE_UNION_BPF_ATTR_FLAGS
+	TEST_BPF(BPF_MAP_LOOKUP_ELEM);
+	TEST_BPF(BPF_MAP_UPDATE_ELEM);
+	TEST_BPF(BPF_MAP_DELETE_ELEM);
+	TEST_BPF(BPF_MAP_GET_NEXT_KEY);
+# endif
 
-	map_any(BPF_MAP_UPDATE_ELEM);
-	printf("bpf(BPF_MAP_UPDATE_ELEM"
-	       ", {map_fd=-1, key=0xdeadbeef"
-	       ", value=0xbadc0ded, flags=BPF_ANY}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_UPDATE_ELEM);
-
-	map_any(BPF_MAP_DELETE_ELEM);
-	printf("bpf(BPF_MAP_DELETE_ELEM"
-	       ", {map_fd=-1, key=0xdeadbeef}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_DELETE_ELEM);
-
-	map_any(BPF_MAP_GET_NEXT_KEY);
-	printf("bpf(BPF_MAP_GET_NEXT_KEY"
-	       ", {map_fd=-1, key=0xdeadbeef}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_GET_NEXT_KEY);
-
-	prog_load();
-	printf("bpf(BPF_PROG_LOAD"
-	       ", {prog_type=BPF_PROG_TYPE_UNSPEC, insn_cnt=1, insns=%p"
-	       ", license=\"GPL\", log_level=42, log_size=4096, log_buf=%p"
-	       ", kern_version=0}, %u) = %s\n",
-	       insns, log_buf, (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_PROG_LOAD);
+# ifdef HAVE_UNION_BPF_ATTR_PROG_FLAGS
+	TEST_BPF(BPF_PROG_LOAD);
+# endif
 
 # ifdef HAVE_UNION_BPF_ATTR_BPF_FD
-	obj_manage(BPF_OBJ_PIN);
-	printf("bpf(BPF_OBJ_PIN"
-	       ", {pathname=\"/sys/fs/bpf/foo/bar\", bpf_fd=-1}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_OBJ_PIN);
-
-	obj_manage(BPF_OBJ_GET);
-	printf("bpf(BPF_OBJ_GET"
-	       ", {pathname=\"/sys/fs/bpf/foo/bar\", bpf_fd=-1}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_OBJ_GET);
+	TEST_BPF(BPF_OBJ_PIN);
+	TEST_BPF(BPF_OBJ_GET);
 # endif
 
 # ifdef HAVE_UNION_BPF_ATTR_ATTACH_FLAGS
-	prog_cgroup(BPF_PROG_ATTACH);
-	printf("bpf(BPF_PROG_ATTACH"
-	       ", {target_fd=-1, attach_bpf_fd=-1"
-	       ", attach_type=BPF_CGROUP_INET_INGRESS"
-	       ", attach_flags=BPF_F_ALLOW_OVERRIDE}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_PROG_ATTACH);
-
-	prog_cgroup(BPF_PROG_DETACH);
-	printf("bpf(BPF_PROG_DETACH"
-	       ", {target_fd=-1, attach_type=BPF_CGROUP_INET_INGRESS}, %u)"
-	       " = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_PROG_DETACH);
+	TEST_BPF(BPF_PROG_ATTACH);
+	TEST_BPF(BPF_PROG_DETACH);
 # endif
 
-	bogus_bpf(0xfacefeed, "0xfacefeed /* BPF_??? */");
+	sys_bpf(0xfacefeed, end_of_page, 40);
+	printf("bpf(0xfacefeed /* BPF_??? */, %#lx, 40) = %s\n",
+	       end_of_page, errstr);
 
 	puts("+++ exited with 0 +++");
 	return 0;
@@ -231,6 +600,6 @@
 
 #else
 
-SKIP_MAIN_UNDEFINED("__NR_bpf")
+SKIP_MAIN_UNDEFINED("__NR_bpf && HAVE_UNION_BPF_ATTR_*")
 
 #endif
diff --git a/tests-mx32/clone_parent.c b/tests-mx32/clone_parent.c
new file mode 100644
index 0000000..2ec954e
--- /dev/null
+++ b/tests-mx32/clone_parent.c
@@ -0,0 +1,80 @@
+/*
+ * Check handling of CLONE_PARENT'ed processes.
+ *
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+static int
+child(void *const arg)
+{
+	return 42;
+}
+
+#define child_stack_size	(get_page_size() / 2)
+
+#ifdef IA64
+extern int __clone2(int (*)(void *), void *, size_t, int, void *, ...);
+# define clone(fn, child_stack, flags, arg)	\
+		__clone2(fn, child_stack, child_stack_size, flags, arg)
+#endif
+
+int
+main(void)
+{
+	const pid_t pid = clone(child, tail_alloc(child_stack_size),
+				CLONE_PARENT | SIGCHLD, 0);
+	if (pid < 0)
+		perror_msg_and_fail("clone");
+
+	int status;
+	if (wait(&status) >= 0)
+		error_msg_and_fail("unexpected return code from wait");
+
+	while (!kill(pid, 0))
+		;
+	if (errno != ESRCH)
+		perror_msg_and_fail("kill");
+
+	FILE *const fp = fdopen(3, "a");
+	if (!fp)
+		perror_msg_and_fail("fdopen");
+	if (fprintf(fp, "%s: Exit of unknown pid %d ignored\n",
+		    getenv("STRACE_EXE") ?: "strace", pid) < 0)
+		perror_msg_and_fail("fprintf");
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/clone_parent.test b/tests-mx32/clone_parent.test
new file mode 100755
index 0000000..66b3bbb
--- /dev/null
+++ b/tests-mx32/clone_parent.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Check handling of CLONE_PARENT'ed processes.
+. "${srcdir=.}/clone_ptrace.test"
diff --git a/tests-mx32/clone_ptrace.c b/tests-mx32/clone_ptrace.c
new file mode 100644
index 0000000..48c099a
--- /dev/null
+++ b/tests-mx32/clone_ptrace.c
@@ -0,0 +1,110 @@
+/*
+ * Check handling of CLONE_PTRACE'ed processes.
+ *
+ * Copyright (c) 2015-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+static siginfo_t sinfo;
+
+static void
+handler(const int no, siginfo_t *const si, void *const uc)
+{
+	memcpy(&sinfo, si, sizeof(sinfo));
+}
+
+static int
+child(void *const arg)
+{
+	for(;;)
+		pause();
+	return 0;
+}
+
+#define child_stack_size	(get_page_size() / 2)
+
+#ifdef IA64
+extern int __clone2(int (*)(void *), void *, size_t, int, void *, ...);
+# define clone(fn, child_stack, flags, arg)	\
+		__clone2(fn, child_stack, child_stack_size, flags, arg)
+#endif
+
+int
+main(void)
+{
+	const int sig = SIGUSR1;
+	sigset_t mask;
+	sigemptyset(&mask);
+	sigaddset(&mask, sig);
+	if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
+		perror_msg_and_fail("sigprocmask");
+
+	const pid_t pid = clone(child, tail_alloc(child_stack_size),
+				CLONE_PTRACE | SIGCHLD, 0);
+	if (pid < 0)
+		perror_msg_and_fail("clone");
+
+	static const struct sigaction sa = {
+		.sa_sigaction = handler,
+		.sa_flags = SA_SIGINFO
+	};
+	if (sigaction(SIGCHLD, &sa, NULL))
+		perror_msg_and_fail("sigaction");
+
+	kill(pid, sig);
+
+	FILE *const fp = fdopen(3, "a");
+	if (!fp)
+		perror_msg_and_fail("fdopen");
+	if (fprintf(fp, "%s: Detached unknown pid %d\n",
+		    getenv("STRACE_EXE") ?: "strace", pid) < 0)
+		perror_msg_and_fail("fprintf");
+
+	int status;
+	while (wait(&status) != pid) {
+		if (errno != EINTR)
+			perror_msg_and_fail("wait");
+	}
+	if (!WIFSIGNALED(status) || WTERMSIG(status) != sig)
+		error_msg_and_fail("unexpected child exit status %d", status);
+
+	printf("--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=%d"
+	       ", si_uid=%u, si_status=%s, si_utime=%u, si_stime=%u} ---\n"
+	       "+++ exited with 0 +++\n", pid, geteuid(), "SIGUSR1",
+	       (unsigned int) sinfo.si_utime, (unsigned int) sinfo.si_stime);
+
+	return 0;
+}
diff --git a/tests-mx32/clone_ptrace.test b/tests-mx32/clone_ptrace.test
new file mode 100755
index 0000000..a1f0237
--- /dev/null
+++ b/tests-mx32/clone_ptrace.test
@@ -0,0 +1,17 @@
+#!/bin/sh -efu
+# Check handling of CLONE_PTRACE'ed processes.
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null 3>&1
+args="-e trace=none $args"
+> "$LOG" || fail_ "failed to write $LOG"
+
+$STRACE -o "$LOG" $args > "$EXP" 2> "$OUT"-err 3> "$EXP"-err || {
+	msg="$STRACE $args failed with code $?"
+	cat "$OUT"-err "$LOG" >&2
+	fail_ "$msg"
+}
+
+cat "$OUT"-err >&2
+match_diff "$LOG" "$EXP"
+match_diff "$OUT"-err "$EXP"-err
diff --git a/tests-mx32/errno2name.c b/tests-mx32/errno2name.c
index d481e2e..2354afc 100644
--- a/tests-mx32/errno2name.c
+++ b/tests-mx32/errno2name.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/fflush.c b/tests-mx32/fflush.c
new file mode 100644
index 0000000..84a62ec
--- /dev/null
+++ b/tests-mx32/fflush.c
@@ -0,0 +1,42 @@
+/*
+ * Check fflush error diagnostics.
+ *
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main(void)
+{
+	errno = ENOSPC;
+	printf("%s: /dev/full: %m\n", getenv("STRACE_EXE") ?: "strace");
+	return 0;
+}
diff --git a/tests-mx32/fflush.test b/tests-mx32/fflush.test
new file mode 100755
index 0000000..c0f4e3f
--- /dev/null
+++ b/tests-mx32/fflush.test
@@ -0,0 +1,41 @@
+#!/bin/sh -efu
+#
+# Check fflush error diagnostics.
+#
+# Copyright (c) 2011-2017 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null
+args="-o /dev/full -e trace=none $args"
+
+$STRACE $args > "$EXP" 2> "$LOG" || {
+	msg="$STRACE $args failed with code $?"
+	cat "$LOG" >&2
+	fail_ "$msg"
+}
+
+match_diff "$LOG" "$EXP"
diff --git a/tests-mx32/futimesat.c b/tests-mx32/futimesat.c
index 733fd09..666ebdd 100644
--- a/tests-mx32/futimesat.c
+++ b/tests-mx32/futimesat.c
@@ -118,7 +118,7 @@
 	tv[0].tv_sec = 0xdeadbeefU;
 	tv[0].tv_usec = 0xfacefeedU;
 	tv[1].tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv[1].tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv[1].tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 
 	k_futimesat(kfdcwd, kfname, (uintptr_t) tv);
 	printf("futimesat(AT_FDCWD, %s, [", qname);
diff --git a/tests-mx32/gen_tests.am b/tests-mx32/gen_tests.am
index f1b34dd..583a0ae 100644
--- a/tests-mx32/gen_tests.am
+++ b/tests-mx32/gen_tests.am
@@ -1,5 +1,5 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
-GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_generic.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nlattr_inet_diag_msg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
+GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test group_req.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_crypto.gen.test netlink_generic.gen.test netlink_kobject_uevent.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test nlattr_inet_diag_msg.gen.test nlattr_inet_diag_req_compat.gen.test nlattr_inet_diag_req_v2.gen.test nlattr_ndmsg.gen.test nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test printpath-umovestr.gen.test printpath-umovestr-peekdata.gen.test printpath-umovestr-undumpable.gen.test printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test printstrn-umoven-undumpable.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
 
 $(srcdir)/_newselect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
@@ -31,6 +31,9 @@
 $(srcdir)/bpf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/btrfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -271,6 +274,9 @@
 $(srcdir)/getxxid.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/group_req.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/inet-cmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -481,9 +487,15 @@
 $(srcdir)/netlink_audit.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_crypto.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_generic.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_kobject_uevent.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_netfilter.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -505,12 +517,78 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_br_port_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_dcbmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_fib_rule_hdr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrlblmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_brport.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_xdp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_inet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_inet_diag_req_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_netconfmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_netlink_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_nlmsgerr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_packet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtgenmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_unix_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -580,6 +658,24 @@
 $(srcdir)/printstr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/printpath-umovestr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/prlimit64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -823,6 +919,15 @@
 $(srcdir)/sigsuspend.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_linger.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/socketcall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests-mx32/gen_tests.in b/tests-mx32/gen_tests.in
index 57fd5fd..8592e28 100644
--- a/tests-mx32/gen_tests.in
+++ b/tests-mx32/gen_tests.in
@@ -35,6 +35,7 @@
 aio	-a14 -e trace=io_setup,io_submit,io_getevents,io_cancel,io_destroy
 alarm	-a10
 bpf	-a20
+bpf-v	-a20 -v -e trace=bpf
 btrfs	+ioctl.test
 chmod	-a28
 chown	-a28
@@ -115,6 +116,7 @@
 gettid	-a9
 getuid32	+getuid.test
 getxxid	-a10 -e trace=getxpid,getxuid,getxgid
+group_req	-e trace=setsockopt
 inet-cmsg	-e trace=recvmsg
 init_module	-a27
 inotify	-a23 -e trace=inotify_add_watch,inotify_rm_watch
@@ -185,7 +187,9 @@
 net-icmp_filter	-e trace=getsockopt,setsockopt
 net-sockaddr	-a24 -e trace=connect
 netlink_audit	+netlink_sock_diag.test
+netlink_crypto	+netlink_sock_diag.test
 netlink_generic	+netlink_sock_diag.test
+netlink_kobject_uevent	+netlink_sock_diag.test
 netlink_netfilter	+netlink_sock_diag.test
 netlink_protocol	-e trace=sendto
 netlink_route	+netlink_sock_diag.test
@@ -193,8 +197,30 @@
 netlink_xfrm	+netlink_sock_diag.test
 newfstatat	-a32 -v -P stat.sample -P /dev/full
 nlattr		+netlink_sock_diag.test
+nlattr_crypto_user_alg		+netlink_sock_diag.test
+nlattr_br_port_msg		+netlink_sock_diag.test
+nlattr_dcbmsg			+netlink_sock_diag.test
+nlattr_fib_rule_hdr		+netlink_sock_diag.test
+nlattr_ifaddrlblmsg		+netlink_sock_diag.test
+nlattr_ifaddrmsg		+netlink_sock_diag.test
+nlattr_ifinfomsg		+netlink_sock_diag.test
+nlattr_ifla_brport		+netlink_sock_diag.test
+nlattr_ifla_port		+netlink_sock_diag.test
+nlattr_ifla_xdp			+netlink_sock_diag.test
 nlattr_inet_diag_msg		+netlink_sock_diag.test
+nlattr_inet_diag_req_compat	+netlink_sock_diag.test
+nlattr_inet_diag_req_v2		+netlink_sock_diag.test
+nlattr_ndmsg			+netlink_sock_diag.test
+nlattr_ndtmsg			+netlink_sock_diag.test
+nlattr_netconfmsg		+netlink_sock_diag.test
 nlattr_netlink_diag_msg		+netlink_sock_diag.test
+nlattr_nlmsgerr			+netlink_sock_diag.test
+nlattr_packet_diag_msg		+netlink_sock_diag-v.sh
+nlattr_rtgenmsg			+netlink_sock_diag.test
+nlattr_rtmsg			+netlink_sock_diag.test
+nlattr_smc_diag_msg		+netlink_sock_diag.test
+nlattr_tcamsg			+netlink_sock_diag.test
+nlattr_tcmsg			+netlink_sock_diag.test
 nlattr_unix_diag_msg		+netlink_sock_diag.test
 old_mmap	-a11 -e trace=mmap
 oldfstat	-a18 -v -P stat.sample
@@ -218,6 +244,12 @@
 preadv-pwritev	-a19 -eread=0 -ewrite=1 -e trace=preadv,pwritev
 preadv2-pwritev2	-a22 -eread=0 -ewrite=1 -e trace=preadv2,pwritev2
 printstr	-e trace=writev
+printpath-umovestr	-a11 -e signal=none -e trace=chdir
+printpath-umovestr-peekdata	-a11 -e signal=none -e trace=chdir
+printpath-umovestr-undumpable	-a11 -e signal=none -e trace=chdir
+printstrn-umoven	-s4096 -e signal=none -e trace=add_key
+printstrn-umoven-peekdata	-e signal=none -e trace=add_key
+printstrn-umoven-undumpable	-e signal=none -e trace=add_key
 prlimit64
 process_vm_readv	-s5 -a37
 process_vm_writev	-s5 -a38
@@ -299,6 +331,9 @@
 sigprocmask	-a34
 sigreturn	-esignal='!USR1'
 sigsuspend	-a19 -esignal=none
+so_linger	-e trace=getsockopt,setsockopt
+so_peercred	-e trace=getsockopt
+sock_filter-v	-v -e trace=getsockopt,setsockopt
 socketcall	-a20
 splice
 stat	-a32 -v -P stat.sample -P /dev/full
diff --git a/tests-mx32/getcwd.c b/tests-mx32/getcwd.c
index 707c25c..0c32f8d 100644
--- a/tests-mx32/getcwd.c
+++ b/tests-mx32/getcwd.c
@@ -20,9 +20,9 @@
 	if (res <= 0)
 		perror_msg_and_fail("getcwd");
 
-	printf("getcwd(\"");
+	printf("getcwd(");
 	print_quoted_string(cur_dir);
-	printf("\", %zu) = %ld\n", sizeof(cur_dir), res);
+	printf(", %zu) = %ld\n", sizeof(cur_dir), res);
 
 	res = syscall(__NR_getcwd, cur_dir, 0);
 	printf("getcwd(%p, 0) = %s\n", cur_dir, sprintrc(res));
diff --git a/tests-mx32/group_req.c b/tests-mx32/group_req.c
new file mode 100644
index 0000000..946fe5c
--- /dev/null
+++ b/tests-mx32/group_req.c
@@ -0,0 +1,160 @@
+/*
+ * Check decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <net/if.h>
+#include <netinet/in.h>
+
+#if defined MCAST_JOIN_GROUP && defined MCAST_LEAVE_GROUP
+
+# include <stdio.h>
+# include <unistd.h>
+# include <sys/param.h>
+# include <sys/socket.h>
+# include <arpa/inet.h>
+
+#define	multi4addr	"224.0.0.3"
+#define	multi6addr	"ff01::c"
+
+static const char *errstr;
+
+static int
+set_opt(const int fd, const int level, const int opt,
+	const void *const val, const socklen_t len)
+{
+	int rc = setsockopt(fd, level, opt, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct group_req, greq4);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct group_req, greq6);
+	unsigned int i;
+
+	greq6->gr_interface = greq4->gr_interface = ifindex_lo();
+	if (!greq4->gr_interface)
+		perror_msg_and_skip("lo");
+
+	greq4->gr_group.ss_family = AF_INET;
+	inet_pton(AF_INET, multi4addr, &greq4->gr_group.ss_family + 2);
+
+	greq6->gr_group.ss_family = AF_INET6;
+	inet_pton(AF_INET6, multi6addr, &greq6->gr_group.ss_family + 4);
+
+	(void) close(0);
+	if (socket(AF_INET, SOCK_DGRAM, 0))
+		perror_msg_and_skip("socket");
+
+	struct {
+		const int level;
+		const char *const str_level;
+		const int name;
+		const char *const str_name;
+		const struct group_req *const val;
+		const char *const addr;
+	} opts[] = {
+		{
+			ARG_STR(SOL_IP), ARG_STR(MCAST_JOIN_GROUP), greq4,
+			"gr_group={sa_family=AF_INET, sin_port=htons(65535)"
+			", sin_addr=inet_addr(\"" multi4addr "\")}"
+		},
+		{
+			ARG_STR(SOL_IP), ARG_STR(MCAST_LEAVE_GROUP), greq4,
+			"gr_group={sa_family=AF_INET, sin_port=htons(65535)"
+			", sin_addr=inet_addr(\"" multi4addr "\")}"
+		},
+		{
+			ARG_STR(SOL_IPV6), ARG_STR(MCAST_JOIN_GROUP), greq6,
+			"gr_group={sa_family=AF_INET6, sin6_port=htons(65535)"
+			", inet_pton(AF_INET6, \"" multi6addr "\", &sin6_addr)"
+			", sin6_flowinfo=htonl(4294967295)"
+			", sin6_scope_id=4294967295}"
+		},
+		{
+			ARG_STR(SOL_IPV6), ARG_STR(MCAST_LEAVE_GROUP), greq6,
+			"gr_group={sa_family=AF_INET6, sin6_port=htons(65535)"
+			", inet_pton(AF_INET6, \"" multi6addr "\", &sin6_addr)"
+			", sin6_flowinfo=htonl(4294967295)"
+			", sin6_scope_id=4294967295}"
+		}
+	};
+
+	for (i = 0; i < ARRAY_SIZE(opts); ++i) {
+		/* optlen < 0, EINVAL */
+		set_opt(0, opts[i].level, opts[i].name, opts[i].val, -1U);
+		printf("setsockopt(0, %s, %s, %p, -1) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, errstr);
+
+		/* optlen < sizeof(struct group_req), EINVAL */
+		set_opt(0, opts[i].level, opts[i].name, opts[i].val,
+			sizeof(*opts[i].val) - 1);
+		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, (unsigned int) sizeof(*opts[i].val) - 1,
+		       errstr);
+
+		/* optval EFAULT */
+		set_opt(0, opts[i].level, opts[i].name,
+			(const char *) opts[i].val + 1, sizeof(*opts[i].val));
+		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       (const char *) opts[i].val + 1,
+		       (unsigned int) sizeof(*opts[i].val), errstr);
+
+		/* classic */
+		set_opt(0, opts[i].level, opts[i].name,
+			opts[i].val, sizeof(*opts[i].val));
+		printf("setsockopt(0, %s, %s"
+		       ", {gr_interface=%s, %s}, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       IFINDEX_LO_STR, opts[i].addr,
+		       (unsigned int) sizeof(*opts[i].val), errstr);
+
+		/* optlen > sizeof(struct group_req), shortened */
+		set_opt(0, opts[i].level, opts[i].name, opts[i].val, INT_MAX);
+		printf("setsockopt(0, %s, %s"
+		       ", {gr_interface=%s, %s}, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       IFINDEX_LO_STR, opts[i].addr,
+		       INT_MAX, errstr);
+	}
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("MCAST_JOIN_GROUP && MCAST_LEAVE_GROUP")
+
+#endif
diff --git a/tests-mx32/group_req.gen.test b/tests-mx32/group_req.gen.test
new file mode 100755
index 0000000..0e753b6
--- /dev/null
+++ b/tests-mx32/group_req.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (group_req -e trace=setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=setsockopt
diff --git a/tests-mx32/ifindex.c b/tests-mx32/ifindex.c
new file mode 100644
index 0000000..390a135
--- /dev/null
+++ b/tests-mx32/ifindex.c
@@ -0,0 +1,55 @@
+/*
+ * Proxy wrappers for if_nametoindex.
+ *
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_IF_INDEXTONAME
+
+# include <net/if.h>
+
+unsigned int
+ifindex_lo(void)
+{
+	static unsigned int index;
+
+	if (!index)
+		index = if_nametoindex("lo");
+
+	return index;
+}
+
+#else /* !HAVE_IF_INDEXTONAME */
+
+unsigned int
+ifindex_lo(void)
+{
+	return 1;
+}
+
+#endif
diff --git a/tests-mx32/inet-cmsg.c b/tests-mx32/inet-cmsg.c
index b530016..fb3d430 100644
--- a/tests-mx32/inet-cmsg.c
+++ b/tests-mx32/inet-cmsg.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,9 +39,10 @@
 static void
 print_pktinfo(const struct cmsghdr *c)
 {
-	printf("IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex(\"lo\")"
-	       ", ipi_spec_dst=inet_addr(\"127.0.0.1\")"
-	       ", ipi_addr=inet_addr(\"127.0.0.1\")}");
+	printf("IP_PKTINFO, cmsg_data={ipi_ifindex=%s"
+	       ", ipi_spec_dst=inet_addr(\"%s\")"
+	       ", ipi_addr=inet_addr(\"%s\")}",
+	       IFINDEX_LO_STR, "127.0.0.1", "127.0.0.1");
 }
 
 static void
diff --git a/tests-mx32/init.sh b/tests-mx32/init.sh
index 2d4d0b4..4cb8f1a 100644
--- a/tests-mx32/init.sh
+++ b/tests-mx32/init.sh
@@ -45,7 +45,7 @@
 
 dump_log_and_fail_with()
 {
-	cat < "$LOG"
+	cat < "$LOG" >&2
 	fail_ "$*"
 }
 
@@ -341,6 +341,7 @@
 	*) NAME=
 esac
 
+STRACE_EXE=
 if [ -n "$NAME" ]; then
 	TESTDIR="$NAME.dir"
 	rm -rf -- "$TESTDIR"
@@ -356,17 +357,23 @@
 		STRACE=../../strace
 		case "${LOG_COMPILER-} ${LOG_FLAGS-}" in
 			*--suppressions=*--error-exitcode=*--tool=*)
+			STRACE_EXE="$STRACE"
 			# add valgrind command prefix
 			STRACE="${LOG_COMPILER-} ${LOG_FLAGS-} $STRACE"
 			;;
 		esac
 	}
+
+	trap 'dump_log_and_fail_with "time limit ($TIMEOUT_DURATION) exceeded"' XCPU
 else
-	[ -n "${STRACE-}" ] ||
-		STRACE=../strace
+	: "${STRACE:=../strace}"
 fi
 
-: "${TIMEOUT_DURATION:=300}"
+# Export $STRACE_EXE to check_PROGRAMS.
+: "${STRACE_EXE:=$STRACE}"
+export STRACE_EXE
+
+: "${TIMEOUT_DURATION:=600}"
 : "${SLEEP_A_BIT:=sleep 1}"
 
 [ -z "${VERBOSE-}" ] ||
diff --git a/tests-mx32/ioctl_block.c b/tests-mx32/ioctl_block.c
index e44c4c4..2bb6808 100644
--- a/tests-mx32/ioctl_block.c
+++ b/tests-mx32/ioctl_block.c
@@ -154,7 +154,7 @@
 	blkpg->data = (void *) (unsigned long) 0xcafef00dfffffeedULL;
 
 	ioctl(-1, BLKPG, blkpg);
-	printf("ioctl(-1, BLKPG, {%s, flags=%d, datalen=%d"
+	printf("ioctl(-1, BLKPG, {op=%s, flags=%d, datalen=%d"
 	       ", data=%#lx}) = -1 EBADF (%m)\n",
 	       "BLKPG_RESIZE_PARTITION", blkpg->flags, blkpg->datalen,
 	       (unsigned long) blkpg->data);
@@ -169,9 +169,9 @@
 	blkpg->data = bp;
 
 	ioctl(-1, BLKPG, blkpg);
-	printf("ioctl(-1, BLKPG, {%s, flags=%d, datalen=%d"
+	printf("ioctl(-1, BLKPG, {op=%s, flags=%d, datalen=%d"
 	       ", data={start=%lld, length=%lld, pno=%d"
-	       ", devname=\"%.*s\", volname=\"%.*s\"}})"
+	       ", devname=\"%.*s\"..., volname=\"%.*s\"...}})"
 	       " = -1 EBADF (%m)\n",
 	       "BLKPG_ADD_PARTITION",
 	       blkpg->flags, blkpg->datalen,
diff --git a/tests-mx32/ioctl_dm.c b/tests-mx32/ioctl_dm.c
index 544d70b..2f77e04 100644
--- a/tests-mx32/ioctl_dm.c
+++ b/tests-mx32/ioctl_dm.c
@@ -251,7 +251,7 @@
 	strncpy(dm_arg->uuid, str129, sizeof(dm_arg->uuid));
 	ioctl(-1, DM_VERSION, dm_arg);
 	printf("ioctl(-1, DM_VERSION, {version=4.1.2, data_size=%zu, "
-	       "dev=makedev(18, 52), name=\"%.127s\", uuid=\"%.128s\", "
+	       "dev=makedev(18, 52), name=\"%.127s\"..., uuid=\"%.128s\"..., "
 	       "flags=0}) = -1 EBADF (%m)\n",
 	       min_sizeof_dm_ioctl, str129, str129);
 
diff --git a/tests-mx32/ioctl_loop.c b/tests-mx32/ioctl_loop.c
index 4dcbf9a..3411a4d 100644
--- a/tests-mx32/ioctl_loop.c
+++ b/tests-mx32/ioctl_loop.c
@@ -39,6 +39,7 @@
 #include <sys/sysmacros.h>
 #include <linux/ioctl.h>
 #include <linux/loop.h>
+#include "print_fields.h"
 #include "xlat/loop_cmds.h"
 
 #ifndef ABBREV
@@ -81,8 +82,7 @@
 	else
 		printf("%#x /* LO_FLAGS_??? */", info->lo_flags);
 
-	printf(", lo_name=\"%.*s\"",
-	       (int) sizeof(info->lo_name) - 1, info->lo_name);
+	PRINT_FIELD_CSTRING(", ", *info, lo_name);
 
 	if (VERBOSE || print_encrypt)
 		printf(", lo_encrypt_key=\"%.*s\"",
@@ -144,17 +144,16 @@
 		printf("%s", flags);
 	else
 		printf("%#x /* LO_FLAGS_??? */", info64->lo_flags);
-	printf(", lo_file_name=\"%.*s\"",
-	       (int) sizeof(info64->lo_file_name) - 1, info64->lo_file_name);
+	PRINT_FIELD_CSTRING(", ", *info64, lo_file_name);
 
-	if (VERBOSE || print_encrypt)
-		printf(", lo_crypt_name=\"%.*s\", lo_encrypt_key=\"%.*s\"",
-		       (int) sizeof(info64->lo_crypt_name) - 1,
-		       info64->lo_crypt_name,
+	if (VERBOSE || print_encrypt) {
+		PRINT_FIELD_CSTRING(", ", *info64, lo_crypt_name);
+		printf(", lo_encrypt_key=\"%.*s\"",
 		       encrypt_key ? (int) strlen(encrypt_key) :
 		       (int) sizeof(info64->lo_encrypt_key),
 		       encrypt_key ? encrypt_key :
 		       (char *) info64->lo_encrypt_key);
+	}
 
 # if VERBOSE
 	printf(", lo_init=[%#" PRIx64 ", %#" PRIx64 "]}",
diff --git a/tests-mx32/ioctl_uffdio.c b/tests-mx32/ioctl_uffdio.c
index 817e3c7..973de39 100644
--- a/tests-mx32/ioctl_uffdio.c
+++ b/tests-mx32/ioctl_uffdio.c
@@ -44,6 +44,9 @@
 # include <linux/ioctl.h>
 # include <linux/userfaultfd.h>
 
+#include "xlat.h"
+#include "xlat/uffd_api_features.h"
+
 int
 main(void)
 {
@@ -70,10 +73,14 @@
 	api_struct->api = UFFD_API;
 	api_struct->features = 0;
 	rc = ioctl(fd, UFFDIO_API, api_struct);
-	printf("ioctl(%d, UFFDIO_API, {api=0xaa, features=0, "
-	       "features.out=%#" PRIx64 ", ioctls=1<<_UFFDIO_REGISTER|"
-	       "1<<_UFFDIO_UNREGISTER|1<<_UFFDIO_API",
-	       fd, (uint64_t)api_struct->features);
+	printf("ioctl(%d, UFFDIO_API, {api=0xaa, features=0", fd);
+	if (api_struct->features) {
+		printf(" => features=");
+		printflags(uffd_api_features, api_struct->features,
+			   "UFFD_FEATURE_???");
+	}
+	printf(", ioctls=1<<_UFFDIO_REGISTER|"
+	       "1<<_UFFDIO_UNREGISTER|1<<_UFFDIO_API");
 	api_struct->ioctls &= ~(1ull<<_UFFDIO_REGISTER|
 				1ull<<_UFFDIO_UNREGISTER|
 				1ull<<_UFFDIO_API);
diff --git a/tests-mx32/ioctl_v4l2.c b/tests-mx32/ioctl_v4l2.c
index cc5dee6..47a538e 100644
--- a/tests-mx32/ioctl_v4l2.c
+++ b/tests-mx32/ioctl_v4l2.c
@@ -502,12 +502,12 @@
 	struct v4l2_requestbuffers *const p_v4l2_requestbuffers =
 		page + size - sizeof(*p_v4l2_requestbuffers);
 	ioctl(-1, VIDIOC_REQBUFS, p_v4l2_requestbuffers);
-	printf("ioctl(-1, VIDIOC_REQBUFS, {count=%u, type=%#x"
-	       " /* V4L2_BUF_TYPE_??? */, memory=%#x /* V4L2_MEMORY_??? */})"
+	printf("ioctl(-1, VIDIOC_REQBUFS, {type=%#x /* V4L2_BUF_TYPE_??? */, "
+	       "memory=%#x /* V4L2_MEMORY_??? */, count=%u})"
 	       " = -1 EBADF (%m)\n",
-	       p_v4l2_requestbuffers->count,
 	       p_v4l2_requestbuffers->type,
-	       p_v4l2_requestbuffers->memory);
+	       p_v4l2_requestbuffers->memory,
+	       p_v4l2_requestbuffers->count);
 
 	/* VIDIOC_QUERYBUF */
 	ioctl(-1, VIDIOC_QUERYBUF, 0);
diff --git a/tests-mx32/ip_mreq.c b/tests-mx32/ip_mreq.c
index 4bfe00f..3f4648c 100644
--- a/tests-mx32/ip_mreq.c
+++ b/tests-mx32/ip_mreq.c
@@ -30,21 +30,22 @@
 #include <netinet/in.h>
 
 #if defined IP_ADD_MEMBERSHIP && defined IPV6_ADD_MEMBERSHIP \
- && defined IPV6_JOIN_ANYCAST && defined HAVE_IF_INDEXTONAME
+ && defined IPV6_JOIN_ANYCAST
 
 # include <stdio.h>
 # include <unistd.h>
+# include <sys/param.h>
 # include <sys/socket.h>
 # include <arpa/inet.h>
 # include <net/if.h>
 
+#define	multi4addr	"224.0.0.3"
+#define	multi6addr	"ff01::c"
+#define	interface	"127.0.0.1"
+
 int
 main(void)
 {
-	static const char multi4addr[] = "224.0.0.3";
-	static const char multi6addr[] = "ff01::c";
-	static const char interface[] = "127.0.0.1";
-
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct ip_mreq, m4);
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct ipv6_mreq, m6);
 	unsigned int i;
@@ -54,7 +55,7 @@
 	inet_pton(AF_INET, interface, &m4->imr_interface);
 	inet_pton(AF_INET6, multi6addr, &m6->ipv6mr_multiaddr);
 
-	m6->ipv6mr_interface = if_nametoindex("lo");
+	m6->ipv6mr_interface = ifindex_lo();
 	if (!m6->ipv6mr_interface)
 		perror_msg_and_skip("lo");
 
@@ -63,87 +64,91 @@
 		perror_msg_and_skip("socket");
 
 	struct {
-		int level;
-		const char *str_level;
-		int optname;
-		const char *str_optname;
-		void *optval;
-		unsigned int optsize;
-	} short_any[] = {
+		const int level;
+		const char *const str_level;
+		const int name;
+		const char *str_name;
+		const void *const val;
+		unsigned int size;
+		const char *const addr;
+	} opts[] = {
 		{
 			ARG_STR(SOL_IP), ARG_STR(IP_ADD_MEMBERSHIP),
-			m4, sizeof(*m4)
+			m4, sizeof(*m4),
+			"{imr_multiaddr=inet_addr(\"" multi4addr
+			"\"), imr_interface=inet_addr(\"" interface "\")}"
 		},
 		{
 			ARG_STR(SOL_IP), ARG_STR(IP_DROP_MEMBERSHIP),
-			m4, sizeof(*m4)
+			m4, sizeof(*m4),
+			"{imr_multiaddr=inet_addr(\"" multi4addr
+			"\"), imr_interface=inet_addr(\"" interface "\")}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_ADD_MEMBERSHIP),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_DROP_MEMBERSHIP),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_JOIN_ANYCAST),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_LEAVE_ANYCAST),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		}
 	};
 
-	for (i = 0; i < ARRAY_SIZE(short_any); ++i) {
-		rc = setsockopt(0, short_any[i].level, short_any[i].optname,
-				short_any[i].optval, 1);
-		printf("setsockopt(0, %s, %s, \"\\%hho\", 1) = %s\n",
-		       short_any[i].str_level, short_any[i].str_optname,
-		       *(unsigned char *) short_any[i].optval,
-		       sprintrc(rc));
+	for (i = 0; i < ARRAY_SIZE(opts); ++i) {
+		/* optlen < 0, EINVAL */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, -1);
+		printf("setsockopt(0, %s, %s, %p, -1) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, sprintrc(rc));
 
-		rc = setsockopt(0, short_any[i].level, short_any[i].optname,
-				short_any[i].optval + 1, short_any[i].optsize);
+		/* optlen < sizeof(struct), EINVAL */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, opts[i].size - 1);
 		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
-		       short_any[i].str_level, short_any[i].str_optname,
-		       short_any[i].optval + 1, short_any[i].optsize,
-		       sprintrc(rc));
-	}
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, opts[i].size - 1, sprintrc(rc));
 
-	struct {
-		int optname;
-		const char *str_optname;
-	} long_ip[] = {
-		{ ARG_STR(IP_ADD_MEMBERSHIP) },
-		{ ARG_STR(IP_DROP_MEMBERSHIP) }
-	}, long_ipv6[] = {
-		{ ARG_STR(IPV6_ADD_MEMBERSHIP) },
-		{ ARG_STR(IPV6_DROP_MEMBERSHIP) },
-		{ ARG_STR(IPV6_JOIN_ANYCAST) },
-		{ ARG_STR(IPV6_LEAVE_ANYCAST) }
-	};
+		/* optval EFAULT */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val + 1, opts[i].size);
+		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val + 1, opts[i].size, sprintrc(rc));
 
-	for (i = 0; i < ARRAY_SIZE(long_ip); ++i) {
-		rc = setsockopt(0, SOL_IP, long_ip[i].optname,
-				m4, sizeof(*m4));
-		printf("setsockopt(0, SOL_IP, %s"
-		       ", {imr_multiaddr=inet_addr(\"%s\")"
-		       ", imr_interface=inet_addr(\"%s\")}, %u) = %s\n",
-		       long_ip[i].str_optname, multi4addr,
-		       interface, (unsigned) sizeof(*m4), sprintrc(rc));
-	}
+		/* classic */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, opts[i].size);
+		printf("setsockopt(0, %s, %s, %s, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].addr, opts[i].size, sprintrc(rc));
 
-	for (i = 0; i < ARRAY_SIZE(long_ipv6); ++i) {
-		rc = setsockopt(0, SOL_IPV6, long_ipv6[i].optname,
-				m6, sizeof(*m6));
-		printf("setsockopt(0, SOL_IPV6, %s"
-		       ", {inet_pton(AF_INET6, \"%s\", &ipv6mr_multiaddr)"
-		       ", ipv6mr_interface=if_nametoindex(\"lo\")}"
-		       ", %u) = %s\n",
-		       long_ipv6[i].str_optname, multi6addr,
-		       (unsigned) sizeof(*m6), sprintrc(rc));
+		/* optlen > sizeof(struct), shortened */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, INT_MAX);
+		printf("setsockopt(0, %s, %s, %s, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].addr, INT_MAX, sprintrc(rc));
 	}
 
 	puts("+++ exited with 0 +++");
@@ -153,6 +158,6 @@
 #else
 
 SKIP_MAIN_UNDEFINED("IP_ADD_MEMBERSHIP && IPV6_ADD_MEMBERSHIP"
-		    " && IPV6_JOIN_ANYCAST && HAVE_IF_INDEXTONAME")
+		    " && IPV6_JOIN_ANYCAST")
 
 #endif
diff --git a/tests-mx32/ipc_msgbuf.c b/tests-mx32/ipc_msgbuf.c
index 9d149fa..d108389 100644
--- a/tests-mx32/ipc_msgbuf.c
+++ b/tests-mx32/ipc_msgbuf.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/is_linux_mips_n64.c b/tests-mx32/is_linux_mips_n64.c
new file mode 100644
index 0000000..843203b
--- /dev/null
+++ b/tests-mx32/is_linux_mips_n64.c
@@ -0,0 +1,45 @@
+/*
+ * Check whether the kernel supports MIPS n64 syscalls.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef MIPS
+
+int
+main(void)
+{
+	__asm__(".set noreorder; li $a0, 0; li $v0, 5058; syscall");
+	return 77;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("MIPS")
+
+#endif
diff --git a/tests-mx32/keyctl.c b/tests-mx32/keyctl.c
index 492c62a..2d8b9ec 100644
--- a/tests-mx32/keyctl.c
+++ b/tests-mx32/keyctl.c
@@ -2,6 +2,7 @@
  * Check decoding of keyctl syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,6 +37,7 @@
 # include <linux/types.h>
 # include <linux/keyctl.h>
 
+# include <assert.h>
 # include <errno.h>
 # include <inttypes.h>
 # include <stdarg.h>
@@ -55,6 +57,15 @@
 };
 # endif
 
+# ifndef HAVE_STRUCT_KEYCTL_KDF_PARAMS
+struct keyctl_kdf_params {
+	char *hashname;
+	char *otherinfo;
+	uint32_t otherinfolen;
+	uint32_t __spare[8];
+};
+# endif
+
 # include "xlat.h"
 # include "xlat/keyctl_commands.h"
 
@@ -76,6 +87,9 @@
 bool nul_terminated_buf = true;
 bool buf_in_arg;
 
+/* From ioctl_dm.c */
+# define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
+
 /*
  * When this is called with positive size, the buffer provided is an "out"
  * argument and rc contains resulting size (globally defined nul_terminated_buf
@@ -97,17 +111,11 @@
 
 	if (!nul_terminated_buf ||
 	    (strnlen(str, limited_size) == limited_size)) {
-		printf("\"");
 		print_quoted_memory(str, limited_size);
 		if (print_size > limit)
-			printf("\"...");
-		else
-			printf("\"");
-	} else {
-		printf("\"");
+			printf("...");
+	} else
 		print_quoted_string(str);
-		printf("\"");
-	}
 }
 
 static void
@@ -121,9 +129,9 @@
 		printf("%s", str);
 	} else {
 		if (size == sizeof(uint64_t))
-			printf(fmt, (uint64_t)arg);
+			printf(fmt, (uint64_t) arg);
 		else if (size == sizeof(uint32_t))
-			printf(fmt, (uint32_t)arg);
+			printf(fmt, (uint32_t) arg);
 		else
 			print_quoted_string_limit((void *) (uintptr_t) arg,
 						  size, rc);
@@ -189,6 +197,85 @@
 }
 
 int
+append_str(char **buf, size_t *left, const char *fmt, ...)
+{
+	int ret;
+	va_list ap;
+
+	va_start(ap, fmt);
+	ret = vsnprintf(*buf, *left, fmt, ap);
+	va_end(ap);
+
+	assert((ret >= 0) && ((unsigned) ret < *left));
+
+	*left -= ret;
+	*buf += ret;
+
+	return ret;
+}
+
+const char *
+kckdfp_to_str(struct keyctl_kdf_params *kdf, bool deref_hash, bool deref_oi,
+	       bool print_spare, const char *hash_str, const char *oi_str)
+{
+	static char buf[4096];
+
+	size_t left = sizeof(buf);
+	char *pos = buf;
+
+	append_str(&pos, &left, "{hashname=");
+
+	if (deref_hash && hash_str) {
+		append_str(&pos, &left, "%s", hash_str);
+	} else if (!kdf->hashname) {
+		append_str(&pos, &left, "NULL");
+	} else if (deref_hash) {
+		append_str(&pos, &left, "\"%.*s\"", limit, kdf->hashname);
+
+		if (strnlen(kdf->hashname, limit + 1) > limit)
+			append_str(&pos, &left, "...");
+	} else {
+		append_str(&pos, &left, "%p", kdf->hashname);
+	}
+
+	append_str(&pos, &left, ", otherinfo=");
+
+	if (deref_oi && oi_str) {
+		append_str(&pos, &left, "%s", oi_str);
+	} else if (!kdf->otherinfo) {
+		append_str(&pos, &left, "NULL");
+	} else if (deref_oi) {
+		append_str(&pos, &left, "\"%.*s\"", limit, kdf->otherinfo);
+
+		if (strnlen(kdf->otherinfo, limit + 1) > limit)
+			append_str(&pos, &left, "...");
+	} else {
+		append_str(&pos, &left, "%p", kdf->otherinfo);
+	}
+
+	append_str(&pos, &left, ", otherinfolen=%u", kdf->otherinfolen);
+
+	if (print_spare) {
+		size_t i;
+
+		append_str(&pos, &left, ", __spare=[");
+
+		for (i = 0; i < ARRAY_SIZE(kdf->__spare); i++) {
+			if  (i)
+				append_str(&pos, &left, ", ");
+
+			append_str(&pos, &left, "%#x", kdf->__spare[i]);
+		}
+
+		append_str(&pos, &left, "]");
+	}
+
+	append_str(&pos, &left, "}");
+
+	return buf;
+}
+
+int
 main(void)
 {
 	enum { PR_LIMIT = 10, IOV_SIZE = 11, IOV_STR_SIZE = 4096 };
@@ -216,6 +303,32 @@
 	static const char *kcdhp_str = "{private=KEY_SPEC_GROUP_KEYRING, "
 		"prime=1234567890, base=-1153374643}";
 
+	/*
+	 * It's bigger than current hash name size limit, but since it's
+	 * implementation-dependent and totally internal, we do not rely
+	 * on it much.
+	 */
+	static const char long_hash_data[] = STR32 STR32 STR32 STR32 "xxx";
+	static const char short_hash_data[] = "hmac(aes)";
+	static const char otherinfo1_data[] = "\1\2 OH HAI THAR\255\0\1";
+	static const char otherinfo2_data[] = "\1\2\n\255\0\1";
+	static const struct keyctl_kdf_params kckdfp_data[] = {
+		[0] = { NULL, NULL, 0, { 0 } },
+		[1] = { NULL /* Changed to unaccessible address in copy */,
+			NULL, 0xbadc0dedU, { [7] = 0xdeadfeedU } },
+		[2] = { NULL /* long_hash_data */,
+			NULL /* Changed to unaccessible address in copy */,
+			0, { 0 } },
+		[3] = { NULL /* unterminated1 */,
+			NULL /* otherinfo_data */, 0, { 1 } },
+		[4] = { NULL /* short_hash_data */,
+			NULL /* otherinfo1_data */, sizeof(otherinfo1_data),
+			{ 0, 0xfacebeef, 0, 0xba5e1ead } },
+		[5] = { NULL /* short_hash_data */,
+			NULL /* otherinfo2_data */, sizeof(otherinfo2_data),
+			{ 0 } },
+	};
+
 	char *bogus_str = tail_memdup(unterminated1, sizeof(unterminated1));
 	char *bogus_desc = tail_memdup(unterminated2, sizeof(unterminated2));
 	char *short_type = tail_memdup(short_type_str, sizeof(short_type_str));
@@ -223,6 +336,15 @@
 	char *long_type = tail_memdup(long_type_str, sizeof(long_type_str));
 	char *long_desc = tail_memdup(long_desc_str, sizeof(long_desc_str));
 	char *kcdhp = tail_memdup(&kcdhp_data, sizeof(kcdhp_data));
+	char *kckdfp_long_hash = tail_memdup(long_hash_data,
+					     sizeof(long_hash_data));
+	char *kckdfp_short_hash = tail_memdup(short_hash_data,
+					      sizeof(short_hash_data));
+	char *kckdfp_otherinfo1 = tail_memdup(otherinfo1_data,
+					      sizeof(otherinfo1_data));
+	char *kckdfp_otherinfo2 = tail_memdup(otherinfo2_data,
+					      sizeof(otherinfo2_data));
+	char *kckdfp_char = tail_alloc(sizeof(kckdfp_data[0]));
 	struct iovec *key_iov = tail_alloc(sizeof(*key_iov) * IOV_SIZE);
 	char *bogus_buf1 = tail_alloc(9);
 	char *bogus_buf2 = tail_alloc(256);
@@ -230,7 +352,7 @@
 	char *key_iov_str2 = tail_alloc(4096);
 	ssize_t ret;
 	ssize_t kis_size = 0;
-	int i;
+	size_t i;
 
 	key_iov[0].iov_base = short_type;
 	key_iov[0].iov_len = sizeof(short_type_str);
@@ -299,40 +421,48 @@
 	do_keyctl((kernel_ulong_t) 0xbadc0dedfacefeedULL,
 		  "0xfacefeed /* KEYCTL_??? */",
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL, kulong_fmt,
+			(kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL,
+			kulong_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee2badc0de6ULL, NULL, kulong_fmt,
+			(kernel_ulong_t) 0xdeadfee2badc0de6ULL, NULL,
+			kulong_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee3badc0de7ULL, NULL, kulong_fmt,
+			(kernel_ulong_t) 0xdeadfee3badc0de7ULL, NULL,
+			kulong_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, kulong_fmt);
+			(kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL,
+			kulong_fmt);
 
 
 	/* GET_KEYRING_ID */
 	do_keyctl(ARG_STR(KEYCTL_GET_KEYRING_ID),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xbadc0dedffffffffLLU, "-1",
-		  NULL, 0UL);
+			(kernel_ulong_t) 0xbadc0dedffffffffLLU, "-1", NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_KEYRING_ID),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), "%d",
-		  sizeof(int), 3141592653U, NULL, "%d",
-		  NULL, 0UL);
+		  sizeof(int), 3141592653U, NULL, "%d", NULL,
+		  0UL);
 
 
 	/* KEYCTL_JOIN_SESSION_KEYRING */
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
-		  sizeof(char *), ARG_STR(NULL), NULL, 0UL);
+		  sizeof(char *), ARG_STR(NULL), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
-		  sizeof(char *), bogus_str, NULL, ptr_fmt, 0UL);
+		  sizeof(char *), bogus_str, NULL, ptr_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
-		  sizeof(char *), ARG_STR("bogus name"), NULL, 0UL);
+		  sizeof(char *), ARG_STR("bogus name"), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
 		  sizeof(char *), "very long keyring name", "\"very long \"...",
-		  NULL, 0UL);
+			NULL,
+		  0UL);
 
 
 	/* KEYCTL_UPDATE */
@@ -342,19 +472,19 @@
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 0, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(char *), bogus_str, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -369,11 +499,14 @@
 
 	/* KEYCTL_REVOKE */
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -383,29 +516,33 @@
 	do_keyctl(ARG_STR(KEYCTL_CHOWN),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(uid_t), ARG_STR(-1), NULL,
-		  sizeof(gid_t), ARG_STR(-1), NULL, 0UL);
+		  sizeof(gid_t), ARG_STR(-1), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CHOWN),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
-		  sizeof(gid_t), 3141592653U, NULL, "%u", 0UL);
+		  sizeof(gid_t), 3141592653U, NULL, "%u",
+		  0UL);
 
 
 	/* KEYCTL_SETPERM */
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
 		  sizeof(uint32_t), 0xffffffffU,
-		  "KEY_POS_VIEW|KEY_POS_READ|KEY_POS_WRITE|"
-		  "KEY_POS_SEARCH|KEY_POS_LINK|KEY_POS_SETATTR|"
-		  "KEY_USR_VIEW|KEY_USR_READ|KEY_USR_WRITE|"
-		  "KEY_USR_SEARCH|KEY_USR_LINK|KEY_USR_SETATTR|"
-		  "KEY_GRP_VIEW|KEY_GRP_READ|KEY_GRP_WRITE|"
-		  "KEY_GRP_SEARCH|KEY_GRP_LINK|KEY_GRP_SETATTR|"
-		  "KEY_OTH_VIEW|KEY_OTH_READ|KEY_OTH_WRITE|"
-		  "KEY_OTH_SEARCH|KEY_OTH_LINK|KEY_OTH_SETATTR|"
-		  "0xc0c0c0c0", NULL, 0UL);
+			"KEY_POS_VIEW|KEY_POS_READ|KEY_POS_WRITE|"
+			"KEY_POS_SEARCH|KEY_POS_LINK|KEY_POS_SETATTR|"
+			"KEY_USR_VIEW|KEY_USR_READ|KEY_USR_WRITE|"
+			"KEY_USR_SEARCH|KEY_USR_LINK|KEY_USR_SETATTR|"
+			"KEY_GRP_VIEW|KEY_GRP_READ|KEY_GRP_WRITE|"
+			"KEY_GRP_SEARCH|KEY_GRP_LINK|KEY_GRP_SETATTR|"
+			"KEY_OTH_VIEW|KEY_OTH_READ|KEY_OTH_WRITE|"
+			"KEY_OTH_SEARCH|KEY_OTH_LINK|KEY_OTH_SETATTR|"
+			"0xc0c0c0c0", NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(uint32_t), 0, NULL, "%#x", 0UL);
+		  sizeof(uint32_t), 0, NULL, "%#x",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(uint32_t), 0xc0c0c0c0, "0xc0c0c0c0 /* KEY_??? */",
@@ -418,38 +555,41 @@
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -4, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
+		  0UL);
 
 
 	/* KEYCTL_CLEAR */
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -458,10 +598,12 @@
 	/* KEYCTL_LINK */
 	do_keyctl(ARG_STR(KEYCTL_LINK),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_LINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_LINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -475,7 +617,8 @@
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -512,6 +655,34 @@
 		  sizeof(long_type_str), long_desc, NULL, NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 
+	/* KEYCTL_RESTRICT_KEYRING */
+
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(char *), ARG_STR(NULL), NULL,
+		  sizeof(char *), ARG_STR(NULL), NULL,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
+		  sizeof(char *), (char *) 0xfffff00dfffff157ULL, NULL, ptr_fmt,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  sizeof(char *), bogus_str, NULL, ptr_fmt,
+		  sizeof(char *), bogus_desc, NULL, ptr_fmt,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
+		  sizeof(short_type_str), short_type, NULL, NULL,
+		  sizeof(short_desc_str), short_desc, NULL, NULL,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), 0, NULL, "%d",
+		  sizeof(long_type_str), long_type, NULL, NULL,
+		  sizeof(long_type_str), long_desc, NULL, NULL,
+			  NULL);
+
 	buf_in_arg = false;
 
 
@@ -532,23 +703,23 @@
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -4, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
+		  0UL);
 
 	nul_terminated_buf = true;
 
@@ -559,32 +730,32 @@
 		  sizeof(int32_t), 0, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  sizeof(int32_t), 0, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
 		  sizeof(int32_t), bogus_key1, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(char *), bogus_str, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 32LLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 32LLU, NULL, ksize_fmt,
 		  sizeof(int32_t), bogus_key2, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(short_type_str), short_desc, NULL, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) sizeof(short_type_str) - 1, NULL,
-			  ksize_fmt,
+			(kernel_ulong_t) sizeof(short_type_str) - 1, NULL,
+			ksize_fmt,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  sizeof(long_type_str), long_desc, NULL, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) sizeof(long_type_str), NULL, ksize_fmt,
+			(kernel_ulong_t) sizeof(long_type_str), NULL, ksize_fmt,
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 	buf_in_arg = false;
@@ -594,16 +765,20 @@
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(int32_t), 0, NULL, "%d",
 		  sizeof(uint32_t), 0, NULL, "%u",
-		  sizeof(int32_t), 0, NULL, "%d", 0UL);
+		  sizeof(int32_t), 0, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(uint32_t), 3141592653U, NULL, "%u",
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
@@ -632,24 +807,30 @@
 	/* KEYCTL_SET_TIMEOUT */
 	do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
 		  sizeof(int32_t), 0, NULL, "%d",
-		  sizeof(uint32_t), 0, NULL, "%u", 0UL);
+		  sizeof(uint32_t), 0, NULL, "%u",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(uint32_t), 3141592653U, NULL, "%u", 0UL);
+		  sizeof(uint32_t), 3141592653U, NULL, "%u",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
 		  0UL);
 
 
 	/* KEYCTL_ASSUME_AUTHORITY */
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -659,28 +840,29 @@
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
-		  sizeof(uint32_t), 0xbadc0dedU, NULL, "%u", 0UL);
+		  sizeof(uint32_t), 0xbadc0dedU, NULL, "%u",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -4, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
+		  0UL);
 
 
 	/* KEYCTL_SESSION_TO_PARENT */
@@ -701,14 +883,17 @@
 	do_keyctl(ARG_STR(KEYCTL_REJECT),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadca75facef157LLU, "4207866199", NULL,
+			(kernel_ulong_t) 0xdeadca75facef157LLU, "4207866199",
+			NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
 		  sizeof(int32_t), bogus_key2, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_REJECT),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
 		  sizeof(uint32_t), ARG_STR(ENODEV), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 
@@ -718,19 +903,19 @@
 		  sizeof(int32_t), 0, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  sizeof(int32_t), 0, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 0xdeadfeedLLU, NULL,
+			ksize_fmt,
 		  sizeof(int32_t), bogus_key1, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(char *), key_iov + IOV_SIZE, NULL, ptr_fmt,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 32LLU, NULL, ksize_fmt,
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 32LLU, NULL,
+			ksize_fmt,
 		  sizeof(int32_t), bogus_key2, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -741,18 +926,21 @@
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  sizeof(key_iov), key_iov, key_iov_str2, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) IOV_SIZE, NULL, ksize_fmt,
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) IOV_SIZE, NULL,
+			ksize_fmt,
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 
 	/* KEYCTL_INVALIDATE */
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -761,10 +949,12 @@
 	/* KEYCTL_GET_PERSISTENT */
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), ARG_STR(-1), NULL,
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -782,29 +972,86 @@
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
-		  0UL);
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(char *), kcdhp + 1, NULL, ptr_fmt,
 		  sizeof(char *), (char *) 0xfffff157ffffdeadULL, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
-		  0UL);
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
 		  (size_t) -1, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -1, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -1, NULL, ksize_fmt,
+		  sizeof(char *), kckdfp_char + 1, NULL, ptr_fmt);
+
+	/* KEYCTL_DH_COMPUTE + KDF */
+
+	for (i = 0; i < ARRAY_SIZE(kckdfp_data); i++) {
+		struct keyctl_kdf_params *kckdfp =
+			(struct keyctl_kdf_params *) kckdfp_char;
+		bool deref_hash = true;
+		bool deref_opts = true;
+		bool print_spare = false;
+		const char *hash_str = NULL;
+		const char *oi_str = NULL;
+
+		memcpy(kckdfp, kckdfp_data + i, sizeof(kckdfp_data[i]));
+
+		switch (i) {
+		case 1:
+			deref_hash = false;
+			print_spare = true;
+			kckdfp->hashname =
+				kckdfp_short_hash + sizeof(short_hash_data);
+			break;
+		case 2:
+			deref_opts = false;
+			kckdfp->hashname = kckdfp_long_hash;
+			kckdfp->otherinfo =
+				kckdfp_otherinfo1 + sizeof(otherinfo1_data);
+			break;
+		case 3:
+			deref_opts = false;
+			deref_hash = false;
+			print_spare = true;
+			kckdfp->hashname = bogus_str;
+			kckdfp->otherinfo = kckdfp_otherinfo1;
+			break;
+		case 4:
+			oi_str = "\"\\1\\2 OH HAI \"...";
+			print_spare = true;
+			kckdfp->hashname = kckdfp_short_hash;
+			kckdfp->otherinfo = kckdfp_otherinfo1;
+			break;
+		case 5:
+			oi_str = "\"\\1\\2\\n\\255\\0\\1\\0\"";
+			kckdfp->hashname = kckdfp_short_hash;
+			kckdfp->otherinfo = kckdfp_otherinfo2;
+			break;
+		}
+
+		do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
+			  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
+			  (size_t) -1, (uintptr_t) bogus_buf2, NULL, NULL,
+			  sizeof(kernel_ulong_t), (kernel_ulong_t) -1, NULL,
+				ksize_fmt,
+			  sizeof(kckdfp), kckdfp_char,
+				kckdfp_to_str(kckdfp, deref_hash, deref_opts,
+					      print_spare, hash_str, oi_str),
+				NULL);
+	}
 
 	nul_terminated_buf = true;
 
diff --git a/tests-mx32/ksysent.c b/tests-mx32/ksysent.c
index 860e21e..7e25def 100644
--- a/tests-mx32/ksysent.c
+++ b/tests-mx32/ksysent.c
@@ -34,31 +34,14 @@
 #include <string.h>
 #include <asm/unistd.h>
 
-#define TD 0
-#define TF 0
-#define TI 0
-#define TN 0
-#define TP 0
-#define TS 0
-#define TM 0
-#define TST 0
-#define TLST 0
-#define TFST 0
-#define TSTA 0
-#define TSF 0
-#define TFSF 0
-#define TSFA 0
-#define NF 0
-#define MA 0
-#define SI 0
-#define SE 0
-#define CST 0
-#define SEN(arg) 0, 0
+#include "sysent_shorthand_defs.h"
 
 static const struct_sysent syscallent[] = {
 #include "syscallent.h"
 };
 
+#include "sysent_shorthand_undefs.h"
+
 typedef const char *pstr_t;
 static const pstr_t ksyslist[] = {
 #include "ksysent.h"
diff --git a/tests-mx32/mincore.c b/tests-mx32/mincore.c
index 0ede687..ae4eb42 100644
--- a/tests-mx32/mincore.c
+++ b/tests-mx32/mincore.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/mmsg.c b/tests-mx32/mmsg.c
index a5cf0e7..e00100a 100644
--- a/tests-mx32/mmsg.c
+++ b/tests-mx32/mmsg.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2014 Masatake YAMATO <yamato@redhat.com>
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/mmsg_name.c b/tests-mx32/mmsg_name.c
index ad5a482..8c54a48 100644
--- a/tests-mx32/mmsg_name.c
+++ b/tests-mx32/mmsg_name.c
@@ -3,6 +3,7 @@
  * of sendmmsg and recvmmsg syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/msg_control.c b/tests-mx32/msg_control.c
index b63f2d0..48b7347 100644
--- a/tests-mx32/msg_control.c
+++ b/tests-mx32/msg_control.c
@@ -544,11 +544,7 @@
 	cmsg->cmsg_type = cmsg_type;
 
 	struct in_pktinfo *const info = (struct in_pktinfo *) CMSG_DATA(cmsg);
-#ifdef HAVE_IF_INDEXTONAME
-	info->ipi_ifindex = if_nametoindex("lo");
-#else
-	info->ipi_ifindex = 1;
-#endif
+	info->ipi_ifindex = ifindex_lo();
 	info->ipi_spec_dst.s_addr = inet_addr("1.2.3.4");
 	info->ipi_addr.s_addr = inet_addr("5.6.7.8");
 
@@ -563,12 +559,7 @@
 	       ", ipi_addr=inet_addr(\"%s\")}}]"
 	       ", msg_controllen=%u, msg_flags=0}, 0) = %d %s (%m)\n",
 	       (unsigned) cmsg->cmsg_len, cmsg_type_str,
-#ifdef HAVE_IF_INDEXTONAME
-	       "if_nametoindex(\"lo\")",
-#else
-	       "1",
-#endif
-	       "1.2.3.4", "5.6.7.8", len, rc, errno2name());
+	       IFINDEX_LO_STR, "1.2.3.4", "5.6.7.8", len, rc, errno2name());
 }
 
 static void
diff --git a/tests-mx32/net-accept-connect.c b/tests-mx32/net-accept-connect.c
index 0050eeb..4045e05 100644
--- a/tests-mx32/net-accept-connect.c
+++ b/tests-mx32/net-accept-connect.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2013-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2013-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/net-icmp_filter.c b/tests-mx32/net-icmp_filter.c
index 71e530d..1dd1f21 100644
--- a/tests-mx32/net-icmp_filter.c
+++ b/tests-mx32/net-icmp_filter.c
@@ -49,8 +49,8 @@
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct icmp_filter, f);
 
 	getsockopt(-1, SOL_RAW, ICMP_FILTER, f, plen);
-	printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, %p, %p) = -1 %s (%m)\n",
-	       f, plen, errno2name());
+	printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, %p, [%d]) = -1 %s (%m)\n",
+	       f, *plen, errno2name());
 
 	setsockopt(-1, SOL_RAW, ICMP_FILTER, efault, sizeof(*f));
 	printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, %p, %u) = -1 %s (%m)\n",
diff --git a/tests-mx32/net-sockaddr.c b/tests-mx32/net-sockaddr.c
index 1d9bac3..fe933d4 100644
--- a/tests-mx32/net-sockaddr.c
+++ b/tests-mx32/net-sockaddr.c
@@ -50,11 +50,6 @@
 # include <bluetooth/sco.h>
 #endif
 
-#ifdef HAVE_IF_INDEXTONAME
-/* <linux/if.h> used to conflict with <net/if.h> */
-extern unsigned int if_nametoindex(const char *);
-#endif
-
 static void
 check_un(void)
 {
@@ -186,19 +181,17 @@
 	       ntohs(in6->sin6_port), h_addr,
 	       ntohl(in6->sin6_flowinfo), in6->sin6_scope_id, len, ret);
 
-#ifdef HAVE_IF_INDEXTONAME
-	in6->sin6_scope_id = if_nametoindex("lo");
+	in6->sin6_scope_id = ifindex_lo();
 	if (in6->sin6_scope_id) {
 		ret = connect(-1, (void *) in6, len);
 		printf("connect(-1, {sa_family=AF_INET6, sin6_port=htons(%hu)"
 		       ", inet_pton(AF_INET6, \"%s\", &sin6_addr)"
 		       ", sin6_flowinfo=htonl(%u)"
-		       ", sin6_scope_id=if_nametoindex(\"lo\")}, %u)"
+		       ", sin6_scope_id=%s}, %u)"
 		       " = %d EBADF (%m)\n",
-		       ntohs(in6->sin6_port), h_addr,
-		       ntohl(in6->sin6_flowinfo), len, ret);
+		       ntohs(in6->sin6_port), h_addr, ntohl(in6->sin6_flowinfo),
+		       IFINDEX_LO_STR, len, ret);
 	}
-#endif
 }
 
 static void
@@ -371,19 +364,16 @@
 	       ", sll_pkttype=PACKET_HOST, sll_halen=0}, %u)"
 	       " = %d EBADF (%m)\n", c_ll.sll_ifindex, len, ret);
 
-#ifdef HAVE_IF_INDEXTONAME
-	const int id = if_nametoindex("lo");
-	if (id) {
-		((struct sockaddr_ll *) ll)->sll_ifindex = id;
+	((struct sockaddr_ll *) ll)->sll_ifindex = ifindex_lo();
+	if (((struct sockaddr_ll *) ll)->sll_ifindex) {
 		ret = connect(-1, ll, len);
 		printf("connect(-1, {sa_family=AF_PACKET"
 		       ", sll_protocol=htons(ETH_P_ALL)"
-		       ", sll_ifindex=if_nametoindex(\"lo\")"
+		       ", sll_ifindex=%s"
 		       ", sll_hatype=ARPHRD_ETHER"
 		       ", sll_pkttype=PACKET_HOST, sll_halen=0}, %u)"
-		       " = %d EBADF (%m)\n", len, ret);
+		       " = %d EBADF (%m)\n", IFINDEX_LO_STR, len, ret);
 	}
-#endif
 }
 
 #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
diff --git a/tests-mx32/netlink_crypto.c b/tests-mx32/netlink_crypto.c
new file mode 100644
index 0000000..deb1644
--- /dev/null
+++ b/tests-mx32/netlink_crypto.c
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_CRYPTOUSER_H
+
+# include <stdio.h>
+# include <unistd.h>
+# include <sys/socket.h>
+# include <linux/cryptouser.h>
+# include "test_netlink.h"
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_type = CRYPTO_MSG_NEWALG,
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_NEWALG"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = CRYPTO_MSG_GETALG;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_GETALG"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = CRYPTO_MSG_NEWALG;
+	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_NEWALG"
+	       ", flags=NLM_F_ECHO|NLM_F_REPLACE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = CRYPTO_MSG_DELALG;
+	nlh.nlmsg_flags = NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_DELALG"
+	       ", flags=%#x /* NLM_F_??? */, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, NLM_F_REPLACE,
+	       (unsigned) sizeof(nlh), sprintrc(rc));
+}
+
+static void
+test_crypto_msg_newalg(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	struct crypto_user_alg alg = {
+		.cru_name = "abcd",
+		.cru_driver_name = "efgh",
+		.cru_module_name = "dcba",
+		.cru_type = 0xabcdfabc,
+		.cru_mask = 0xfedabacd,
+		.cru_refcnt = 0xbcacfacd,
+		.cru_flags = 0xefacdbad
+	};
+	TEST_NETLINK_OBJECT_EX(fd, nlh0,
+			       CRYPTO_MSG_NEWALG, NLM_F_REQUEST,
+			       alg, print_quoted_memory,
+			       printf("{cru_name=\"abcd\""
+				      ", cru_driver_name=\"efgh\""
+				      ", cru_module_name=\"dcba\"");
+			       PRINT_FIELD_X(", ", alg, cru_type);
+			       PRINT_FIELD_X(", ", alg, cru_mask);
+			       PRINT_FIELD_U(", ", alg, cru_refcnt);
+			       PRINT_FIELD_X(", ", alg, cru_flags);
+			       printf("}"));
+
+	fill_memory_ex(alg.cru_name, sizeof(alg.cru_name), '0', 10);
+	fill_memory_ex(alg.cru_driver_name, sizeof(alg.cru_driver_name),
+		       'a', 'z' - 'a' + 1);
+	fill_memory_ex(alg.cru_module_name, sizeof(alg.cru_module_name),
+		       'A', 'Z' - 'A' + 1);
+
+	TEST_NETLINK_OBJECT_EX(fd, nlh0,
+			       CRYPTO_MSG_NEWALG, NLM_F_REQUEST,
+			       alg, print_quoted_memory,
+			       printf("{cru_name=");
+			       print_quoted_memory(alg.cru_name,
+				       sizeof(alg.cru_name) - 1);
+			       printf("..., cru_driver_name=");
+			       print_quoted_memory(alg.cru_driver_name,
+				       sizeof(alg.cru_driver_name) - 1);
+			       printf("..., cru_module_name=");
+			       print_quoted_memory(alg.cru_module_name,
+				       sizeof(alg.cru_module_name) - 1);
+			       PRINT_FIELD_X("..., ", alg, cru_type);
+			       PRINT_FIELD_X(", ", alg, cru_mask);
+			       PRINT_FIELD_U(", ", alg, cru_refcnt);
+			       PRINT_FIELD_X(", ", alg, cru_flags);
+			       printf("}"));
+}
+
+static void
+test_crypto_msg_unspec(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* CRYPTO_MSG_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      4, "abcd", 4, printf("\"\\x61\\x62\\x63\\x64\""));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_CRYPTO);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+	test_crypto_msg_newalg(fd);
+	test_crypto_msg_unspec(fd);
+
+	printf("+++ exited with 0 +++\n");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_CRYPTOUSER_H")
+
+#endif
diff --git a/tests-mx32/netlink_crypto.gen.test b/tests-mx32/netlink_crypto.gen.test
new file mode 100755
index 0000000..b138099
--- /dev/null
+++ b/tests-mx32/netlink_crypto.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_crypto +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/netlink_generic.c b/tests-mx32/netlink_generic.c
index 4f80c8b..cd9fbea 100644
--- a/tests-mx32/netlink_generic.c
+++ b/tests-mx32/netlink_generic.c
@@ -63,7 +63,8 @@
 	rc = sendto(fd, &req, sizeof(req), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=nlctrl"
 	       ", flags=NLM_F_REQUEST|0x300, seq=0, pid=0}"
-	       ", \"\\3\\0\\0\\0\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", \"\\x03\\x00\\x00\\x00\"}, %u"
+	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, req.nlh.nlmsg_len,
 	       (unsigned int) sizeof(req), sprintrc(rc));
 }
diff --git a/tests-mx32/netlink_inet_diag.c b/tests-mx32/netlink_inet_diag.c
index 5f68cb3..8b3d8af 100644
--- a/tests-mx32/netlink_inet_diag.c
+++ b/tests-mx32/netlink_inet_diag.c
@@ -2,6 +2,7 @@
  * This file is part of inet-yy strace test.
  *
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/netlink_kobject_uevent.c b/tests-mx32/netlink_kobject_uevent.c
new file mode 100644
index 0000000..cacab5f
--- /dev/null
+++ b/tests-mx32/netlink_kobject_uevent.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <stdio.h>
+#include <sys/socket.h>
+#include "netlink.h"
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	long rc;
+	int fd = create_nl_socket(NETLINK_KOBJECT_UEVENT);
+
+	/* test using data that looks like a zero-length C string */
+	char *const buf = tail_alloc(DEFAULT_STRLEN + 1);
+	buf[0] = '=';
+	fill_memory_ex(buf + 1, DEFAULT_STRLEN, 0, DEFAULT_STRLEN);
+
+	rc = sendto(fd, buf + 1, DEFAULT_STRLEN, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(buf + 1, DEFAULT_STRLEN);
+	printf(", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       DEFAULT_STRLEN, sprintrc(rc));
+
+	rc = sendto(fd, buf, DEFAULT_STRLEN + 1, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(buf, DEFAULT_STRLEN);
+	printf("..., %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       DEFAULT_STRLEN + 1, sprintrc(rc));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/netlink_kobject_uevent.gen.test b/tests-mx32/netlink_kobject_uevent.gen.test
new file mode 100755
index 0000000..310a70b
--- /dev/null
+++ b/tests-mx32/netlink_kobject_uevent.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_kobject_uevent +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/netlink_netlink_diag.c b/tests-mx32/netlink_netlink_diag.c
index d7e83f5..855e404 100644
--- a/tests-mx32/netlink_netlink_diag.c
+++ b/tests-mx32/netlink_netlink_diag.c
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/netlink_protocol.c b/tests-mx32/netlink_protocol.c
index f09dd9a..be1a652 100644
--- a/tests-mx32/netlink_protocol.c
+++ b/tests-mx32/netlink_protocol.c
@@ -83,13 +83,15 @@
 
 	/* whole message length < sizeof(struct nlmsghdr) */
 	rc = sendto(fd, req->magic, sizeof(req->magic), MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, \"abcd\", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	printf("sendto(%d, \"\\x61\\x62\\x63\\x64\""
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, (unsigned) sizeof(req->magic), sprintrc(rc));
 
 	/* a single message with some data */
 	rc = sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, req->nlh.nlmsg_len, NLM_F_DUMP,
 	       (unsigned) sizeof(*req), sprintrc(rc));
 
@@ -105,7 +107,8 @@
 	req->nlh.nlmsg_len = sizeof(*req) + 8;
 	rc = sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, req->nlh.nlmsg_len, NLM_F_DUMP,
 	       (unsigned) sizeof(*req), sprintrc(rc));
 
@@ -128,8 +131,9 @@
 
 	rc = sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, {{len=%u, type=NLMSG_NOOP"
-	       ", flags=NLM_F_REQUEST|0x%x, seq=0, pid=0}, \"abcd\"}]"
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}]"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
 	       reqs->req2.nlh.nlmsg_len, NLM_F_DUMP,
@@ -139,8 +143,8 @@
 	void *const efault2 = tail_memdup(&reqs->req1, sizeof(reqs->req1));
 	rc = sendto(fd, efault2, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, %p], %u, MSG_DONTWAIT, NULL, 0)"
-	       " = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", %p], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
 	       &((struct reqs *) efault2)->req2, (unsigned) sizeof(*reqs),
 	       sprintrc(rc));
@@ -150,20 +154,20 @@
 		    NULL, 0);
 	errstr = sprintrc(rc);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, \"",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}, ",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP);
-	print_quoted_memory((void *) &reqs->req2.nlh,
-			    sizeof(reqs->req2) - sizeof(req->nlh));
-	printf("\"], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	print_quoted_hex(&reqs->req2.nlh,
+			 sizeof(reqs->req2) - sizeof(req->nlh));
+	printf("], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       (unsigned) (sizeof(*reqs) - sizeof(req->nlh)), errstr);
 
 	/* second nlmsg_len < sizeof(struct nlmsghdr) */
 	reqs->req2.nlh.nlmsg_len = 4;
 	rc = sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, {len=%u, type=NLMSG_NOOP"
-	       ", flags=NLM_F_REQUEST|0x%x, seq=0, pid=0}], %u"
-	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", {len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
+	       ", seq=0, pid=0}], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
 	       reqs->req2.nlh.nlmsg_len, NLM_F_DUMP,
 	       (unsigned) sizeof(*reqs), sprintrc(rc));
@@ -223,7 +227,8 @@
 
 	rc = sendto(fd, nlh, NLMSG_HDRLEN + 2, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=NLMSG_ERROR, flags=NLM_F_REQUEST"
-	       ", seq=0, pid=0}, \"42\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x34\\x32\"}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, NLMSG_HDRLEN + 2, NLMSG_HDRLEN + 2, sprintrc(rc));
 
 	/* error message with room for the error code only */
@@ -302,8 +307,8 @@
 	printf("sendto(%d, {{len=%u, type=NLMSG_ERROR, flags=NLM_F_REQUEST"
 	       ", seq=0, pid=0}, {error=-EACCES"
 	       ", msg={{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=%u, pid=%u}, \"abcd\"}}}, %u, MSG_DONTWAIT, NULL, 0)"
-	       " = %s\n",
+	       ", seq=%u, pid=%u}, \"\\x61\\x62\\x63\\x64\"}}}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh->nlmsg_len, err->msg.nlmsg_len, NLM_F_DUMP,
 	       err->msg.nlmsg_seq, err->msg.nlmsg_pid,
 	       nlh->nlmsg_len, sprintrc(rc));
@@ -339,8 +344,8 @@
 	memcpy(NLMSG_DATA(nlh), "42", 2);
 
 	rc = sendto(fd, nlh, NLMSG_HDRLEN + 2, MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, {{len=%u, type=NLMSG_DONE, flags=NLM_F_MULTI"
-	       ", seq=0, pid=0}, \"42\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	printf("sendto(%d, {{len=%u, type=NLMSG_DONE, flags=NLM_F_MULTI, seq=0"
+	       ", pid=0}, \"\\x34\\x32\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, NLMSG_HDRLEN + 2, NLMSG_HDRLEN + 2, sprintrc(rc));
 
 	/* NLMSG_DONE message with enough room for an integer payload */
@@ -358,6 +363,45 @@
 	       fd, nlh->nlmsg_len, num, nlh->nlmsg_len, sprintrc(rc));
 }
 
+#if defined NLM_F_CAPPED || defined NLM_F_ACK_TLVS
+static void
+test_ack_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_type = NLMSG_ERROR,
+	};
+
+#ifdef NLM_F_CAPPED
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CAPPED,
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_CAPPED, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+#endif
+
+#ifdef NLM_F_ACK_TLVS
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK_TLVS;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_ACK_TLVS, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+#endif
+
+#if defined NLM_F_CAPPED && defined NLM_F_ACK_TLVS
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CAPPED | NLM_F_ACK_TLVS;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_CAPPED|NLM_F_ACK_TLVS, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+#endif
+}
+#endif
+
 int main(void)
 {
 	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
@@ -373,6 +417,9 @@
 	send_query(fd);
 	test_nlmsgerr(fd);
 	test_nlmsg_done(fd);
+#if defined NLM_F_CAPPED || defined NLM_F_ACK_TLVS
+	test_ack_flags(fd);
+#endif
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-mx32/netlink_route.c b/tests-mx32/netlink_route.c
index 54a54b7..6af3b13 100644
--- a/tests-mx32/netlink_route.c
+++ b/tests-mx32/netlink_route.c
@@ -27,12 +27,61 @@
 
 #include "tests.h"
 #include <stdio.h>
+#include <stdint.h>
 #include <string.h>
 #include <unistd.h>
 #include <sys/socket.h>
-#include "netlink.h"
+#include <netinet/in.h>
+#include "test_netlink.h"
+#ifdef HAVE_STRUCT_DCBMSG
+# include <linux/dcbnl.h>
+#endif
+#ifdef HAVE_LINUX_FIB_RULES_H
+# include <linux/fib_rules.h>
+#endif
+#ifdef HAVE_LINUX_IF_ADDR_H
+# include <linux/if_addr.h>
+#endif
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+# include <linux/if_addrlabel.h>
+#endif
+#include <linux/if_arp.h>
+#include <linux/if_bridge.h>
+#include <linux/ip.h>
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+#ifdef HAVE_STRUCT_NETCONFMSG
+# include <linux/netconf.h>
+#endif
 #include <linux/rtnetlink.h>
 
+#define TEST_NL_ROUTE(fd_, nlh0_, type_, obj_, print_family_, ...)	\
+	do {								\
+		/* family and string */					\
+		TEST_NETLINK((fd_), (nlh0_),				\
+			     type_, NLM_F_REQUEST,			\
+			     sizeof(obj_) - 1,				\
+			     &(obj_), sizeof(obj_) - 1,			\
+			     (print_family_);				\
+			     printf(", ...}"));				\
+									\
+		/* sizeof(obj_) */					\
+		TEST_NETLINK((fd_), (nlh0_),				\
+			     type_, NLM_F_REQUEST,			\
+			     sizeof(obj_), &(obj_), sizeof(obj_),	\
+			     (print_family_);				\
+			      __VA_ARGS__);				\
+									\
+		/* short read of sizeof(obj_) */			\
+		TEST_NETLINK((fd_), (nlh0_),				\
+			     type_, NLM_F_REQUEST,			\
+			     sizeof(obj_), &(obj_), sizeof(obj_) - 1,	\
+			     (print_family_);				\
+			     printf(", %p}",				\
+				    NLMSG_DATA(TEST_NETLINK_nlh) + 1));	\
+	} while (0)
+
 static void
 test_nlmsg_type(const int fd)
 {
@@ -92,6 +141,320 @@
 	       (unsigned) sizeof(nlh), sprintrc(rc));
 }
 
+static void
+test_nlmsg_done(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const int num = 0xabcdefad;
+
+	TEST_NETLINK(fd, nlh0, NLMSG_DONE, NLM_F_REQUEST,
+		     sizeof(num), &num, sizeof(num),
+		     printf("%d", num));
+}
+
+static void
+test_rtnl_unspec(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	/* unspecified family only */
+	uint8_t family = 0;
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(family), &family, sizeof(family),
+		      printf("{family=AF_UNSPEC}"));
+
+	/* unknown family only */
+	family = 0xff;
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(family), &family, sizeof(family),
+		      printf("{family=0xff /* AF_??? */}"));
+
+	/* short read of family */
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(family), &family, sizeof(family) - 1,
+		      printf("%p", NLMSG_DATA(TEST_NETLINK_nlh)));
+
+	/* unspecified family and string */
+	char buf[sizeof(family) + 4];
+	family = 0;
+	memcpy(buf, &family, sizeof(family));
+	memcpy(buf + sizeof(family), "1234", 4);
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(buf), buf, sizeof(buf),
+		      printf("{family=AF_UNSPEC, \"\\x31\\x32\\x33\\x34\"}"));
+
+	/* unknown family and string */
+	family = 0xfd;
+	memcpy(buf, &family, sizeof(family));
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(buf), buf, sizeof(buf),
+		      printf("{family=%#x /* AF_??? */"
+			     ", \"\\x31\\x32\\x33\\x34\"}", family));
+}
+
+static void
+test_rtnl_link(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ifinfomsg ifinfo = {
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+		.ifi_change = 0xfabcdeba
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETLINK, ifinfo,
+		      printf("{ifi_family=AF_UNIX"),
+		      printf(", ifi_type=ARPHRD_LOOPBACK"
+			     ", ifi_index=" IFINDEX_LO_STR
+			     ", ifi_flags=IFF_UP");
+		      PRINT_FIELD_X(", ", ifinfo, ifi_change);
+		      printf("}"));
+}
+
+static void
+test_rtnl_addr(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ifaddrmsg msg = {
+		.ifa_family = AF_UNIX,
+		.ifa_prefixlen = 0xde,
+		.ifa_flags = IFA_F_SECONDARY,
+		.ifa_scope = RT_SCOPE_UNIVERSE,
+		.ifa_index = ifindex_lo()
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDR, msg,
+		      printf("{ifa_family=AF_UNIX"),
+		      PRINT_FIELD_U(", ", msg, ifa_prefixlen);
+		      printf(", ifa_flags=IFA_F_SECONDARY"
+			     ", ifa_scope=RT_SCOPE_UNIVERSE"
+			     ", ifa_index=" IFINDEX_LO_STR);
+		      printf("}"));
+}
+
+static void
+test_rtnl_route(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct rtmsg msg = {
+		.rtm_family = AF_UNIX,
+		.rtm_dst_len = 0xaf,
+		.rtm_src_len = 0xda,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_DEFAULT,
+		.rtm_protocol = RTPROT_KERNEL,
+		.rtm_scope = RT_SCOPE_UNIVERSE,
+		.rtm_type = RTN_LOCAL,
+		.rtm_flags = RTM_F_NOTIFY
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETROUTE, msg,
+		      printf("{rtm_family=AF_UNIX"),
+		      PRINT_FIELD_U(", ", msg, rtm_dst_len);
+		      PRINT_FIELD_U(", ", msg, rtm_src_len);
+		      printf(", rtm_tos=IPTOS_LOWDELAY"
+			     ", rtm_table=RT_TABLE_DEFAULT"
+			     ", rtm_protocol=RTPROT_KERNEL"
+			     ", rtm_scope=RT_SCOPE_UNIVERSE"
+			     ", rtm_type=RTN_LOCAL"
+			     ", rtm_flags=RTM_F_NOTIFY}"));
+}
+
+#ifdef HAVE_LINUX_FIB_RULES_H
+static void
+test_rtnl_rule(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	struct rtmsg msg = {
+		.rtm_family = AF_UNIX,
+		.rtm_dst_len = 0xaf,
+		.rtm_src_len = 0xda,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_UNSPEC,
+		.rtm_type = FR_ACT_TO_TBL,
+		.rtm_flags = FIB_RULE_INVERT
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETRULE, msg,
+		      printf("{family=AF_UNIX"),
+		      printf(", dst_len=%u, src_len=%u"
+			     ", tos=IPTOS_LOWDELAY"
+			     ", table=RT_TABLE_UNSPEC"
+			     ", action=FR_ACT_TO_TBL"
+			     ", flags=FIB_RULE_INVERT}",
+			     msg.rtm_dst_len,
+			     msg.rtm_src_len));
+}
+#endif
+
+static void
+test_rtnl_neigh(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ndmsg msg = {
+		.ndm_family = AF_UNIX,
+		.ndm_ifindex = ifindex_lo(),
+		.ndm_state = NUD_PERMANENT,
+		.ndm_flags = NTF_PROXY,
+		.ndm_type = RTN_UNSPEC
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETNEIGH, msg,
+		      printf("{ndm_family=AF_UNIX"),
+		      printf(", ndm_ifindex=" IFINDEX_LO_STR
+			     ", ndm_state=NUD_PERMANENT"
+			     ", ndm_flags=NTF_PROXY"
+			     ", ndm_type=RTN_UNSPEC}"));
+}
+
+static void
+test_rtnl_neightbl(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct ndtmsg msg = {
+		.ndtm_family = AF_NETLINK
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETNEIGHTBL, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{ndtm_family=AF_NETLINK}"));
+}
+
+static void
+test_rtnl_tc(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct tcmsg msg = {
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo(),
+		.tcm_handle = 0xfadcdafb,
+		.tcm_parent = 0xafbcadab,
+		.tcm_info = 0xbcaedafa
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETQDISC, msg,
+		      printf("{tcm_family=AF_UNIX"),
+		      printf(", tcm_ifindex=" IFINDEX_LO_STR);
+		      PRINT_FIELD_U(", ", msg, tcm_handle);
+		      PRINT_FIELD_U(", ", msg, tcm_parent);
+		      PRINT_FIELD_U(", ", msg, tcm_info);
+		      printf("}"));
+}
+
+static void
+test_rtnl_tca(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	struct tcamsg msg = {
+		.tca_family = AF_INET
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETACTION, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{tca_family=AF_INET}"));
+}
+
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+static void
+test_rtnl_addrlabel(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ifaddrlblmsg msg = {
+		.ifal_family = AF_UNIX,
+		.ifal_prefixlen = 0xaf,
+		.ifal_flags = 0xbd,
+		.ifal_index = ifindex_lo(),
+		.ifal_seq = 0xfadcdafb
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDRLABEL, msg,
+		      printf("{ifal_family=AF_UNIX"),
+		      PRINT_FIELD_U(", ", msg, ifal_prefixlen);
+		      PRINT_FIELD_U(", ", msg, ifal_flags);
+		      printf(", ifal_index=" IFINDEX_LO_STR);
+		      PRINT_FIELD_U(", ", msg, ifal_seq);
+		      printf("}"));
+}
+#endif
+
+#ifdef HAVE_STRUCT_DCBMSG
+static void
+test_rtnl_dcb(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct dcbmsg msg = {
+		.dcb_family = AF_UNIX,
+		.cmd = DCB_CMD_UNDEFINED
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETDCB, msg,
+		      printf("{dcb_family=AF_UNIX"),
+		      printf(", cmd=DCB_CMD_UNDEFINED}"));
+}
+#endif
+
+#ifdef HAVE_STRUCT_NETCONFMSG
+static void
+test_rtnl_netconf(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct netconfmsg msg = {
+		.ncm_family = AF_INET
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETNETCONF, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{ncm_family=AF_INET}"));
+}
+#endif
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+static void
+test_rtnl_mdb(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct br_port_msg msg = {
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETMDB, msg,
+		      printf("{family=AF_UNIX"),
+		      printf(", ifindex=" IFINDEX_LO_STR "}"));
+}
+#endif
+
+#ifdef RTM_NEWNSID
+static void
+test_rtnl_nsid(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct rtgenmsg msg = {
+		.rtgen_family = AF_UNIX
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETNSID, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{rtgen_family=AF_UNIX}"));
+}
+#endif
+
 int main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
@@ -100,6 +463,33 @@
 
 	test_nlmsg_type(fd);
 	test_nlmsg_flags(fd);
+	test_nlmsg_done(fd);
+	test_rtnl_unspec(fd);
+	test_rtnl_link(fd);
+	test_rtnl_addr(fd);
+	test_rtnl_route(fd);
+#ifdef HAVE_LINUX_FIB_RULES_H
+	test_rtnl_rule(fd);
+#endif
+	test_rtnl_neigh(fd);
+	test_rtnl_neightbl(fd);
+	test_rtnl_tc(fd);
+	test_rtnl_tca(fd);
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+	test_rtnl_addrlabel(fd);
+#endif
+#ifdef HAVE_STRUCT_DCBMSG
+	test_rtnl_dcb(fd);
+#endif
+#ifdef HAVE_STRUCT_NETCONFMSG
+	test_rtnl_netconf(fd);
+#endif
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+	test_rtnl_mdb(fd);
+#endif
+#ifdef RTM_NEWNSID
+	test_rtnl_nsid(fd);
+#endif
 
 	printf("+++ exited with 0 +++\n");
 
diff --git a/tests-mx32/netlink_selinux.c b/tests-mx32/netlink_selinux.c
index 6494fda..2d76822 100644
--- a/tests-mx32/netlink_selinux.c
+++ b/tests-mx32/netlink_selinux.c
@@ -30,7 +30,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/socket.h>
-#include "netlink.h"
+#include "test_netlink.h"
 #include <linux/selinux_netlink.h>
 
 static void
@@ -50,6 +50,46 @@
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 }
 
+static void
+test_selnl_msg_unspec(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* SELNL_MSG_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      4, "1234", 4,
+		      printf("\"\\x31\\x32\\x33\\x34\""));
+}
+
+static void
+test_selnl_msg_setenforce(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	static const struct selnl_msg_setenforce msg = {
+		.val = 0xfbdcdfab
+	};
+	TEST_NETLINK_OBJECT(fd, nlh0,
+			    SELNL_MSG_SETENFORCE, NLM_F_REQUEST, msg,
+			    PRINT_FIELD_D("{", msg, val);
+			    printf("}"));
+}
+
+static void
+test_selnl_msg_policyload(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	static const struct selnl_msg_policyload msg = {
+		.seqno = 0xabdcfabc
+	};
+	TEST_NETLINK_OBJECT(fd, nlh0,
+			    SELNL_MSG_POLICYLOAD, NLM_F_REQUEST, msg,
+			    PRINT_FIELD_U("{", msg, seqno);
+			    printf("}"));
+}
+
 int main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
@@ -57,6 +97,9 @@
 	int fd = create_nl_socket(NETLINK_SELINUX);
 
 	test_nlmsg_type(fd);
+	test_selnl_msg_unspec(fd);
+	test_selnl_msg_setenforce(fd);
+	test_selnl_msg_policyload(fd);
 
 	printf("+++ exited with 0 +++\n");
 
diff --git a/tests-mx32/netlink_sock_diag-v.sh b/tests-mx32/netlink_sock_diag-v.sh
new file mode 100755
index 0000000..0471ae3
--- /dev/null
+++ b/tests-mx32/netlink_sock_diag-v.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Check verbose decoding of NETLINK_SOCK_DIAG protocol
+#
+# Copyright (c) 2017 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+run_prog ../netlink_netlink_diag
+run_strace_match_diff -v -e trace=sendto
diff --git a/tests-mx32/netlink_sock_diag.c b/tests-mx32/netlink_sock_diag.c
index b8d0190..c2ebf12 100644
--- a/tests-mx32/netlink_sock_diag.c
+++ b/tests-mx32/netlink_sock_diag.c
@@ -35,7 +35,7 @@
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <netinet/tcp.h>
-#include "netlink.h"
+#include "test_netlink.h"
 #include <linux/if_ether.h>
 #include <linux/inet_diag.h>
 #include <linux/netlink_diag.h>
@@ -48,6 +48,48 @@
 
 #define SMC_ACTIVE 1
 
+#define TEST_SOCK_DIAG(fd_, nlh0_,					\
+		       family_, type_, flags_,				\
+		       obj_, print_family_, ...)			\
+									\
+	do {								\
+		/* family only */					\
+		uint8_t family = (family_);				\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(family), &family, sizeof(family),	\
+			      printf("{family=%s}", #family_));		\
+									\
+		/* family and string */					\
+		char buf[sizeof(family) + 4];				\
+		memcpy(buf, &family, sizeof(family));			\
+		memcpy(buf + sizeof(family), "1234", 4);		\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(buf), buf, sizeof(buf),		\
+			      (print_family_);				\
+			      printf(", ...}"));			\
+									\
+		/* sizeof(obj_) */					\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(obj_), &(obj_), sizeof(obj_),	\
+			      (print_family_);				\
+			      __VA_ARGS__);				\
+									\
+		/* short read of sizeof(obj_) */			\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(obj_), &(obj_), sizeof(obj_) - 1,	\
+			      (print_family_);				\
+			      printf(", %p}",				\
+				     NLMSG_DATA(TEST_NETLINK_nlh) + 1));\
+	} while (0)
+
 static void
 test_nlmsg_type(const int fd)
 {
@@ -85,259 +127,103 @@
 static void
 test_odd_family_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
 
 	/* unspecified family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	uint8_t family = 0;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=AF_UNSPEC}"));
 
 	/* unknown family only */
-	*family = 0xff;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=0xff /* AF_??? */}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	family = 0xff;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=%#x /* AF_??? */}", family));
 
 	/* short read of family */
-	memmove(nlh0, nlh, NLMSG_HDRLEN);
-	nlh = nlh0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, %p}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_DATA(nlh),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(family), &family, sizeof(family) - 1,
+		     printf("%p", NLMSG_DATA(TEST_NETLINK_nlh)));
 
 	/* unspecified family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	char buf[sizeof(family) + 4];
+	family = 0;
+	memcpy(buf, &family, sizeof(family));
+	memcpy(buf + sizeof(family), "1234", 4);
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=AF_UNSPEC, \"\\x31\\x32\\x33\\x34\"}"));
 
 	/* unknown family and string */
-	*family = 0xfd;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=0xfd /* AF_??? */, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	family = 0xfd;
+	memcpy(buf, &family, sizeof(family));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=%#x /* AF_??? */"
+			    ", \"\\x31\\x32\\x33\\x34\"}", family));
 }
 
 static void
 test_odd_family_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
 
 	/* unspecified family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	uint8_t family = 0;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=AF_UNSPEC}"));
 
 	/* unknown family only */
-	*family = 0xff;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=0xff /* AF_??? */}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	family = 0xff;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=%#x /* AF_??? */}", family));
 
 	/* short read of family */
-	memmove(nlh0, nlh, NLMSG_HDRLEN);
-	nlh = nlh0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, %p}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_DATA(nlh),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(family), &family, sizeof(family) - 1,
+		     printf("%p", NLMSG_DATA(TEST_NETLINK_nlh)));
 
 	/* unspecified family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	char buf[sizeof(family) + 4];
+	family = 0;
+	memcpy(buf, &family, sizeof(family));
+	memcpy(buf + sizeof(family), "1234", 4);
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=AF_UNSPEC, \"\\x31\\x32\\x33\\x34\"}"));
 
 	/* unknown family and string */
-	*family = 0xfb;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=0xfb /* AF_??? */, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	family = 0xfd;
+	memcpy(buf, &family, sizeof(family));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=%#x /* AF_??? */"
+			    ", \"\\x31\\x32\\x33\\x34\"}", family));
 }
 
 static void
 test_unix_diag_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct unix_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_UNIX}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_UNIX, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* unix_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	req = NLMSG_DATA(nlh);
-	*req = (struct unix_diag_req) {
+	static const struct unix_diag_req req = {
 		.sdiag_family = AF_UNIX,
 		.sdiag_protocol = 253,
 		.udiag_states = 1 << TCP_ESTABLISHED | 1 << TCP_LISTEN,
@@ -345,316 +231,75 @@
 		.udiag_show = UDIAG_SHOW_NAME,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_UNIX, sdiag_protocol=%u"
-	       ", udiag_states=1<<TCP_ESTABLISHED|1<<TCP_LISTEN, udiag_ino=%u"
-	       ", udiag_show=UDIAG_SHOW_NAME, udiag_cookie=[%u, %u]}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       253, 0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of unix_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {sdiag_family=AF_UNIX, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_UNIX"),
+		       PRINT_FIELD_U(", ", req, sdiag_protocol);
+		       printf(", udiag_states=1<<TCP_ESTABLISHED|1<<TCP_LISTEN");
+		       PRINT_FIELD_U(", ", req, udiag_ino);
+		       printf(", udiag_show=UDIAG_SHOW_NAME");
+		       PRINT_FIELD_COOKIE(", ", req, udiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_unix_diag_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct unix_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_UNIX}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {udiag_family=AF_UNIX, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* unix_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct unix_diag_msg) {
+	static const struct unix_diag_msg msg = {
 		.udiag_family = AF_UNIX,
 		.udiag_type = SOCK_STREAM,
 		.udiag_state = TCP_FIN_WAIT1,
 		.udiag_ino = 0xfacefeed,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {udiag_family=AF_UNIX, udiag_type=SOCK_STREAM"
-	       ", udiag_state=TCP_FIN_WAIT1"
-	       ", udiag_ino=%u, udiag_cookie=[%u, %u]}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of unix_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{udiag_family=AF_UNIX"),
+		       printf(", udiag_type=SOCK_STREAM"
+			      ", udiag_state=TCP_FIN_WAIT1");
+		       PRINT_FIELD_U(", ", msg, udiag_ino);
+		       PRINT_FIELD_COOKIE(", ", msg, udiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_netlink_diag_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct netlink_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_NETLINK}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* netlink_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	req = NLMSG_DATA(nlh);
-	*req = (struct netlink_diag_req) {
+	struct netlink_diag_req req = {
 		.sdiag_family = AF_NETLINK,
 		.sdiag_protocol = NDIAG_PROTO_ALL,
 		.ndiag_ino = 0xfacefeed,
 		.ndiag_show = NDIAG_SHOW_MEMINFO,
 		.ndiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_NETLINK"),
+		       printf(", sdiag_protocol=NDIAG_PROTO_ALL");
+		       PRINT_FIELD_U(", ", req, ndiag_ino);
+		       printf(", ndiag_show=NDIAG_SHOW_MEMINFO");
+		       PRINT_FIELD_COOKIE(", ", req, ndiag_cookie);
+		       printf("}"));
 
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, sdiag_protocol=NDIAG_PROTO_ALL"
-	       ", ndiag_ino=%u, ndiag_show=NDIAG_SHOW_MEMINFO"
-	       ", ndiag_cookie=[%u, %u]}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	req->sdiag_protocol = NETLINK_ROUTE;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, sdiag_protocol=NETLINK_ROUTE"
-	       ", ndiag_ino=%u, ndiag_show=NDIAG_SHOW_MEMINFO"
-	       ", ndiag_cookie=[%u, %u]}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of netlink_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	req.sdiag_protocol = NETLINK_ROUTE;
+	req.ndiag_show = NDIAG_SHOW_GROUPS;
+	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_NETLINK"),
+		       printf(", sdiag_protocol=NETLINK_ROUTE");
+		       PRINT_FIELD_U(", ", req, ndiag_ino);
+		       printf(", ndiag_show=NDIAG_SHOW_GROUPS");
+		       PRINT_FIELD_COOKIE(", ", req, ndiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_netlink_diag_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct netlink_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_NETLINK}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {ndiag_family=AF_NETLINK, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* netlink_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct netlink_diag_msg) {
+	static const struct netlink_diag_msg msg = {
 		.ndiag_family = AF_NETLINK,
 		.ndiag_type = SOCK_RAW,
 		.ndiag_protocol = NETLINK_ROUTE,
@@ -665,233 +310,60 @@
 		.ndiag_ino = 0xdaeefacd,
 		.ndiag_cookie = { 0xbadc0ded, 0xdeadbeef }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {ndiag_family=AF_NETLINK"
-	       ", ndiag_type=SOCK_RAW, ndiag_protocol=NETLINK_ROUTE"
-	       ", ndiag_state=NETLINK_CONNECTED, ndiag_portid=%u"
-	       ", ndiag_dst_portid=%u, ndiag_dst_group=%u, ndiag_ino=%u"
-	       ", ndiag_cookie=[%u, %u]}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xbadc0ded, 0xdeadbeef, 0xfacefeed,
-	       0xdaeefacd, 0xbadc0ded, 0xdeadbeef,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of netlink_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {ndiag_family=AF_NETLINK, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{ndiag_family=AF_NETLINK"),
+		       printf(", ndiag_type=SOCK_RAW"
+			      ", ndiag_protocol=NETLINK_ROUTE"
+			      ", ndiag_state=NETLINK_CONNECTED");
+		       PRINT_FIELD_U(", ", msg, ndiag_portid);
+		       PRINT_FIELD_U(", ", msg, ndiag_dst_portid);
+		       PRINT_FIELD_U(", ", msg, ndiag_dst_group);
+		       PRINT_FIELD_U(", ", msg, ndiag_ino);
+		       PRINT_FIELD_COOKIE(", ", msg, ndiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_packet_diag_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct packet_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_PACKET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_PACKET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* packet_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	req = NLMSG_DATA(nlh);
-	*req = (struct packet_diag_req) {
+	static const struct packet_diag_req req = {
 		.sdiag_family = AF_PACKET,
 		.sdiag_protocol = ETH_P_LOOP,
 		.pdiag_ino = 0xfacefeed,
 		.pdiag_show = PACKET_SHOW_INFO,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_PACKET, sdiag_protocol=ETH_P_LOOP"
-	       ", pdiag_ino=%u, pdiag_show=PACKET_SHOW_INFO"
-	       ", pdiag_cookie=[%u, %u]}}, %u"
-	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of packet_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_PACKET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_PACKET"),
+		       printf(", sdiag_protocol=ETH_P_LOOP");
+		       PRINT_FIELD_U(", ", req, pdiag_ino);
+		       printf(", pdiag_show=PACKET_SHOW_INFO");
+		       PRINT_FIELD_COOKIE(", ", req, pdiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_packet_diag_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct packet_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_PACKET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {pdiag_family=AF_PACKET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* packet_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct packet_diag_msg) {
+	static const struct packet_diag_msg msg = {
 		.pdiag_family = AF_PACKET,
 		.pdiag_type = SOCK_STREAM,
 		.pdiag_num = 0xbadc,
 		.pdiag_ino = 0xfacefeed,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {pdiag_family=AF_PACKET, pdiag_type=SOCK_STREAM"
-	       ", pdiag_num=%u, pdiag_ino=%u, pdiag_cookie=[%u, %u]}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xbadc, 0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of packet_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {pdiag_family=AF_PACKET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{pdiag_family=AF_PACKET"),
+		       printf(", pdiag_type=SOCK_STREAM");
+		       PRINT_FIELD_U(", ", msg, pdiag_num);
+		       PRINT_FIELD_U(", ", msg, pdiag_ino);
+		       PRINT_FIELD_COOKIE(", ", msg, pdiag_cookie);
+		       printf("}"));
 }
 
 static void
@@ -899,21 +371,8 @@
 {
 	const char address[] = "12.34.56.78";
 	const char address6[] = "12:34:56:78:90:ab:cd:ef";
-	struct nlmsghdr *nlh;
-	struct inet_diag_req_v2 *req;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	nlh = nlh0 - sizeof(*req);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct inet_diag_req_v2) {
+	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
 		.sdiag_protocol = IPPROTO_TCP,
@@ -921,245 +380,107 @@
 		.id = {
 			.idiag_sport = 0xfacd,
 			.idiag_dport = 0xdead,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST,
+		     sizeof(req), &req, sizeof(req),
+		     printf("{sdiag_family=AF_INET"),
+		     printf(", sdiag_protocol=IPPROTO_TCP"
+			    ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+			    ", idiag_states=1<<TCP_CLOSE"
+			    ", id={idiag_sport=htons(%u)"
+			    ", idiag_dport=htons(%u)"
+			    ", idiag_src=inet_addr(\"%s\")"
+			    ", idiag_dst=inet_addr(\"%s\")",
+			    ntohs(req.id.idiag_sport),
+			    ntohs(req.id.idiag_dport),
+			    address, address);
+		     printf(", idiag_if=" IFINDEX_LO_STR);
+		     PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		     printf("}}"));
 
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, sdiag_protocol=IPPROTO_TCP"
-	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
-	       ", idiag_states=1<<TCP_CLOSE, id={idiag_sport=htons(%u)"
-	       ", idiag_dport=htons(%u), inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst), idiag_if=%u"
-	       ", idiag_cookie=[%u, %u]}}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       ntohs(0xfacd), ntohs(0xdead), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	req.sdiag_family = AF_INET6;
+	if (!inet_pton(AF_INET6, address6, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET6, address6, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	req->sdiag_family = AF_INET6;
-	if (!inet_pton(AF_INET6, address6, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET6, address6, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET6, sdiag_protocol=IPPROTO_TCP"
-	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
-	       ", idiag_states=1<<TCP_CLOSE, id={idiag_sport=htons(%u)"
-	       ", idiag_dport=htons(%u), inet_pton(AF_INET6, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET6, \"%s\", &idiag_dst), idiag_if=%u"
-	       ", idiag_cookie=[%u, %u]}}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       ntohs(0xfacd), ntohs(0xdead), address6, address6,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST,
+		     sizeof(req), &req, sizeof(req),
+		     printf("{sdiag_family=AF_INET6"),
+		     printf(", sdiag_protocol=IPPROTO_TCP"
+			    ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+			    ", idiag_states=1<<TCP_CLOSE"
+			    ", id={idiag_sport=htons(%u)"
+			    ", idiag_dport=htons(%u)"
+			    ", inet_pton(AF_INET6, \"%s\", &idiag_src)"
+			    ", inet_pton(AF_INET6, \"%s\", &idiag_dst)",
+			    ntohs(req.id.idiag_sport),
+			    ntohs(req.id.idiag_dport),
+			    address6, address6);
+		     printf(", idiag_if=" IFINDEX_LO_STR);
+		     PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		     printf("}}"));
 }
 
 static void
 test_inet_diag_req(const int fd)
 {
 	const char address[] = "12.34.56.78";
-	struct nlmsghdr *nlh;
-	struct inet_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = TCPDIAG_GETSOCK,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_INET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = TCPDIAG_GETSOCK,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* inet_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = TCPDIAG_GETSOCK,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct inet_diag_req) {
+	struct inet_diag_req req = {
 		.idiag_family = AF_INET,
-		.idiag_ext = 1 << (INET_DIAG_TOS - 1),
 		.idiag_src_len = 0xde,
 		.idiag_dst_len = 0xba,
+		.idiag_ext = 1 << (INET_DIAG_TOS - 1),
 		.id = {
 			.idiag_sport = 0xdead,
 			.idiag_dport = 0xadcd,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 		.idiag_states = 1 << TCP_LAST_ACK,
 		.idiag_dbs = 0xfacefeed,
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, idiag_src_len=%u"
-	       ", idiag_dst_len=%u, idiag_ext=1<<(INET_DIAG_TOS-1)"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}"
-	       ", idiag_states=1<<TCP_LAST_ACK, idiag_dbs=%u}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xde, 0xba, ntohs(0xdead), ntohs(0xadcd), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded, 0xfacefeed,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of inet_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_INET,
+		       TCPDIAG_GETSOCK, NLM_F_REQUEST, req,
+		       printf("{idiag_family=AF_INET"),
+		       PRINT_FIELD_U(", ", req, idiag_src_len);
+		       PRINT_FIELD_U(", ", req, idiag_dst_len);
+		       printf(", idiag_ext=1<<(INET_DIAG_TOS-1)");
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(req.id.idiag_sport),
+			      ntohs(req.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		       printf("}, idiag_states=1<<TCP_LAST_ACK");
+		       PRINT_FIELD_U(", ", req, idiag_dbs);
+		       printf("}"));
 }
 
 static void
 test_inet_diag_req_v2(const int fd)
 {
 	const char address[] = "87.65.43.21";
-	struct nlmsghdr *nlh;
-	struct inet_diag_req_v2 *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_INET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* inet_diag_req_v2 */
-	nlh = nlh0 - sizeof(*req);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct inet_diag_req_v2) {
+	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
 		.sdiag_protocol = IPPROTO_TCP,
@@ -1167,116 +488,39 @@
 		.id = {
 			.idiag_sport = 0xfacd,
 			.idiag_dport = 0xdead,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, sdiag_protocol=IPPROTO_TCP"
-	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
-	       ", idiag_states=1<<TCP_CLOSE, id={idiag_sport=htons(%u)"
-	       ", idiag_dport=htons(%u), inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst), idiag_if=%u"
-	       ", idiag_cookie=[%u, %u]}}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       ntohs(0xfacd), ntohs(0xdead), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of inet_diag_req_v2 */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_INET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_INET"),
+		       printf(", sdiag_protocol=IPPROTO_TCP"
+			      ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+			      ", idiag_states=1<<TCP_CLOSE"
+			      ", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(req.id.idiag_sport),
+			      ntohs(req.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		       printf("}}"));
 }
 
 static void
 test_inet_diag_msg(const int fd)
 {
 	const char address[] = "11.22.33.44";
-	struct nlmsghdr *nlh;
-	struct inet_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_INET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* inet_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct inet_diag_msg) {
+	struct inet_diag_msg msg = {
 		.idiag_family = AF_INET,
 		.idiag_state = TCP_LISTEN,
 		.idiag_timer = 0xfa,
@@ -1284,7 +528,7 @@
 		.id = {
 			.idiag_sport = 0xfacf,
 			.idiag_dport = 0xdead,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 		.idiag_expires = 0xfacefeed,
@@ -1294,47 +538,31 @@
 		.idiag_inode = 0xbadc0ded,
 	};
 
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, idiag_state=TCP_LISTEN"
-	       ", idiag_timer=%u, idiag_retrans=%u"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}"
-	       ", idiag_expires=%u, idiag_rqueue=%u, idiag_wqueue=%u"
-	       ", idiag_uid=%u, idiag_inode=%u}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xfa, 0xde, ntohs(0xfacf), ntohs(0xdead),
-	       address, address, 0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       0xfacefeed, 0xdeadbeef, 0xadcdfafc, 0xdecefaeb, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of inet_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_INET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{idiag_family=AF_INET"),
+		       printf(", idiag_state=TCP_LISTEN");
+		       PRINT_FIELD_U(", ", msg, idiag_timer);
+		       PRINT_FIELD_U(", ", msg, idiag_retrans);
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(msg.id.idiag_sport),
+			      ntohs(msg.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", msg.id, idiag_cookie);
+		       PRINT_FIELD_U("}, ", msg, idiag_expires);
+		       PRINT_FIELD_U(", ", msg, idiag_rqueue);
+		       PRINT_FIELD_U(", ", msg, idiag_wqueue);
+		       PRINT_FIELD_U(", ", msg, idiag_uid);
+		       PRINT_FIELD_U(", ", msg, idiag_inode);
+		       printf("}"));
 }
 
 #ifdef AF_SMC
@@ -1342,183 +570,44 @@
 test_smc_diag_req(const int fd)
 {
 	const char address[] = "43.21.56.78";
-	struct nlmsghdr *nlh;
-	struct smc_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_SMC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* smc_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct smc_diag_req) {
+	struct smc_diag_req req = {
 		.diag_family = AF_SMC,
 		.diag_ext = 1 << (SMC_DIAG_CONNINFO - 1),
 		.id = {
 			.idiag_sport = 0xdead,
 			.idiag_dport = 0xadcd,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded },
 		},
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {diag_family=AF_SMC"
-	       ", diag_ext=1<<(SMC_DIAG_CONNINFO-1)"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       htons(0xdead), htons(0xadcd), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of smc_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_SMC,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{diag_family=AF_SMC"),
+		       printf(", diag_ext=1<<(SMC_DIAG_CONNINFO-1)");
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(req.id.idiag_sport),
+			      ntohs(req.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		       printf("}}"));
 }
 
 static void
 test_smc_diag_msg(const int fd)
 {
 	const char address[] = "34.87.12.90";
-	struct nlmsghdr *nlh;
-	struct smc_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_SMC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* smc_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct smc_diag_msg) {
+	struct smc_diag_msg msg = {
 		.diag_family = AF_SMC,
 		.diag_state = SMC_ACTIVE,
 		.diag_fallback = 0xde,
@@ -1526,51 +615,35 @@
 		.id = {
 			.idiag_sport = 0xdead,
 			.idiag_dport = 0xadcd,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded },
 		},
 		.diag_uid = 0xadcdfafc,
 		.diag_inode = 0xbadc0ded,
 	};
 
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {diag_family=AF_SMC"
-	       ", diag_state=SMC_ACTIVE, diag_fallback=%u, diag_shutdown=%u"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}"
-	       ", diag_uid=%u, diag_inode=%u}}, %u"
-	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xde, 0xba, htons(0xdead), htons(0xadcd), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded, 0xadcdfafc, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of smc_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_SMC,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{diag_family=AF_SMC"),
+		       printf(", diag_state=SMC_ACTIVE");
+		       PRINT_FIELD_U(", ", msg, diag_fallback);
+		       PRINT_FIELD_U(", ", msg, diag_shutdown);
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(msg.id.idiag_sport),
+			      ntohs(msg.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", msg.id, idiag_cookie);
+		       PRINT_FIELD_U("}, ", msg, diag_uid);
+		       PRINT_FIELD_U(", ", msg, diag_inode);
+		       printf("}"));
 }
 #endif
 
diff --git a/tests-mx32/netlink_unix_diag.c b/tests-mx32/netlink_unix_diag.c
index 119cc9e..e150923 100644
--- a/tests-mx32/netlink_unix_diag.c
+++ b/tests-mx32/netlink_unix_diag.c
@@ -2,6 +2,7 @@
  * This file is part of net-yy-unix strace test.
  *
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/nlattr.c b/tests-mx32/nlattr.c
index 7361ece..41923c0 100644
--- a/tests-mx32/nlattr.c
+++ b/tests-mx32/nlattr.c
@@ -74,7 +74,7 @@
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
 	       ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1"
-	       ", udiag_ino=0, udiag_cookie=[0, 0]}, \"12\"}, %u"
+	       ", udiag_ino=0, udiag_cookie=[0, 0]}, \"\\x31\\x32\"}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, msg_len, sprintrc(rc));
 
@@ -133,7 +133,8 @@
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
 	       ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1"
 	       ", udiag_ino=0, udiag_cookie=[0, 0]}, {{nla_len=%u"
-	       ", nla_type=%#x /* UNIX_DIAG_??? */}, \"1234\"}}"
+	       ", nla_type=%#x /* UNIX_DIAG_??? */}"
+	       ", \"\\x31\\x32\\x33\\x34\"}}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, nla->nla_len, UNIX_DIAG_SHUTDOWN + 1,
 	       msg_len, sprintrc(rc));
@@ -143,29 +144,29 @@
 	msg = tail_memdup(&c_msg, msg_len);
 	memcpy(&msg->nlh.nlmsg_len, &msg_len, sizeof(msg_len));
 	nla = NLMSG_ATTR(msg, sizeof(msg->udm));
-	*nla = (struct nlattr) {
+	SET_STRUCT(struct nlattr, nla,
 		.nla_len = NLA_HDRLEN,
 		.nla_type = UNIX_DIAG_NAME
-	};
+	);
 	memcpy(nla + 1, "12", 2);
 	rc = sendto(fd, msg, msg_len, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
 	       ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1"
 	       ", udiag_ino=0, udiag_cookie=[0, 0]}, [{nla_len=%u"
-	       ", nla_type=UNIX_DIAG_NAME}, \"12\"]}, %u"
+	       ", nla_type=UNIX_DIAG_NAME}, \"\\x31\\x32\"]}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, msg_len, nla->nla_len, msg_len, sprintrc(rc));
+	       fd, msg_len, NLA_HDRLEN, msg_len, sprintrc(rc));
 
 	/* print one struct nlattr and short read of second struct nlattr */
 	msg_len = NLMSG_SPACE(sizeof(msg->udm)) + NLA_HDRLEN * 2;
 	msg = tail_memdup(&c_msg, msg_len - 1);
 	memcpy(&msg->nlh.nlmsg_len, &msg_len, sizeof(msg_len));
 	nla = NLMSG_ATTR(msg, sizeof(msg->udm));
-	*nla = (struct nlattr) {
+	SET_STRUCT(struct nlattr, nla,
 		.nla_len = NLA_HDRLEN,
 		.nla_type = UNIX_DIAG_NAME
-	};
+	);
 	rc = sendto(fd, msg, msg_len, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
@@ -173,7 +174,7 @@
 	       ", udiag_ino=0, udiag_cookie=[0, 0]}, [{nla_len=%u"
 	       ", nla_type=UNIX_DIAG_NAME}, %p]}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, msg_len, nla->nla_len, nla + 1, msg_len, sprintrc(rc));
+	       fd, msg_len, NLA_HDRLEN, nla + 1, msg_len, sprintrc(rc));
 
 	/* print two struct nlattr */
 	msg_len = NLMSG_SPACE(sizeof(msg->udm)) + NLA_HDRLEN * 2;
@@ -209,18 +210,22 @@
 	       ", nla_type=UNIX_DIAG_NAME}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, nla->nla_len, msg_len, sprintrc(rc));
 
-	/* abbreviated output */
+	/* unrecognized attribute data, abbreviated output */
 #define ABBREV_LEN (DEFAULT_STRLEN + 1)
-	msg_len = NLA_HDRLEN * ABBREV_LEN + NLMSG_SPACE(sizeof(msg->udm));
-	msg = tail_memdup(&c_msg, msg_len);
-	memcpy(&msg->nlh.nlmsg_len, &msg_len, sizeof(msg_len));
+	msg_len = NLMSG_SPACE(sizeof(msg->udm)) + NLA_HDRLEN * ABBREV_LEN * 2;
+	msg = tail_alloc(msg_len);
+	memcpy(msg, &c_msg, sizeof(c_msg));
+	msg->nlh.nlmsg_len = msg_len;
 	unsigned int i;
 	nla = NLMSG_ATTR(msg, sizeof(msg->udm));
-	for (i = 0; i < ABBREV_LEN; ++i)
-		nla[i] = (struct nlattr) {
-			.nla_len = NLA_HDRLEN,
+	for (i = 0; i < ABBREV_LEN; ++i) {
+		nla[i * 2] = (struct nlattr) {
+			.nla_len = NLA_HDRLEN * 2 - 1,
 			.nla_type = UNIX_DIAG_SHUTDOWN + 1 + i
 		};
+		fill_memory_ex(&nla[i * 2 + 1], NLA_HDRLEN,
+			       '0' + i, '~' - '0' - i);
+	}
 
 	rc = sendto(fd, msg, msg_len, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
@@ -232,8 +237,10 @@
 	for (i = 0; i < DEFAULT_STRLEN; ++i) {
 		if (i)
 			printf(", ");
-		printf("{nla_len=%u, nla_type=%#x /* UNIX_DIAG_??? */}",
+		printf("{{nla_len=%u, nla_type=%#x /* UNIX_DIAG_??? */}, ",
 		       nla->nla_len, UNIX_DIAG_SHUTDOWN + 1 + i);
+		print_quoted_hex(&nla[i * 2 + 1], NLA_HDRLEN - 1);
+		printf("}");
 	}
 	printf(", ...]}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       msg_len, sprintrc(rc));
diff --git a/tests-mx32/nlattr_br_port_msg.c b/tests-mx32/nlattr_br_port_msg.c
new file mode 100644
index 0000000..a2a4792
--- /dev/null
+++ b/tests-mx32/nlattr_br_port_msg.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+
+# include <stdio.h>
+# include <netinet/in.h>
+# include "test_nlattr.h"
+# include <linux/if_bridge.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_br_port_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETMDB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct br_port_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct br_port_msg, msg,
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	);
+}
+
+static void
+print_br_port_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETMDB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", ifindex=" IFINDEX_LO_STR "}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct br_port_msg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* MDBA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_br_port_msg, print_br_port_msg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_BR_PORT_MSG")
+
+#endif
diff --git a/tests-mx32/nlattr_br_port_msg.gen.test b/tests-mx32/nlattr_br_port_msg.gen.test
new file mode 100755
index 0000000..f843797
--- /dev/null
+++ b/tests-mx32/nlattr_br_port_msg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_br_port_msg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_crypto_user_alg.c b/tests-mx32/nlattr_crypto_user_alg.c
new file mode 100644
index 0000000..2482b33
--- /dev/null
+++ b/tests-mx32/nlattr_crypto_user_alg.c
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_CRYPTOUSER_H
+
+# include <stdio.h>
+# include <stdint.h>
+# include "test_nlattr.h"
+# include <linux/cryptouser.h>
+
+# define CRYPTOCFGA_REPORT_LARVAL 2
+
+static void
+init_crypto_user_alg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = CRYPTO_MSG_GETALG,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct crypto_user_alg *const alg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct crypto_user_alg, alg,
+		.cru_name = "abcd",
+		.cru_driver_name = "efgh",
+		.cru_module_name = "ijkl",
+	);
+}
+
+static void
+print_crypto_user_alg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=CRYPTO_MSG_GETALG"
+	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
+	       ", {cru_name=\"abcd\", cru_driver_name=\"efgh\""
+	       ", cru_module_name=\"ijkl\", cru_type=0"
+	       ", cru_mask=0, cru_refcnt=0, cru_flags=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_CRYPTO);
+	const unsigned int hdrlen = sizeof(struct crypto_user_alg);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	char *const str = tail_alloc(DEFAULT_STRLEN);
+	fill_memory_ex(str, DEFAULT_STRLEN, '0', 10);
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_crypto_user_alg, print_crypto_user_alg,
+		    CRYPTOCFGA_REPORT_LARVAL,
+		    DEFAULT_STRLEN, str, DEFAULT_STRLEN,
+		    printf("{type=\"%.*s\"...}", DEFAULT_STRLEN, str));
+	str[DEFAULT_STRLEN - 1] = '\0';
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_crypto_user_alg, print_crypto_user_alg,
+		    CRYPTOCFGA_REPORT_LARVAL,
+		    DEFAULT_STRLEN, str, DEFAULT_STRLEN,
+		    printf("{type=\"%s\"}", str));
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_HASH
+	static const struct crypto_report_hash rhash = {
+		.type = "efgh",
+		.blocksize = 0xabcdefdc,
+		.digestsize = 0xfebcdacd
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_HASH,
+			      pattern, rhash, print_quoted_memory,
+			      printf("{type=\"efgh\"");
+			      PRINT_FIELD_U(", ", rhash, blocksize);
+			      PRINT_FIELD_U(", ", rhash, digestsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_BLKCIPHER
+	static const struct crypto_report_blkcipher rblkcipher = {
+		.type = "abcd",
+		.geniv = "efgh",
+		.blocksize = 0xabcdefac,
+		.min_keysize = 0xfeadbcda,
+		.max_keysize = 0xbdacdeac,
+		.ivsize = 0xefacbdac
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_BLKCIPHER,
+			      pattern, rblkcipher, print_quoted_memory,
+			      printf("{type=\"abcd\", geniv=\"efgh\"");
+			      PRINT_FIELD_U(", ", rblkcipher, blocksize);
+			      PRINT_FIELD_U(", ", rblkcipher, min_keysize);
+			      PRINT_FIELD_U(", ", rblkcipher, max_keysize);
+			      PRINT_FIELD_U(", ", rblkcipher, ivsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_AEAD
+	static const struct crypto_report_aead raead = {
+		.type = "abcd",
+		.geniv = "efgh",
+		.blocksize = 0xbaefdbac,
+		.maxauthsize = 0xfdbdbcda,
+		.ivsize = 0xacbefdac
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_AEAD,
+			      pattern, raead, print_quoted_memory,
+			      printf("{type=\"abcd\", geniv=\"efgh\"");
+			      PRINT_FIELD_U(", ", raead, blocksize);
+			      PRINT_FIELD_U(", ", raead, maxauthsize);
+			      PRINT_FIELD_U(", ", raead, ivsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_RNG
+	static const struct crypto_report_rng rrng = {
+		.type = "abcd",
+		.seedsize = 0xabcdefac
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_RNG,
+			      pattern, rrng, print_quoted_memory,
+			      printf("{type=\"abcd\"");
+			      PRINT_FIELD_U(", ", rrng, seedsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_CIPHER
+	static const struct crypto_report_cipher rcipher = {
+		.type = "abcd",
+		.blocksize = 0xabcdefac,
+		.min_keysize = 0xfeadbcda,
+		.max_keysize = 0xbdacdeac,
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_CIPHER,
+			      pattern, rcipher, print_quoted_memory,
+			      printf("{type=\"abcd\"");
+			      PRINT_FIELD_U(", ", rcipher, blocksize);
+			      PRINT_FIELD_U(", ", rcipher, min_keysize);
+			      PRINT_FIELD_U(", ", rcipher, max_keysize);
+			      printf("}"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_CRYPTOUSER_H");
+
+#endif
diff --git a/tests-mx32/nlattr_crypto_user_alg.gen.test b/tests-mx32/nlattr_crypto_user_alg.gen.test
new file mode 100755
index 0000000..81d866e
--- /dev/null
+++ b/tests-mx32/nlattr_crypto_user_alg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_crypto_user_alg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_dcbmsg.c b/tests-mx32/nlattr_dcbmsg.c
new file mode 100644
index 0000000..cd63bb6
--- /dev/null
+++ b/tests-mx32/nlattr_dcbmsg.c
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_DCBMSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/dcbnl.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_dcbmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETDCB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct dcbmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct dcbmsg, msg,
+		.dcb_family = AF_UNIX,
+		.cmd = DCB_CMD_UNDEFINED
+	);
+}
+
+static void
+print_dcbmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETDCB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {dcb_family=AF_UNIX"
+	       ", cmd=DCB_CMD_UNDEFINED}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct dcbmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* DCB_ATTR_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_dcbmsg, print_dcbmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_DCBMSG")
+
+#endif
diff --git a/tests-mx32/nlattr_dcbmsg.gen.test b/tests-mx32/nlattr_dcbmsg.gen.test
new file mode 100755
index 0000000..d78bfcf
--- /dev/null
+++ b/tests-mx32/nlattr_dcbmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_dcbmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_fib_rule_hdr.c b/tests-mx32/nlattr_fib_rule_hdr.c
new file mode 100644
index 0000000..394ab10
--- /dev/null
+++ b/tests-mx32/nlattr_fib_rule_hdr.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_FIB_RULES_H
+
+# include <stdio.h>
+# include <inttypes.h>
+# include "test_nlattr.h"
+# include <linux/fib_rules.h>
+# include <linux/ip.h>
+# include <linux/rtnetlink.h>
+
+#define FRA_TUN_ID 12
+#define FRA_TABLE 15
+#define FRA_UID_RANGE 20
+
+static void
+init_rtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETRULE,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct rtmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct rtmsg, msg,
+		.rtm_family = AF_UNIX,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_UNSPEC,
+		.rtm_type = FR_ACT_TO_TBL,
+		.rtm_flags = FIB_RULE_INVERT
+	);
+}
+
+static void
+print_rtmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETRULE, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", dst_len=0, src_len=0"
+	       ", tos=IPTOS_LOWDELAY"
+	       ", table=RT_TABLE_UNSPEC"
+	       ", action=FR_ACT_TO_TBL"
+	       ", flags=FIB_RULE_INVERT}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct rtmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* FRA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_rtmsg, print_rtmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    FRA_DST, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	const uint32_t table_id = RT_TABLE_DEFAULT;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_TABLE, pattern, table_id,
+			   printf("RT_TABLE_DEFAULT"));
+
+#ifdef HAVE_STRUCT_FIB_RULE_UID_RANGE
+	static const struct fib_rule_uid_range range = {
+		.start = 0xabcdedad,
+		.end = 0xbcdeadba
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_UID_RANGE, pattern, range,
+			   PRINT_FIELD_U("{", range, start);
+			   PRINT_FIELD_U(", ", range, end);
+			   printf("}"));
+#endif
+#if defined HAVE_BE64TOH || defined be64toh
+	const uint64_t tun_id = 0xabcdcdbeedabadef;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_TUN_ID, pattern, tun_id,
+			   printf("htobe64(%" PRIu64 ")", be64toh(tun_id)));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_FIB_RULES_H")
+
+#endif
diff --git a/tests-mx32/nlattr_fib_rule_hdr.gen.test b/tests-mx32/nlattr_fib_rule_hdr.gen.test
new file mode 100755
index 0000000..cbdad4d
--- /dev/null
+++ b/tests-mx32/nlattr_fib_rule_hdr.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_fib_rule_hdr +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifaddrlblmsg.c b/tests-mx32/nlattr_ifaddrlblmsg.c
new file mode 100644
index 0000000..6003634
--- /dev/null
+++ b/tests-mx32/nlattr_ifaddrlblmsg.c
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/if_addrlabel.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_ifaddrlblmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETADDRLABEL,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifaddrlblmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifaddrlblmsg, msg,
+		.ifal_family = AF_UNIX,
+		.ifal_index = ifindex_lo()
+	);
+}
+
+static void
+print_ifaddrlblmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETADDRLABEL, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifal_family=AF_UNIX"
+	       ", ifal_prefixlen=0, ifal_flags=0"
+	       ", ifal_index=" IFINDEX_LO_STR
+	       ", ifal_seq=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifaddrlblmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* IFAL_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ifaddrlblmsg, print_ifaddrlblmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifaddrlblmsg, print_ifaddrlblmsg,
+		    IFAL_ADDRESS, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_IFADDRLBLMSG")
+
+#endif
diff --git a/tests-mx32/nlattr_ifaddrlblmsg.gen.test b/tests-mx32/nlattr_ifaddrlblmsg.gen.test
new file mode 100755
index 0000000..0c41dbe
--- /dev/null
+++ b/tests-mx32/nlattr_ifaddrlblmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrlblmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifaddrmsg.c b/tests-mx32/nlattr_ifaddrmsg.c
new file mode 100644
index 0000000..93fbef1
--- /dev/null
+++ b/tests-mx32/nlattr_ifaddrmsg.c
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <arpa/inet.h>
+#include "test_nlattr.h"
+#ifdef HAVE_LINUX_IF_ADDR_H
+# include <linux/if_addr.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define IFA_FLAGS 8
+
+#define SET_IFA_FAMILY(af)		\
+	do {				\
+		ifa_family = af;	\
+		ifa_family_str = #af;	\
+	}				\
+	while (0)
+
+uint8_t ifa_family;
+const char *ifa_family_str;
+
+static void
+init_ifaddrmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETADDR,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifaddrmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifaddrmsg, msg,
+		.ifa_family = ifa_family,
+		.ifa_flags = IFA_F_SECONDARY,
+		.ifa_scope = RT_SCOPE_UNIVERSE,
+		.ifa_index = ifindex_lo()
+	);
+}
+
+static void
+print_ifaddrmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETADDR, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifa_family=%s"
+	       ", ifa_prefixlen=0"
+	       ", ifa_flags=IFA_F_SECONDARY"
+	       ", ifa_scope=RT_SCOPE_UNIVERSE"
+	       ", ifa_index=" IFINDEX_LO_STR "}",
+	       msg_len, ifa_family_str);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifaddrmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	SET_IFA_FAMILY(AF_UNSPEC);
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* IFA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ifaddrmsg, print_ifaddrmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifaddrmsg, print_ifaddrmsg,
+		    IFA_ADDRESS, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	SET_IFA_FAMILY(AF_INET);
+	static const char address4[] = "12.34.56.78";
+	struct in_addr a4;
+
+	if (!inet_pton(AF_INET, address4, &a4))
+		perror_msg_and_skip("inet_pton");
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_ADDRESS, pattern, a4,
+			   printf("%s", address4));
+
+	SET_IFA_FAMILY(AF_INET6);
+	static const char address6[] = "12:34:56:78:90:ab:cd:ef";
+	struct in6_addr a6;
+
+	if (!inet_pton(AF_INET6, address6, &a6))
+		perror_msg_and_skip("inet_pton");
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_ADDRESS, pattern, a6,
+			   printf("%s", address6));
+
+	static const struct ifa_cacheinfo ci = {
+		.ifa_prefered = 0xabcdefac,
+		.ifa_valid = 0xbcdadbca,
+		.cstamp = 0xcdabedba,
+		.tstamp = 0xdebabdac
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_CACHEINFO, pattern, ci,
+			   PRINT_FIELD_U("{", ci, ifa_prefered);
+			   PRINT_FIELD_U(", ", ci, ifa_valid);
+			   PRINT_FIELD_U(", ", ci, cstamp);
+			   PRINT_FIELD_U(", ", ci, tstamp);
+			   printf("}"));
+
+	const uint32_t ifa_flags = IFA_F_SECONDARY | IFA_F_PERMANENT;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_FLAGS, pattern, ifa_flags,
+			   printf("IFA_F_SECONDARY|IFA_F_PERMANENT"));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_ifaddrmsg.gen.test b/tests-mx32/nlattr_ifaddrmsg.gen.test
new file mode 100755
index 0000000..d659e00
--- /dev/null
+++ b/tests-mx32/nlattr_ifaddrmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifinfomsg.c b/tests-mx32/nlattr_ifinfomsg.c
new file mode 100644
index 0000000..1fff52c
--- /dev/null
+++ b/tests-mx32/nlattr_ifinfomsg.c
@@ -0,0 +1,348 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <stddef.h>
+#include "test_nlattr.h"
+
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#ifndef IFLA_LINKINFO
+# define IFLA_LINKINFO 18
+#endif
+#ifndef IFLA_VF_PORTS
+# define IFLA_VF_PORTS 24
+#endif
+#define IFLA_LINK_NETNSID 37
+
+#ifndef IFLA_INFO_KIND
+# define IFLA_INFO_KIND 1
+#endif
+
+#ifndef IFLA_VF_PORT
+# define IFLA_VF_PORT 1
+#endif
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* IFLA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ifinfomsg, print_ifinfomsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	const int32_t netnsid = 0xacbdabda;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_LINK_NETNSID, pattern, netnsid,
+			   printf("%d", netnsid));
+
+	static const struct rtnl_link_stats st = {
+		.rx_packets = 0xabcdefac,
+		.tx_packets = 0xbcdacdab,
+		.rx_bytes = 0xcdbafaab,
+		.tx_bytes = 0xdafabadb,
+		.rx_errors = 0xeabcdaeb,
+		.tx_errors = 0xfefabeab,
+		.rx_dropped = 0xadbafafb,
+		.tx_dropped = 0xbdffabda,
+		.multicast = 0xcdabdfea,
+		.collisions = 0xefadbaeb,
+		.rx_length_errors = 0xfabffabd,
+		.rx_over_errors = 0xafbafabc,
+		.rx_crc_errors = 0xbfdabdad,
+		.rx_frame_errors = 0xcfdabfad,
+		.rx_fifo_errors = 0xddfdebad,
+		.rx_missed_errors = 0xefabdcba,
+		.tx_aborted_errors = 0xefdadbfa,
+		.tx_carrier_errors = 0xfaefbada,
+		.tx_fifo_errors = 0xaebdffab,
+		.tx_heartbeat_errors = 0xbadebaaf,
+		.tx_window_errors = 0xcdafbada,
+		.rx_compressed = 0xdeffadbd,
+		.tx_compressed = 0xefdadfab
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_STATS, pattern, st,
+			   PRINT_FIELD_U("{", st, rx_packets);
+			   PRINT_FIELD_U(", ", st, tx_packets);
+			   PRINT_FIELD_U(", ", st, rx_bytes);
+			   PRINT_FIELD_U(", ", st, tx_bytes);
+			   PRINT_FIELD_U(", ", st, rx_errors);
+			   PRINT_FIELD_U(", ", st, tx_errors);
+			   PRINT_FIELD_U(", ", st, rx_dropped);
+			   PRINT_FIELD_U(", ", st, tx_dropped);
+			   PRINT_FIELD_U(", ", st, multicast);
+			   PRINT_FIELD_U(", ", st, collisions);
+			   PRINT_FIELD_U(", ", st, rx_length_errors);
+			   PRINT_FIELD_U(", ", st, rx_over_errors);
+			   PRINT_FIELD_U(", ", st, rx_crc_errors);
+			   PRINT_FIELD_U(", ", st, rx_frame_errors);
+			   PRINT_FIELD_U(", ", st, rx_fifo_errors);
+			   PRINT_FIELD_U(", ", st, rx_missed_errors);
+			   PRINT_FIELD_U(", ", st, tx_aborted_errors);
+			   PRINT_FIELD_U(", ", st, tx_carrier_errors);
+			   PRINT_FIELD_U(", ", st, tx_fifo_errors);
+			   PRINT_FIELD_U(", ", st, tx_heartbeat_errors);
+			   PRINT_FIELD_U(", ", st, tx_window_errors);
+			   PRINT_FIELD_U(", ", st, rx_compressed);
+			   PRINT_FIELD_U(", ", st, tx_compressed);
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER
+			   PRINT_FIELD_U(", ", st, rx_nohandler);
+#endif
+			   printf("}"));
+
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER
+	const unsigned int sizeof_stats =
+		offsetofend(struct rtnl_link_stats, tx_compressed);
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_STATS, sizeof_stats, &st, sizeof_stats,
+		    PRINT_FIELD_U("{", st, rx_packets);
+		    PRINT_FIELD_U(", ", st, tx_packets);
+		    PRINT_FIELD_U(", ", st, rx_bytes);
+		    PRINT_FIELD_U(", ", st, tx_bytes);
+		    PRINT_FIELD_U(", ", st, rx_errors);
+		    PRINT_FIELD_U(", ", st, tx_errors);
+		    PRINT_FIELD_U(", ", st, rx_dropped);
+		    PRINT_FIELD_U(", ", st, tx_dropped);
+		    PRINT_FIELD_U(", ", st, multicast);
+		    PRINT_FIELD_U(", ", st, collisions);
+		    PRINT_FIELD_U(", ", st, rx_length_errors);
+		    PRINT_FIELD_U(", ", st, rx_over_errors);
+		    PRINT_FIELD_U(", ", st, rx_crc_errors);
+		    PRINT_FIELD_U(", ", st, rx_frame_errors);
+		    PRINT_FIELD_U(", ", st, rx_fifo_errors);
+		    PRINT_FIELD_U(", ", st, rx_missed_errors);
+		    PRINT_FIELD_U(", ", st, tx_aborted_errors);
+		    PRINT_FIELD_U(", ", st, tx_carrier_errors);
+		    PRINT_FIELD_U(", ", st, tx_fifo_errors);
+		    PRINT_FIELD_U(", ", st, tx_heartbeat_errors);
+		    PRINT_FIELD_U(", ", st, tx_window_errors);
+		    PRINT_FIELD_U(", ", st, rx_compressed);
+		    PRINT_FIELD_U(", ", st, tx_compressed);
+		    printf("}"));
+#endif /* HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER */
+
+	static const struct rtnl_link_ifmap map = {
+		.mem_start = 0xadcbefedefbcdedb,
+		.mem_end = 0xefcbeabdecdcdefa,
+		.base_addr = 0xaddbeabdfaacdbae,
+		.irq = 0xefaf,
+		.dma = 0xab,
+		.port = 0xcd
+	};
+	const unsigned int sizeof_ifmap =
+		offsetofend(struct rtnl_link_ifmap, port);
+	const unsigned int plen = sizeof_ifmap - 1 > DEFAULT_STRLEN
+				  ? DEFAULT_STRLEN
+				  : (int) sizeof_ifmap - 1;
+	/* len < sizeof_ifmap */
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_MAP, plen, pattern, plen,
+		    print_quoted_hex(pattern, plen));
+
+	/* short read of sizeof_ifmap */
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_MAP, sizeof_ifmap, &map, sizeof_ifmap - 1,
+		    printf("%p", RTA_DATA(TEST_NLATTR_nla)));
+
+	/* sizeof_ifmap */
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_MAP, sizeof_ifmap, &map, sizeof_ifmap,
+		    PRINT_FIELD_X("{", map, mem_start);
+		    PRINT_FIELD_X(", ", map, mem_end);
+		    PRINT_FIELD_X(", ", map, base_addr);
+		    PRINT_FIELD_U(", ", map, irq);
+		    PRINT_FIELD_U(", ", map, dma);
+		    PRINT_FIELD_U(", ", map, port);
+		    printf("}"));
+
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64
+	static const struct rtnl_link_stats64 st64 = {
+		.rx_packets = 0xadcbefedefbcdedb,
+		.tx_packets = 0xbdabdedabdcdeabd,
+		.rx_bytes = 0xcdbaefbaeadfabec,
+		.tx_bytes = 0xdbaedbafabbeacdb,
+		.rx_errors = 0xefabfdaefabaefab,
+		.tx_errors = 0xfaebfabfabbaeabf,
+		.rx_dropped = 0xacdbaedbadbabeba,
+		.tx_dropped = 0xbcdeffebdabeadbe,
+		.multicast = 0xeeffbaeabaeffabe,
+		.collisions = 0xffbaefcefbafacef,
+		.rx_length_errors = 0xaabbdeabceffdecb,
+		.rx_over_errors = 0xbbdcdadebadeaeed,
+		.rx_crc_errors= 0xccdeabecefaedbef,
+		.rx_frame_errors = 0xddbedaedebcedaef,
+		.rx_fifo_errors = 0xeffbadefafdaeaab,
+		.rx_missed_errors = 0xfefaebccceadeecd,
+		.tx_aborted_errors = 0xabcdadefcdadef,
+		.tx_carrier_errors = 0xbccdafaeeaaefe,
+		.tx_fifo_errors = 0xcddefdbedeadce,
+		.tx_heartbeat_errors = 0xedaededdadcdea,
+		.tx_window_errors = 0xfdacdeaccedcda,
+		.rx_compressed = 0xacdbbcacdbccef,
+		.tx_compressed = 0xbcdadefcdedfea
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_STATS64, pattern, st64,
+			   PRINT_FIELD_U("{", st64, rx_packets);
+			   PRINT_FIELD_U(", ", st64, tx_packets);
+			   PRINT_FIELD_U(", ", st64, rx_bytes);
+			   PRINT_FIELD_U(", ", st64, tx_bytes);
+			   PRINT_FIELD_U(", ", st64, rx_errors);
+			   PRINT_FIELD_U(", ", st64, tx_errors);
+			   PRINT_FIELD_U(", ", st64, rx_dropped);
+			   PRINT_FIELD_U(", ", st64, tx_dropped);
+			   PRINT_FIELD_U(", ", st64, multicast);
+			   PRINT_FIELD_U(", ", st64, collisions);
+			   PRINT_FIELD_U(", ", st64, rx_length_errors);
+			   PRINT_FIELD_U(", ", st64, rx_over_errors);
+			   PRINT_FIELD_U(", ", st64, rx_crc_errors);
+			   PRINT_FIELD_U(", ", st64, rx_frame_errors);
+			   PRINT_FIELD_U(", ", st64, rx_fifo_errors);
+			   PRINT_FIELD_U(", ", st64, rx_missed_errors);
+			   PRINT_FIELD_U(", ", st64, tx_aborted_errors);
+			   PRINT_FIELD_U(", ", st64, tx_carrier_errors);
+			   PRINT_FIELD_U(", ", st64, tx_fifo_errors);
+			   PRINT_FIELD_U(", ", st64, tx_heartbeat_errors);
+			   PRINT_FIELD_U(", ", st64, tx_window_errors);
+			   PRINT_FIELD_U(", ", st64, rx_compressed);
+			   PRINT_FIELD_U(", ", st64, tx_compressed);
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER
+			   PRINT_FIELD_U(", ", st64, rx_nohandler);
+#endif
+			   printf("}"));
+
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER
+	const unsigned int sizeof_stats64 =
+		offsetofend(struct rtnl_link_stats64, tx_compressed);
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_STATS64, sizeof_stats64, &st64, sizeof_stats64,
+		    PRINT_FIELD_U("{", st64, rx_packets);
+		    PRINT_FIELD_U(", ", st64, tx_packets);
+		    PRINT_FIELD_U(", ", st64, rx_bytes);
+		    PRINT_FIELD_U(", ", st64, tx_bytes);
+		    PRINT_FIELD_U(", ", st64, rx_errors);
+		    PRINT_FIELD_U(", ", st64, tx_errors);
+		    PRINT_FIELD_U(", ", st64, rx_dropped);
+		    PRINT_FIELD_U(", ", st64, tx_dropped);
+		    PRINT_FIELD_U(", ", st64, multicast);
+		    PRINT_FIELD_U(", ", st64, collisions);
+		    PRINT_FIELD_U(", ", st64, rx_length_errors);
+		    PRINT_FIELD_U(", ", st64, rx_over_errors);
+		    PRINT_FIELD_U(", ", st64, rx_crc_errors);
+		    PRINT_FIELD_U(", ", st64, rx_frame_errors);
+		    PRINT_FIELD_U(", ", st64, rx_fifo_errors);
+		    PRINT_FIELD_U(", ", st64, rx_missed_errors);
+		    PRINT_FIELD_U(", ", st64, tx_aborted_errors);
+		    PRINT_FIELD_U(", ", st64, tx_carrier_errors);
+		    PRINT_FIELD_U(", ", st64, tx_fifo_errors);
+		    PRINT_FIELD_U(", ", st64, tx_heartbeat_errors);
+		    PRINT_FIELD_U(", ", st64, tx_window_errors);
+		    PRINT_FIELD_U(", ", st64, rx_compressed);
+		    PRINT_FIELD_U(", ", st64, tx_compressed);
+		    printf("}"));
+#endif /* HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER */
+#endif /* HAVE_STRUCT_RTNL_LINK_STATS64 */
+
+	struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = IFLA_INFO_KIND,
+	};
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_LINKINFO, sizeof(nla), &nla, sizeof(nla),
+		    printf("{nla_len=%u, nla_type=IFLA_INFO_KIND}",
+			   nla.nla_len));
+
+	nla.nla_type = IFLA_VF_PORT;
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_VF_PORTS, sizeof(nla), &nla, sizeof(nla),
+		    printf("{nla_len=%u, nla_type=IFLA_VF_PORT}",
+			   nla.nla_len));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_ifinfomsg.gen.test b/tests-mx32/nlattr_ifinfomsg.gen.test
new file mode 100755
index 0000000..618df14
--- /dev/null
+++ b/tests-mx32/nlattr_ifinfomsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifinfomsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifla_brport.c b/tests-mx32/nlattr_ifla_brport.c
new file mode 100644
index 0000000..ae7c9da
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_brport.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <inttypes.h>
+#include "test_nlattr.h"
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define IFLA_BRPORT_PRIORITY 2
+#define IFLA_BRPORT_MESSAGE_AGE_TIMER 21
+
+const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = IFLA_PROTINFO
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}"
+	       ", {{nla_len=%u, nla_type=IFLA_PROTINFO}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const uint16_t u16 = 0xabcd;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_BRPORT_PRIORITY, pattern, u16,
+				  printf("%u", u16));
+
+	const uint64_t u64 = 0xabcdedeeefeafeab;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_BRPORT_MESSAGE_AGE_TIMER, pattern, u64,
+				  printf("%" PRIu64, u64));
+
+#ifdef HAVE_STRUCT_IFLA_BRIDGE_ID
+	static const struct ifla_bridge_id id = {
+		.prio = { 0xab, 0xcd },
+		.addr = { 0xab, 0xcd, 0xef, 0xac, 0xbc, 0xcd }
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_BRPORT_ROOT_ID, pattern, id,
+				  printf("{prio=[%u, %u]"
+					 ", addr=%02x:%02x:%02x:%02x:%02x:%02x}",
+					 id.prio[0], id.prio[1],
+					 id.addr[0], id.addr[1], id.addr[2],
+					 id.addr[3], id.addr[4], id.addr[5]));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_ifla_brport.gen.test b/tests-mx32/nlattr_ifla_brport.gen.test
new file mode 100755
index 0000000..48bfed4
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_brport.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_brport +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifla_port.c b/tests-mx32/nlattr_ifla_port.c
new file mode 100644
index 0000000..61e90fe
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_port.c
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#ifndef IFLA_PORT_SELF
+# define IFLA_PORT_SELF 25
+#endif
+#ifndef IFLA_PORT_VF
+# define IFLA_PORT_VF 1
+#endif
+
+const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = IFLA_PORT_SELF
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}"
+	       ", {{nla_len=%u, nla_type=IFLA_PORT_SELF}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const uint32_t num = 0xabacdbcd;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_PORT_VF, pattern, num,
+				  printf("%u", num));
+
+#ifdef HAVE_STRUCT_IFLA_PORT_VSI
+	static const struct ifla_port_vsi vsi = {
+		.vsi_mgr_id = 0xab,
+		.vsi_type_id = "abc",
+		.vsi_type_version = 0xef
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_PORT_VSI_TYPE, pattern, vsi,
+				  PRINT_FIELD_U("{", vsi, vsi_mgr_id);
+				  printf(", vsi_type_id=\"\\x61\\x62\\x63\"");
+				  PRINT_FIELD_U(", ", vsi, vsi_type_version);
+				  printf("}"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_ifla_port.gen.test b/tests-mx32/nlattr_ifla_port.gen.test
new file mode 100755
index 0000000..605bf04
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_port.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_port +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifla_xdp.c b/tests-mx32/nlattr_ifla_xdp.c
new file mode 100644
index 0000000..cca5219
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_xdp.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#ifndef IFLA_XDP
+# define IFLA_XDP 43
+#endif
+#ifndef IFLA_XDP_FD
+# define IFLA_XDP_FD 1
+#endif
+
+const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = IFLA_XDP
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}"
+	       ", {{nla_len=%u, nla_type=IFLA_XDP}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const int32_t num = 0xabacdbcd;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_XDP_FD, pattern, num,
+				  printf("%d", num));
+
+#ifdef XDP_FLAGS_UPDATE_IF_NOEXIST
+	const uint32_t flags = XDP_FLAGS_UPDATE_IF_NOEXIST;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_XDP_FLAGS, pattern, flags,
+				  printf("XDP_FLAGS_UPDATE_IF_NOEXIST"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_ifla_xdp.gen.test b/tests-mx32/nlattr_ifla_xdp.gen.test
new file mode 100755
index 0000000..a30e843
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_xdp.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_xdp +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_inet_diag_msg.c b/tests-mx32/nlattr_inet_diag_msg.c
index d9d564c..5666d74 100644
--- a/tests-mx32/nlattr_inet_diag_msg.c
+++ b/tests-mx32/nlattr_inet_diag_msg.c
@@ -39,12 +39,6 @@
 
 static const char address[] = "10.11.12.13";
 
-#ifdef HAVE_IF_INDEXTONAME
-# define IFINDEX_LO	(if_nametoindex("lo"))
-#else
-# define IFINDEX_LO	1
-#endif
-
 static void
 init_inet_diag_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
 {
@@ -58,7 +52,7 @@
 	SET_STRUCT(struct inet_diag_msg, msg,
 		.idiag_family = AF_INET,
 		.idiag_state = TCP_LISTEN,
-		.id.idiag_if = IFINDEX_LO
+		.id.idiag_if = ifindex_lo()
 	);
 
 	if (!inet_pton(AF_INET, address, msg->id.idiag_src) ||
@@ -73,9 +67,10 @@
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {idiag_family=AF_INET"
 	       ", idiag_state=TCP_LISTEN, idiag_timer=0, idiag_retrans=0"
 	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=if_nametoindex(\"lo\"), idiag_cookie=[0, 0]}"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=" IFINDEX_LO_STR
+	       ", idiag_cookie=[0, 0]}"
 	       ", idiag_expires=0, idiag_rqueue=0, idiag_wqueue=0"
 	       ", idiag_uid=0, idiag_inode=0}",
 	       msg_len, address, address);
@@ -169,6 +164,18 @@
 			  init_inet_diag_msg, print_inet_diag_msg,
 			  INET_DIAG_SKMEMINFO, pattern, mem, print_uint);
 
+	static uint32_t bigmem[SK_MEMINFO_VARS + 1];
+	memcpy(bigmem, pattern, sizeof(bigmem));
+
+	TEST_NLATTR(fd, nlh0, hdrlen, init_inet_diag_msg, print_inet_diag_msg,
+		    INET_DIAG_SKMEMINFO, sizeof(bigmem), bigmem, sizeof(bigmem),
+		    size_t i;
+		    for (i = 0; i < SK_MEMINFO_VARS; ++i) {
+			printf(i ? ", " : "[");
+			print_uint(&bigmem[i]);
+		    }
+		    printf(", ...]"));
+
 	static const uint32_t mark = 0xabdfadca;
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
diff --git a/tests-mx32/nlattr_inet_diag_req_compat.c b/tests-mx32/nlattr_inet_diag_req_compat.c
new file mode 100644
index 0000000..b0b2171
--- /dev/null
+++ b/tests-mx32/nlattr_inet_diag_req_compat.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <net/if.h>
+#include <netinet/tcp.h>
+#include "test_nlattr.h"
+#include <linux/inet_diag.h>
+#include <linux/rtnetlink.h>
+#include <linux/sock_diag.h>
+
+static const char address[] = "10.11.12.13";
+
+static void
+init_inet_diag_req(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = TCPDIAG_GETSOCK,
+		.nlmsg_flags = NLM_F_REQUEST
+	);
+
+	struct inet_diag_req *const req = NLMSG_DATA(nlh);
+	SET_STRUCT(struct inet_diag_req, req,
+		.idiag_family = AF_INET,
+		.idiag_ext = 1 << (INET_DIAG_TOS - 1),
+		.idiag_states = 1 << TCP_LAST_ACK,
+		.id.idiag_if = ifindex_lo()
+	);
+
+	if (!inet_pton(AF_INET, address, req->id.idiag_src) ||
+	    !inet_pton(AF_INET, address, req->id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
+}
+
+static void
+print_inet_diag_req(const unsigned int msg_len)
+{
+	printf("{len=%u, type=TCPDIAG_GETSOCK, flags=NLM_F_REQUEST"
+	       ", seq=0, pid=0}, {idiag_family=AF_INET"
+	       ", idiag_src_len=0, idiag_dst_len=0"
+	       ", idiag_ext=1<<(INET_DIAG_TOS-1)"
+	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=" IFINDEX_LO_STR
+	       ", idiag_cookie=[0, 0]}"
+	       ", idiag_states=1<<TCP_LAST_ACK, idiag_dbs=0}",
+	       msg_len, address, address);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct inet_diag_req);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* INET_DIAG_REQ_??? */",
+		INET_DIAG_REQ_BYTECODE + 1);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_inet_diag_req, print_inet_diag_req,
+		     INET_DIAG_REQ_BYTECODE + 1, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_inet_diag_req_compat.gen.test b/tests-mx32/nlattr_inet_diag_req_compat.gen.test
new file mode 100755
index 0000000..bf8b65c
--- /dev/null
+++ b/tests-mx32/nlattr_inet_diag_req_compat.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_compat +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_inet_diag_req_v2.c b/tests-mx32/nlattr_inet_diag_req_v2.c
new file mode 100644
index 0000000..1e09abe
--- /dev/null
+++ b/tests-mx32/nlattr_inet_diag_req_v2.c
@@ -0,0 +1,424 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <net/if.h>
+#include <netinet/tcp.h>
+#include "test_nlattr.h"
+#include <linux/inet_diag.h>
+#include <linux/rtnetlink.h>
+#include <linux/sock_diag.h>
+
+static const char address[] = "10.11.12.13";
+static const unsigned int hdrlen = sizeof(struct inet_diag_req_v2);
+static void *nlh0;
+static char pattern[4096];
+
+static void
+init_inet_diag_req_v2(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
+		.nlmsg_flags = NLM_F_REQUEST
+	);
+
+	struct inet_diag_req_v2 *const req = NLMSG_DATA(nlh);
+	SET_STRUCT(struct inet_diag_req_v2, req,
+		.sdiag_family = AF_INET,
+		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
+		.sdiag_protocol = IPPROTO_TCP,
+		.idiag_states = 1 << TCP_CLOSE,
+		.id.idiag_if = ifindex_lo()
+	);
+
+	if (!inet_pton(AF_INET, address, req->id.idiag_src) ||
+	    !inet_pton(AF_INET, address, req->id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
+}
+
+static void
+print_inet_diag_req_v2(const unsigned int msg_len)
+{
+	printf("{len=%u, type=SOCK_DIAG_BY_FAMILY"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", {sdiag_family=AF_INET, sdiag_protocol=IPPROTO_TCP"
+	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+	       ", idiag_states=1<<TCP_CLOSE"
+	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=" IFINDEX_LO_STR
+	       ", idiag_cookie=[0, 0]}}",
+	       msg_len, address, address);
+}
+
+static void
+test_inet_diag_bc_op(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+		.yes = 0xaf,
+		.no = 0xafcd
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_inet_diag_req_v2, print_inet_diag_req_v2,
+			   INET_DIAG_REQ_BYTECODE, pattern, op,
+			   printf("{code=INET_DIAG_BC_S_COND");
+			   PRINT_FIELD_U(", ", op, yes);
+			   PRINT_FIELD_U(", ", op, no);
+			   printf("}"));
+}
+
+static void
+print_inet_diag_bc_op(const char *const code)
+{
+	printf("{{code=%s, yes=0, no=0}, ", code);
+}
+
+static void
+test_inet_diag_bc_s_cond(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+	};
+	static const struct inet_diag_hostcond cond = {
+		.family = AF_UNSPEC,
+		.prefix_len = 0xad,
+		.port = 0xadfa
+	};
+	char buf[sizeof(op) + sizeof(cond)];
+	memcpy(buf, &op, sizeof(op));
+
+	const unsigned int plen = sizeof(cond) - 1 > DEFAULT_STRLEN ?
+		sizeof(op) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	memcpy(buf + sizeof(op), &pattern, sizeof(cond));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_quoted_hex(buf + sizeof(op), plen - sizeof(op));
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op)));
+
+	memcpy(buf + sizeof(op), &cond, sizeof(cond));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    printf("{family=AF_UNSPEC");
+		    PRINT_FIELD_U(", ", cond, prefix_len);
+		    PRINT_FIELD_U(", ", cond, port);
+		    printf("}}"));
+}
+
+static void
+print_inet_diag_hostcond(const char *const family)
+{
+	printf("{family=%s, prefix_len=0, port=0, ", family);
+}
+
+static void
+test_in_addr(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+	};
+	static const struct inet_diag_hostcond cond = {
+		.family = AF_INET,
+	};
+	struct in_addr addr;
+	if (!inet_pton(AF_INET, address, &addr))
+		perror_msg_and_skip("inet_pton");
+
+	char buf[sizeof(op) + sizeof(cond) + sizeof(addr)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), &cond, sizeof(cond));
+
+	const unsigned int plen = sizeof(addr) - 1 > DEFAULT_STRLEN ?
+		sizeof(cond) + sizeof(cond) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	memcpy(buf + sizeof(op) + sizeof(cond), &pattern, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET");
+		    printf("addr=");
+		    print_quoted_hex(pattern, plen - sizeof(op) - sizeof(cond));
+		    printf("}}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET");
+		    printf("addr=%p}}",
+			   RTA_DATA(TEST_NLATTR_nla)
+			   + sizeof(op) + sizeof(cond)));
+
+	memcpy(buf + sizeof(op) + sizeof(cond), &addr, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET");
+		    printf("addr=inet_addr(\"%s\")}}", address));
+}
+
+static void
+test_in6_addr(const int fd)
+{
+	const char address6[] = "12:34:56:78:90:ab:cd:ef";
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+	};
+	static const struct inet_diag_hostcond cond = {
+		.family = AF_INET6,
+	};
+	struct in6_addr addr;
+	if (!inet_pton(AF_INET6, address6, &addr))
+		perror_msg_and_skip("inet_pton");
+
+	char buf[sizeof(op) + sizeof(cond) + sizeof(addr)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), &cond, sizeof(cond));
+
+	const unsigned int plen = sizeof(addr) - 1 > DEFAULT_STRLEN ?
+		sizeof(cond) + sizeof(cond) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	memcpy(buf + sizeof(op) + sizeof(cond), &pattern, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET6");
+		    printf("addr=");
+		    print_quoted_hex(pattern, plen - sizeof(op) - sizeof(cond));
+		    printf("}}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET6");
+		    printf("addr=%p}}",
+			   RTA_DATA(TEST_NLATTR_nla)
+			   + sizeof(op) + sizeof(cond)));
+
+	memcpy(buf + sizeof(op) + sizeof(cond), &addr, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET6");
+		    printf("inet_pton(AF_INET6, \"%s\", &addr)}}", address6));
+}
+
+static void
+test_inet_diag_bc_dev_cond(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_DEV_COND,
+	};
+	const uint32_t ifindex = ifindex_lo();
+	char buf[sizeof(op) + sizeof(ifindex)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), pattern, sizeof(ifindex));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf) - 1, buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_DEV_COND");
+		    print_quoted_hex(pattern, sizeof(ifindex) - 1);
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_DEV_COND");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op)));
+
+	memcpy(buf + sizeof(op), &ifindex, sizeof(ifindex));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_DEV_COND");
+		    printf(IFINDEX_LO_STR "}"));
+}
+
+static void
+test_inet_diag_bc_s_le(const int fd)
+{
+	static const struct inet_diag_bc_op op[] = {
+		{
+			.code = INET_DIAG_BC_S_LE,
+		},
+		{
+			.code = INET_DIAG_BC_DEV_COND,
+			.yes = 0xaf,
+			.no = 0xafcd
+		}
+	};
+
+	char buf[sizeof(op)];
+	memcpy(buf, op, sizeof(op[0]));
+	memcpy(buf + sizeof(op[0]), pattern, sizeof(op[1]));
+
+	const unsigned int plen = sizeof(op[1]) - 1 > DEFAULT_STRLEN ?
+		sizeof(op[0]) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_LE");
+		    print_quoted_hex(buf + sizeof(op[0]), plen - sizeof(op[0]));
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_LE");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op[0])));
+
+	memcpy(buf + sizeof(op[0]), &op[1], sizeof(op[1]));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_LE");
+		    printf("{code=INET_DIAG_BC_DEV_COND");
+		    PRINT_FIELD_U(", ", op[1], yes);
+		    PRINT_FIELD_U(", ", op[1], no);
+		    printf("}}"));
+};
+
+static void
+test_inet_diag_bc_mark_cond(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_MARK_COND,
+	};
+	static const struct inet_diag_markcond markcond = {
+		.mark = 0xafbcafcd,
+		.mask = 0xbafaacda
+	};
+	char buf[sizeof(op) + sizeof(markcond)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), pattern, sizeof(markcond));
+
+	const unsigned int plen = sizeof(markcond) - 1 > DEFAULT_STRLEN ?
+		sizeof(markcond) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_MARK_COND");
+		    print_quoted_hex(buf + sizeof(op), plen - sizeof(op));
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_MARK_COND");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op)));
+
+	memcpy(buf + sizeof(op), &markcond, sizeof(markcond));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_MARK_COND");
+		    PRINT_FIELD_U("{", markcond, mark);
+		    PRINT_FIELD_U(", ", markcond, mask);
+		    printf("}}"));
+}
+
+static void
+test_inet_diag_bc_nop(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_AUTO,
+	};
+	char buf[sizeof(op) + 4];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), pattern, 4);
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_AUTO");
+		    print_quoted_hex(buf + sizeof(op),
+				     sizeof(buf) - sizeof(op));
+		    printf("}"));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	test_inet_diag_bc_op(fd);
+	test_inet_diag_bc_s_cond(fd);
+	test_in_addr(fd);
+	test_in6_addr(fd);
+	test_inet_diag_bc_dev_cond(fd);
+	test_inet_diag_bc_s_le(fd);
+	test_inet_diag_bc_mark_cond(fd);
+	test_inet_diag_bc_nop(fd);
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_inet_diag_req_v2.gen.test b/tests-mx32/nlattr_inet_diag_req_v2.gen.test
new file mode 100755
index 0000000..0260bc4
--- /dev/null
+++ b/tests-mx32/nlattr_inet_diag_req_v2.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_v2 +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ndmsg.c b/tests-mx32/nlattr_ndmsg.c
new file mode 100644
index 0000000..8538a82
--- /dev/null
+++ b/tests-mx32/nlattr_ndmsg.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "test_nlattr.h"
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define NDA_PORT 6
+
+static void
+init_ndmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNEIGH,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ndmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ndmsg, msg,
+		.ndm_family = AF_UNIX,
+		.ndm_ifindex = ifindex_lo(),
+		.ndm_state = NUD_PERMANENT,
+		.ndm_flags = NTF_PROXY,
+		.ndm_type = RTN_UNSPEC
+	);
+}
+
+static void
+print_ndmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNEIGH, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ndm_family=AF_UNIX"
+	       ", ndm_ifindex=" IFINDEX_LO_STR
+	       ", ndm_state=NUD_PERMANENT"
+	       ", ndm_flags=NTF_PROXY"
+	       ", ndm_type=RTN_UNSPEC}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ndmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NDA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ndmsg, print_ndmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ndmsg, print_ndmsg,
+		    NDA_DST, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	static const struct nda_cacheinfo ci = {
+		.ndm_confirmed = 0xabcdedad,
+		.ndm_used = 0xbcdaedad,
+		.ndm_updated = 0xcdbadeda,
+		.ndm_refcnt = 0xdeadbeda
+	};
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndmsg, print_ndmsg,
+			   NDA_CACHEINFO, pattern, ci,
+			   PRINT_FIELD_U("{", ci, ndm_confirmed);
+			   PRINT_FIELD_U(", ", ci, ndm_used);
+			   PRINT_FIELD_U(", ", ci, ndm_updated);
+			   PRINT_FIELD_U(", ", ci, ndm_refcnt);
+			   printf("}"));
+
+	const uint16_t port = 0xabcd;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndmsg, print_ndmsg,
+			   NDA_PORT, pattern, port,
+			   printf("htons(%u)", ntohs(port)));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_ndmsg.gen.test b/tests-mx32/nlattr_ndmsg.gen.test
new file mode 100755
index 0000000..06b8f1a
--- /dev/null
+++ b/tests-mx32/nlattr_ndmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ndtmsg.c b/tests-mx32/nlattr_ndtmsg.c
new file mode 100644
index 0000000..d3f1bdb
--- /dev/null
+++ b/tests-mx32/nlattr_ndtmsg.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define NDTA_PARMS 6
+#define NDTPA_IFINDEX 1
+
+static void
+init_ndtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNEIGHTBL,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ndtmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ndtmsg, msg,
+		.ndtm_family = AF_NETLINK
+	);
+}
+
+static void
+print_ndtmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNEIGHTBL, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ndtm_family=AF_NETLINK}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ndtmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NDTA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ndtmsg, print_ndtmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+#ifdef HAVE_STRUCT_NDT_CONFIG
+	static const struct ndt_config ndtc = {
+		.ndtc_key_len = 0xabcd,
+		.ndtc_entry_size = 0xbcda,
+		.ndtc_entries = 0xcdabedad,
+		.ndtc_last_flush = 0xdebaedba,
+		.ndtc_last_rand = 0xedadedab,
+		.ndtc_hash_rnd = 0xfeadedaf,
+		.ndtc_hash_mask = 0xadbcdead,
+		.ndtc_hash_chain_gc = 0xbdaedacd,
+		.ndtc_proxy_qlen = 0xcdeaedab
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndtmsg, print_ndtmsg,
+			   NDTA_CONFIG, pattern, ndtc,
+			   PRINT_FIELD_U("{", ndtc, ndtc_key_len);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_entry_size);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_entries);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_last_flush);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_last_rand);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_hash_rnd);
+			   PRINT_FIELD_0X(", ", ndtc, ndtc_hash_mask);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_hash_chain_gc);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_proxy_qlen);
+			   printf("}"));
+#endif /* HAVE_STRUCT_NDT_CONFIG */
+
+	static const struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = NDTPA_IFINDEX
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndtmsg, print_ndtmsg,
+			   NDTA_PARMS, pattern, nla,
+			   PRINT_FIELD_U("{", nla, nla_len);
+			   printf(", nla_type=NDTPA_IFINDEX}"));
+
+#ifdef HAVE_STRUCT_NDT_STATS
+	static const struct ndt_stats ndtst = {
+		.ndts_allocs		= 0xabcdedabedadedfa,
+		.ndts_destroys		= 0xbcdefabefacdbaad,
+		.ndts_hash_grows	= 0xcdbadefacdcbaede,
+		.ndts_res_failed	= 0xdedbaecfdbcadcfe,
+		.ndts_lookups		= 0xedfafdedbdadedec,
+		.ndts_hits		= 0xfebdeadebcddeade,
+		.ndts_rcv_probes_mcast	= 0xadebfeadecddeafe,
+		.ndts_rcv_probes_ucast	= 0xbcdefeacdadecdfe,
+		.ndts_periodic_gc_runs	= 0xedffeadedeffbecc,
+		.ndts_forced_gc_runs	= 0xfeefefeabedeedcd,
+#ifdef HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS
+		.ndts_table_fulls	= 0xadebfefaecdfeade
+#endif /* HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS */
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndtmsg, print_ndtmsg,
+			   NDTA_STATS, pattern, ndtst,
+			   PRINT_FIELD_U("{", ndtst, ndts_allocs);
+			   PRINT_FIELD_U(", ", ndtst, ndts_destroys);
+			   PRINT_FIELD_U(", ", ndtst, ndts_hash_grows);
+			   PRINT_FIELD_U(", ", ndtst, ndts_res_failed);
+			   PRINT_FIELD_U(", ", ndtst, ndts_lookups);
+			   PRINT_FIELD_U(", ", ndtst, ndts_hits);
+			   PRINT_FIELD_U(", ", ndtst, ndts_rcv_probes_mcast);
+			   PRINT_FIELD_U(", ", ndtst, ndts_rcv_probes_ucast);
+			   PRINT_FIELD_U(", ", ndtst, ndts_periodic_gc_runs);
+			   PRINT_FIELD_U(", ", ndtst, ndts_forced_gc_runs);
+#ifdef HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS
+			   PRINT_FIELD_U(", ", ndtst, ndts_table_fulls);
+#endif /* HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS */
+			   printf("}"));
+#endif /* HAVE_STRUCT_NDT_STATS */
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_ndtmsg.gen.test b/tests-mx32/nlattr_ndtmsg.gen.test
new file mode 100755
index 0000000..d75ad57
--- /dev/null
+++ b/tests-mx32/nlattr_ndtmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndtmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_netconfmsg.c b/tests-mx32/nlattr_netconfmsg.c
new file mode 100644
index 0000000..6866adc
--- /dev/null
+++ b/tests-mx32/nlattr_netconfmsg.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_NETCONFMSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/netconf.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_netconfmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNETCONF,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct netconfmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct netconfmsg, msg,
+		.ncm_family = AF_INET
+	);
+}
+
+static void
+print_netconfmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNETCONF, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ncm_family=AF_INET}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct netconfmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NETCONFA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_netconfmsg, print_netconfmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_NETCONFMSG")
+
+#endif
diff --git a/tests-mx32/nlattr_netconfmsg.gen.test b/tests-mx32/nlattr_netconfmsg.gen.test
new file mode 100755
index 0000000..9a061cb
--- /dev/null
+++ b/tests-mx32/nlattr_netconfmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_netconfmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_nlmsgerr.c b/tests-mx32/nlattr_nlmsgerr.c
new file mode 100644
index 0000000..837283c
--- /dev/null
+++ b/tests-mx32/nlattr_nlmsgerr.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <stdio.h>
+#include <stdint.h>
+#include "test_nlattr.h"
+
+#define NLMSGERR_ATTR_COOKIE 3
+
+static void
+init_nlmsgerr(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = NLMSG_ERROR,
+		.nlmsg_flags = NLM_F_REQUEST | NLM_F_CAPPED
+	);
+
+	struct nlmsgerr *const err = NLMSG_DATA(nlh);
+	SET_STRUCT(struct nlmsgerr, err,
+		.error = -13,
+		.msg = {
+			.nlmsg_len = NLMSG_HDRLEN + 4,
+			.nlmsg_type = NLMSG_NOOP,
+			.nlmsg_flags = NLM_F_REQUEST,
+		}
+	);
+}
+
+static void
+print_nlmsgerr(const unsigned int msg_len)
+{
+	printf("{len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_CAPPED"
+	       ", seq=0, pid=0}, {error=-EACCES"
+	       ", msg={len=%u, type=NLMSG_NOOP"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}",
+	       msg_len, NLMSG_HDRLEN + 4);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct nlmsgerr);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static const uint8_t cookie[] = { 0xab, 0xfe };
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_nlmsgerr, print_nlmsgerr,
+		    NLMSGERR_ATTR_COOKIE,
+		    sizeof(cookie), cookie, sizeof(cookie),
+		    printf("[%u, %u]", cookie[0], cookie[1]);
+		    printf("}"));
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_nlmsgerr.gen.test b/tests-mx32/nlattr_nlmsgerr.gen.test
new file mode 100755
index 0000000..23df500
--- /dev/null
+++ b/tests-mx32/nlattr_nlmsgerr.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_nlmsgerr +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_packet_diag_msg.c b/tests-mx32/nlattr_packet_diag_msg.c
new file mode 100644
index 0000000..4211e20
--- /dev/null
+++ b/tests-mx32/nlattr_packet_diag_msg.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <net/if.h>
+#include "test_nlattr.h"
+#include <sys/socket.h>
+#include <linux/filter.h>
+#include <linux/packet_diag.h>
+#include <linux/rtnetlink.h>
+#include <linux/sock_diag.h>
+
+static void
+init_packet_diag_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct packet_diag_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct packet_diag_msg, msg,
+		.pdiag_family = AF_PACKET,
+		.pdiag_type = SOCK_STREAM
+	);
+}
+
+static void
+print_packet_diag_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=SOCK_DIAG_BY_FAMILY"
+	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
+	       ", {pdiag_family=AF_PACKET"
+	       ", pdiag_type=SOCK_STREAM, pdiag_num=0"
+	       ", pdiag_ino=0, pdiag_cookie=[0, 0]}",
+	       msg_len);
+}
+
+static void
+print_packet_diag_mclist(const struct packet_diag_mclist *const dml)
+{
+	printf("{pdmc_index=" IFINDEX_LO_STR);
+	PRINT_FIELD_U(", ", *dml, pdmc_count);
+	PRINT_FIELD_U(", ", *dml, pdmc_type);
+	PRINT_FIELD_U(", ", *dml, pdmc_alen);
+	printf(", pdmc_addr=");
+	print_quoted_hex(dml->pdmc_addr, dml->pdmc_alen);
+	printf("}");
+}
+
+static const struct sock_filter filter[] = {
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF+SKF_AD_PKTTYPE),
+	BPF_STMT(BPF_RET|BPF_K, 0x2a)
+};
+
+static void
+print_sock_filter(const struct sock_filter *const f)
+{
+	if (f == filter)
+		printf("BPF_STMT(BPF_LD|BPF_B|BPF_ABS"
+		       ", SKF_AD_OFF+SKF_AD_PKTTYPE)");
+	else
+		printf("BPF_STMT(BPF_RET|BPF_K, 0x2a)");
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct packet_diag_msg);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	static const struct packet_diag_info pinfo = {
+		.pdi_index = 0xabcddafa,
+		.pdi_version = 0xbabcdafb,
+		.pdi_reserve = 0xcfaacdaf,
+		.pdi_copy_thresh = 0xdabacdaf,
+		.pdi_tstamp = 0xeafbaadf,
+		.pdi_flags = PDI_RUNNING
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_packet_diag_msg, print_packet_diag_msg,
+			   PACKET_DIAG_INFO, pattern, pinfo,
+			   PRINT_FIELD_U("{", pinfo, pdi_index);
+			   PRINT_FIELD_U(", ", pinfo, pdi_version);
+			   PRINT_FIELD_U(", ", pinfo, pdi_reserve);
+			   PRINT_FIELD_U(", ", pinfo, pdi_copy_thresh);
+			   PRINT_FIELD_U(", ", pinfo, pdi_tstamp);
+			   printf(", pdi_flags=PDI_RUNNING}"));
+
+	const struct packet_diag_mclist dml[] = {
+		{
+			.pdmc_index = ifindex_lo(),
+			.pdmc_count = 0xabcdaefc,
+			.pdmc_type = 0xcdaf,
+			.pdmc_alen = 4,
+			.pdmc_addr = "1234"
+		},
+		{
+			.pdmc_index = ifindex_lo(),
+			.pdmc_count = 0xdaefeafc,
+			.pdmc_type = 0xadef,
+			.pdmc_alen = 4,
+			.pdmc_addr = "5678"
+		}
+	};
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_packet_diag_msg, print_packet_diag_msg,
+			  PACKET_DIAG_MCLIST, pattern, dml,
+			  print_packet_diag_mclist);
+
+	static const struct packet_diag_ring pdr = {
+		.pdr_block_size = 0xabcdafed,
+		.pdr_block_nr = 0xbcadefae,
+		.pdr_frame_size = 0xcabdfeac,
+		.pdr_frame_nr = 0xdeaeadef,
+		.pdr_retire_tmo = 0xedbafeac,
+		.pdr_sizeof_priv = 0xfeadeacd,
+		.pdr_features = 0xadebadea
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_packet_diag_msg, print_packet_diag_msg,
+			   PACKET_DIAG_RX_RING, pattern, pdr,
+			   PRINT_FIELD_U("{", pdr, pdr_block_size);
+			   PRINT_FIELD_U(", ", pdr, pdr_block_nr);
+			   PRINT_FIELD_U(", ", pdr, pdr_frame_size);
+			   PRINT_FIELD_U(", ", pdr, pdr_frame_nr);
+			   PRINT_FIELD_U(", ", pdr, pdr_retire_tmo);
+			   PRINT_FIELD_U(", ", pdr, pdr_sizeof_priv);
+			   PRINT_FIELD_U(", ", pdr, pdr_features);
+			   printf("}"));
+
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_packet_diag_msg, print_packet_diag_msg,
+			  PACKET_DIAG_FILTER, pattern, filter,
+			  print_sock_filter);
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_packet_diag_msg.gen.test b/tests-mx32/nlattr_packet_diag_msg.gen.test
new file mode 100755
index 0000000..6af8749
--- /dev/null
+++ b/tests-mx32/nlattr_packet_diag_msg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_packet_diag_msg +netlink_sock_diag-v.sh); do not edit.
+. "${srcdir=.}/netlink_sock_diag-v.sh"
diff --git a/tests-mx32/nlattr_rtgenmsg.c b/tests-mx32/nlattr_rtgenmsg.c
new file mode 100644
index 0000000..ceb061d
--- /dev/null
+++ b/tests-mx32/nlattr_rtgenmsg.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+
+#ifdef RTM_GETNSID
+
+# include "test_nlattr.h"
+
+static void
+init_rtgenmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNSID,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct rtgenmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct rtgenmsg, msg,
+		.rtgen_family = AF_UNIX
+	);
+}
+
+static void
+print_rtgenmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNSID, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {rtgen_family=AF_UNIX}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct rtgenmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NETNSA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_rtgenmsg, print_rtgenmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("RTM_GETNSID")
+
+#endif
diff --git a/tests-mx32/nlattr_rtgenmsg.gen.test b/tests-mx32/nlattr_rtgenmsg.gen.test
new file mode 100755
index 0000000..0ff6d13
--- /dev/null
+++ b/tests-mx32/nlattr_rtgenmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtgenmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_rtmsg.c b/tests-mx32/nlattr_rtmsg.c
new file mode 100644
index 0000000..5f29f0c
--- /dev/null
+++ b/tests-mx32/nlattr_rtmsg.c
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "test_nlattr.h"
+#include <linux/ip.h>
+#include <linux/rtnetlink.h>
+
+#define RTA_ENCAP_TYPE 21
+#define LWTUNNEL_ENCAP_NONE 0
+
+static void
+init_rtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETROUTE,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct rtmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct rtmsg, msg,
+		.rtm_family = AF_UNIX,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_DEFAULT,
+		.rtm_protocol = RTPROT_KERNEL,
+		.rtm_scope = RT_SCOPE_UNIVERSE,
+		.rtm_type = RTN_LOCAL,
+		.rtm_flags = RTM_F_NOTIFY
+	);
+}
+
+static void
+print_rtmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETROUTE, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {rtm_family=AF_UNIX"
+	       ", rtm_dst_len=0, rtm_src_len=0"
+	       ", rtm_tos=IPTOS_LOWDELAY"
+	       ", rtm_table=RT_TABLE_DEFAULT"
+	       ", rtm_protocol=RTPROT_KERNEL"
+	       ", rtm_scope=RT_SCOPE_UNIVERSE"
+	       ", rtm_type=RTN_LOCAL"
+	       ", rtm_flags=RTM_F_NOTIFY}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct rtmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* RTA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_rtmsg, print_rtmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    RTA_DST, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	const uint32_t ifindex = ifindex_lo();
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_OIF, pattern, ifindex,
+			   printf(IFINDEX_LO_STR));
+
+	const uint32_t rt_class_id = RT_TABLE_DEFAULT;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_TABLE, pattern, rt_class_id,
+			   printf("RT_TABLE_DEFAULT"));
+
+	struct nlattr nla = {
+		.nla_type = RTAX_LOCK,
+		.nla_len = sizeof(nla)
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_METRICS, pattern, nla,
+			   printf("{nla_len=%u, nla_type=RTAX_LOCK}",
+				  nla.nla_len));
+	struct rtnexthop nh = {
+		.rtnh_len = sizeof(nh) - 1,
+		.rtnh_flags = RTNH_F_DEAD,
+		.rtnh_hops = 0xab,
+		.rtnh_ifindex = ifindex_lo()
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_MULTIPATH, pattern, nh,
+			   printf("{rtnh_len=%u, rtnh_flags=RTNH_F_DEAD"
+				  ", rtnh_hops=%u"
+				  ", rtnh_ifindex=" IFINDEX_LO_STR "}",
+				  nh.rtnh_len, nh.rtnh_hops));
+
+	char buf[RTNH_ALIGN(sizeof(nh)) + sizeof(nla)];
+	nh.rtnh_len = sizeof(buf);
+	nla.nla_type = RTA_DST;
+	memcpy(buf, &nh, sizeof(nh));
+	memcpy(buf + RTNH_ALIGN(sizeof(nh)), &nla, sizeof(nla));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    RTA_MULTIPATH, sizeof(buf), buf, sizeof(buf),
+		    printf("{rtnh_len=%u, rtnh_flags=RTNH_F_DEAD"
+			   ", rtnh_hops=%u, rtnh_ifindex=" IFINDEX_LO_STR "}"
+			   ", {nla_len=%u, nla_type=RTA_DST}",
+			   nh.rtnh_len, nh.rtnh_hops, nla.nla_len));
+
+	static const struct rta_cacheinfo ci = {
+		.rta_clntref = 0xabcdefab,
+		.rta_lastuse = 0xbdadaedc,
+		.rta_expires = 0xcdadebad,
+		.rta_error = 0xdaedadeb,
+		.rta_used = 0xedfabdad,
+		.rta_id = 0xfeadbcda,
+		.rta_ts = 0xacdbaded,
+		.rta_tsage = 0xbadeadef
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_CACHEINFO, pattern, ci,
+			   PRINT_FIELD_U("{", ci, rta_clntref);
+			   PRINT_FIELD_U(", ", ci, rta_lastuse);
+			   PRINT_FIELD_U(", ", ci, rta_expires);
+			   PRINT_FIELD_U(", ", ci, rta_error);
+			   PRINT_FIELD_U(", ", ci, rta_used);
+			   PRINT_FIELD_X(", ", ci, rta_id);
+			   PRINT_FIELD_U(", ", ci, rta_ts);
+			   PRINT_FIELD_U(", ", ci, rta_tsage);
+			   printf("}"));
+
+#ifdef HAVE_STRUCT_RTA_MFC_STATS
+	static const struct rta_mfc_stats mfcs = {
+		.mfcs_packets = 0xadcdedfdadefadcd,
+		.mfcs_bytes = 0xbaedadedcdedadbd,
+		.mfcs_wrong_if = 0xcddeabeedaedabfa
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_MFC_STATS, pattern, mfcs,
+			   PRINT_FIELD_U("{", mfcs, mfcs_packets);
+			   PRINT_FIELD_U(", ", mfcs, mfcs_bytes);
+			   PRINT_FIELD_U(", ", mfcs, mfcs_wrong_if);
+			   printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_RTVIA
+	static const struct rtvia via = {
+		.rtvia_family = AF_INET
+	};
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_VIA, pattern, via,
+			   printf("{rtvia_family=AF_INET}"));
+
+	static const char address4[] = "12.34.56.78";
+	struct in_addr a4 = {
+		.s_addr = inet_addr(address4)
+	};
+	char rtviabuf[sizeof(via) + sizeof(a4)];
+	memcpy(rtviabuf, &via, sizeof(via));
+	memcpy(rtviabuf + sizeof(via), &a4, sizeof(a4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    RTA_VIA, sizeof(rtviabuf), rtviabuf, sizeof(rtviabuf),
+		    printf("{rtvia_family=AF_INET"
+			   ", rtvia_addr=inet_addr(\"%s\")}", address4));
+#endif
+
+	const uint16_t encap_type = LWTUNNEL_ENCAP_NONE;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_ENCAP_TYPE, pattern, encap_type,
+			   printf("LWTUNNEL_ENCAP_NONE"));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_rtmsg.gen.test b/tests-mx32/nlattr_rtmsg.gen.test
new file mode 100755
index 0000000..5525143
--- /dev/null
+++ b/tests-mx32/nlattr_rtmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_smc_diag_msg.c b/tests-mx32/nlattr_smc_diag_msg.c
new file mode 100644
index 0000000..a06ad62
--- /dev/null
+++ b/tests-mx32/nlattr_smc_diag_msg.c
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <sys/socket.h>
+
+#ifdef AF_SMC
+
+# include <stdio.h>
+# include <string.h>
+# include <stdint.h>
+# include <arpa/inet.h>
+# include "test_nlattr.h"
+# include <linux/rtnetlink.h>
+# include <linux/smc_diag.h>
+# include <linux/sock_diag.h>
+
+# ifndef SMC_CLNT
+#  define SMC_CLNT 0
+# endif
+# ifndef SMC_ACTIVE
+#  define SMC_ACTIVE 1
+# endif
+
+static const char address[] = "12.34.56.78";
+
+static void
+init_smc_diag_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct smc_diag_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct smc_diag_msg, msg,
+		.diag_family = AF_SMC,
+		.diag_state = SMC_ACTIVE
+	);
+
+	if (!inet_pton(AF_INET, address, msg->id.idiag_src) ||
+	    !inet_pton(AF_INET, address, msg->id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
+}
+
+static void
+print_smc_diag_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=SOCK_DIAG_BY_FAMILY"
+	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
+	       ", {diag_family=AF_SMC, diag_state=SMC_ACTIVE"
+	       ", diag_fallback=0, diag_shutdown=0"
+	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=0, idiag_cookie=[0, 0]}"
+	       ", diag_uid=0, diag_inode=0}",
+	       msg_len, address, address);
+}
+
+#define PRINT_FIELD_SMC_DIAG_CURSOR(prefix_, where_, field_)		\
+	do {								\
+		printf("%s%s=", (prefix_), #field_);			\
+		PRINT_FIELD_U("{", (where_).field_, reserved);		\
+		PRINT_FIELD_U(", ", (where_).field_, wrap);		\
+		PRINT_FIELD_U(", ", (where_).field_, count);		\
+		printf("}");						\
+	} while (0)
+
+int main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct smc_diag_msg);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	static const struct smc_diag_conninfo cinfo = {
+		.token = 0xabcdefac,
+		.sndbuf_size = 0xbcdaefad,
+		.rmbe_size = 0xcdbaefab,
+		.peer_rmbe_size = 0xdbcdedaf,
+		.rx_prod = {
+			.reserved = 0xabc1,
+			.wrap = 0xbca1,
+			.count = 0xcdedbad1
+		},
+		.rx_cons = {
+			.reserved = 0xabc2,
+			.wrap = 0xbca2,
+			.count = 0xcdedbad2
+		},
+		.tx_prod = {
+			.reserved = 0xabc3,
+			.wrap = 0xbca3,
+			.count = 0xcdedbad3
+		},
+		.tx_cons = {
+			.reserved = 0xabc4,
+			.wrap = 0xbca4,
+			.count = 0xcdedbad4
+		},
+		.rx_prod_flags = 0xff,
+		.rx_conn_state_flags = 0xff,
+		.tx_prod_flags = 0xff,
+		.tx_conn_state_flags = 0xff,
+		.tx_prep = {
+			.reserved = 0xabc5,
+			.wrap = 0xbca5,
+			.count = 0xcdedbad5
+		},
+		.tx_sent = {
+			.reserved = 0xabc6,
+			.wrap = 0xbca6,
+			.count = 0xcdedbad6
+		},
+		.tx_fin = {
+			.reserved = 0xabc7,
+			.wrap = 0xbca7,
+			.count = 0xcdedbad7
+		}
+	};
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_smc_diag_msg, print_smc_diag_msg,
+			   SMC_DIAG_CONNINFO, pattern, cinfo,
+			   PRINT_FIELD_U("{", cinfo, token);
+			   PRINT_FIELD_U(", ", cinfo, sndbuf_size);
+			   PRINT_FIELD_U(", ", cinfo, rmbe_size);
+			   PRINT_FIELD_U(", ", cinfo, peer_rmbe_size);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, rx_prod);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, rx_cons);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_prod);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_cons);
+			   printf(", rx_prod_flags=0xff");
+			   printf(", rx_conn_state_flags=0xff");
+			   printf(", tx_prod_flags=0xff");
+			   printf(", tx_conn_state_flags=0xff");
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_prep);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_sent);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_fin);
+			   printf("}"));
+
+	static const struct smc_diag_lgrinfo linfo = {
+		.lnk[0] = {
+			.link_id = 0xaf,
+			.ibport = 0xfa,
+			.ibname = "123",
+			.gid = "456",
+			.peer_gid = "789"
+		},
+		.role = SMC_CLNT
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_smc_diag_msg, print_smc_diag_msg,
+			   SMC_DIAG_LGRINFO, pattern, linfo,
+			   PRINT_FIELD_U("{lnk[0]={", linfo.lnk[0], link_id);
+			   printf(", ibname=\"%s\"", linfo.lnk[0].ibname);
+			   PRINT_FIELD_U(", ", linfo.lnk[0], ibport);
+			   printf(", gid=\"%s\"", linfo.lnk[0].gid);
+			   printf(", peer_gid=\"%s\"}", linfo.lnk[0].peer_gid);
+			   printf(", role=SMC_CLNT}"));
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("AF_SMC")
+
+#endif
diff --git a/tests-mx32/nlattr_smc_diag_msg.gen.test b/tests-mx32/nlattr_smc_diag_msg.gen.test
new file mode 100755
index 0000000..3e6407e
--- /dev/null
+++ b/tests-mx32/nlattr_smc_diag_msg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_smc_diag_msg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_tcamsg.c b/tests-mx32/nlattr_tcamsg.c
new file mode 100644
index 0000000..7f61153
--- /dev/null
+++ b/tests-mx32/nlattr_tcamsg.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/rtnetlink.h>
+
+static void
+init_tcamsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETACTION,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcamsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcamsg, msg,
+		.tca_family = AF_INET
+	);
+}
+
+static void
+print_tcamsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETACTION, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tca_family=AF_INET}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct tcamsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* TCA_ACT_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_tcamsg, print_tcamsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_tcamsg.gen.test b/tests-mx32/nlattr_tcamsg.gen.test
new file mode 100755
index 0000000..7c30207
--- /dev/null
+++ b/tests-mx32/nlattr_tcamsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcamsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_tcmsg.c b/tests-mx32/nlattr_tcmsg.c
new file mode 100644
index 0000000..00b7ae4
--- /dev/null
+++ b/tests-mx32/nlattr_tcmsg.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/rtnetlink.h>
+
+static void
+init_tcmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETQDISC,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcmsg, msg,
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo()
+	);
+
+}
+
+static void
+print_tcmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETQDISC, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tcm_family=AF_UNIX"
+	       ", tcm_ifindex=" IFINDEX_LO_STR
+	       ", tcm_handle=0, tcm_parent=0, tcm_info=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct tcmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* TCA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_tcmsg, print_tcmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_tcmsg.gen.test b/tests-mx32/nlattr_tcmsg.gen.test
new file mode 100755
index 0000000..f5bf7a9
--- /dev/null
+++ b/tests-mx32/nlattr_tcmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nsyscalls.c b/tests-mx32/nsyscalls.c
index d6b989c..29f444a 100644
--- a/tests-mx32/nsyscalls.c
+++ b/tests-mx32/nsyscalls.c
@@ -35,31 +35,14 @@
 #include <unistd.h>
 #include <asm/unistd.h>
 
-#define TD 0
-#define TF 0
-#define TI 0
-#define TN 0
-#define TP 0
-#define TS 0
-#define TM 0
-#define TST 0
-#define TLST 0
-#define TFST 0
-#define TSTA 0
-#define TSF 0
-#define TFSF 0
-#define TSFA 0
-#define NF 0
-#define MA 0
-#define SI 0
-#define SE 0
-#define CST 0
-#define SEN(arg) 0, 0
+#include "sysent_shorthand_defs.h"
 
 static const struct_sysent syscallent[] = {
 #include "syscallent.h"
 };
 
+#include "sysent_shorthand_undefs.h"
+
 #if defined __X32_SYSCALL_BIT && defined __NR_read \
  && (__X32_SYSCALL_BIT & __NR_read) != 0
 # define SYSCALL_BIT __X32_SYSCALL_BIT
diff --git a/tests-mx32/options-syntax.test b/tests-mx32/options-syntax.test
index 7cfc579..b4d9be7 100755
--- a/tests-mx32/options-syntax.test
+++ b/tests-mx32/options-syntax.test
@@ -28,57 +28,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-. "${srcdir=.}/init.sh"
-
-check_exit_status_and_stderr()
-{
-	$STRACE "$@" 2> "$LOG" &&
-		dump_log_and_fail_with \
-			"strace $* failed to handle the error properly"
-	match_diff "$LOG" "$EXP" ||
-		dump_log_and_fail_with \
-			"strace $* failed to print expected diagnostics"
-}
-
-check_exit_status_and_stderr_using_grep()
-{
-	$STRACE "$@" 2> "$LOG" &&
-		dump_log_and_fail_with \
-			"strace $* failed to handle the error properly"
-	match_grep "$LOG" "$EXP" ||
-		dump_log_and_fail_with \
-			"strace $* failed to print expected diagnostics"
-}
-
-strace_exp="${STRACE##* }"
-
-check_e()
-{
-	local pattern="$1"; shift
-	cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-__EOF__
-	check_exit_status_and_stderr "$@"
-}
-
-check_e_using_grep()
-{
-	local pattern="$1"; shift
-	cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-__EOF__
-	check_exit_status_and_stderr_using_grep "$@"
-}
-
-check_h()
-{
-	local pattern="$1"; shift
-	cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-Try '$strace_exp -h' for more information.
-__EOF__
-	check_exit_status_and_stderr "$@"
-}
+. "${srcdir=.}/syntax.sh"
 
 check_e "Invalid process id: '0'" -p 0
 check_e "Invalid process id: '-42'" -p -42
diff --git a/tests-mx32/poll.c b/tests-mx32/poll.c
index af66e53..2bf8c1a 100644
--- a/tests-mx32/poll.c
+++ b/tests-mx32/poll.c
@@ -2,6 +2,7 @@
  * This file is part of poll strace test.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/prctl-seccomp-filter-v.c b/tests-mx32/prctl-seccomp-filter-v.c
index 69316fb..cfd5d3d 100644
--- a/tests-mx32/prctl-seccomp-filter-v.c
+++ b/tests-mx32/prctl-seccomp-filter-v.c
@@ -2,6 +2,7 @@
  * Check verbose decoding of prctl PR_SET_SECCOMP SECCOMP_MODE_FILTER.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,9 +41,7 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-#endif
+#include <linux/filter.h>
 
 #if defined HAVE_PRCTL \
  && defined PR_SET_NO_NEW_PRIVS \
diff --git a/tests-mx32/preadv-pwritev.c b/tests-mx32/preadv-pwritev.c
index ddbd47f..44ed23a 100644
--- a/tests-mx32/preadv-pwritev.c
+++ b/tests-mx32/preadv-pwritev.c
@@ -2,6 +2,7 @@
  * Check decoding of preadv and pwritev syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/print_quoted_string.c b/tests-mx32/print_quoted_string.c
index 732fe3d..2894e49 100644
--- a/tests-mx32/print_quoted_string.c
+++ b/tests-mx32/print_quoted_string.c
@@ -16,11 +16,24 @@
 }
 
 void
-print_quoted_memory(const char *instr, const size_t len)
+print_quoted_cstring(const char *instr, const size_t size)
+{
+	const size_t len = strnlen(instr, size);
+	if (len < size) {
+		print_quoted_memory(instr, len);
+	} else {
+		print_quoted_memory(instr, size - 1);
+		printf("...");
+	}
+}
+
+void
+print_quoted_memory(const void *const instr, const size_t len)
 {
 	const unsigned char *str = (const unsigned char *) instr;
 	size_t i;
 
+	putchar('"');
 	for (i = 0; i < len; ++i) {
 		const int c = str[i];
 		switch (c) {
@@ -72,4 +85,17 @@
 		}
 	}
 
+	putchar('"');
+}
+
+void
+print_quoted_hex(const void *const instr, const size_t len)
+{
+	const unsigned char *str = instr;
+	size_t i;
+
+	printf("\"");
+	for (i = 0; i < len; i++)
+		printf("\\x%02x", str[i]);
+	printf("\"");
 }
diff --git a/tests-mx32/printpath-umovestr-legacy.test b/tests-mx32/printpath-umovestr-legacy.test
new file mode 100755
index 0000000..15f57ed
--- /dev/null
+++ b/tests-mx32/printpath-umovestr-legacy.test
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# Force legacy printpath/umovestr using process_vm_readv fault injection.
+#
+# Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+> "$LOG" || fail_ "failed to write $LOG"
+fault_args='-qq -esignal=none -etrace=process_vm_readv -efault=process_vm_readv'
+args='../printpath-umovestr-peekdata'
+
+$STRACE -o "$LOG" $fault_args $args > /dev/null || {
+	rc=$?
+	if [ $rc -eq 77 ]; then
+		skip_ "$fault_args $args exited with code 77"
+	else
+		fail_ "$fault_args $args failed with code $rc"
+	fi
+}
+
+> "$LOG" || fail_ "failed to write $LOG"
+args="-a11 -e signal=none -e trace=chdir $args skip-process_vm_readv-check"
+
+$STRACE -o /dev/null $fault_args \
+	$STRACE -o "$LOG" $args > "$EXP" ||
+	dump_log_and_fail_with "$STRACE $args failed with code $?"
+
+match_diff "$LOG" "$EXP"
diff --git a/tests-mx32/printpath-umovestr-peekdata.c b/tests-mx32/printpath-umovestr-peekdata.c
new file mode 100644
index 0000000..82f1035
--- /dev/null
+++ b/tests-mx32/printpath-umovestr-peekdata.c
@@ -0,0 +1,47 @@
+/*
+ * Test PTRACE_PEEKDATA-based printpath/umovestr.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac < 2 && test_process_vm_readv())
+		error_msg_and_skip("process_vm_readv is available");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printpath(sizeof(long) * 4);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/printpath-umovestr-peekdata.gen.test b/tests-mx32/printpath-umovestr-peekdata.gen.test
new file mode 100755
index 0000000..6fe65ee
--- /dev/null
+++ b/tests-mx32/printpath-umovestr-peekdata.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printpath-umovestr-peekdata -a11 -e signal=none -e trace=chdir); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e signal=none -e trace=chdir
diff --git a/tests-mx32/printpath-umovestr-undumpable.c b/tests-mx32/printpath-umovestr-undumpable.c
new file mode 100644
index 0000000..fba8f24
--- /dev/null
+++ b/tests-mx32/printpath-umovestr-undumpable.c
@@ -0,0 +1,71 @@
+/*
+ * Force legacy printpath/umovestr using PR_SET_DUMPABLE.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_PRCTL
+# include <sys/prctl.h>
+#endif
+
+#if defined HAVE_PRCTL && defined PR_SET_DUMPABLE
+
+# include <stdio.h>
+# include <unistd.h>
+
+# include "test_ucopy.h"
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	/*
+	 * Clearing dumpable flag disallows process_vm_readv.
+	 * If the kernel does not contain commit
+	 * 84d77d3f06e7e8dea057d10e8ec77ad71f721be3, then
+	 * PTRACE_PEEKDATA remains allowed.
+	 */
+	if (prctl(PR_SET_DUMPABLE, 0))
+		perror_msg_and_skip("PR_SET_DUMPABLE 0");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printpath(sizeof(long) * 4);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_SET_DUMPABLE")
+
+#endif
diff --git a/tests-mx32/printpath-umovestr-undumpable.gen.test b/tests-mx32/printpath-umovestr-undumpable.gen.test
new file mode 100755
index 0000000..cca6442
--- /dev/null
+++ b/tests-mx32/printpath-umovestr-undumpable.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printpath-umovestr-undumpable -a11 -e signal=none -e trace=chdir); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e signal=none -e trace=chdir
diff --git a/tests-mx32/printpath-umovestr.c b/tests-mx32/printpath-umovestr.c
new file mode 100644
index 0000000..a7251e5
--- /dev/null
+++ b/tests-mx32/printpath-umovestr.c
@@ -0,0 +1,45 @@
+/*
+ * Test regular printpath/umovestr.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+#include <sys/param.h>
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	test_printpath(PATH_MAX);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/printpath-umovestr.gen.test b/tests-mx32/printpath-umovestr.gen.test
new file mode 100755
index 0000000..c827a7d
--- /dev/null
+++ b/tests-mx32/printpath-umovestr.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printpath-umovestr -a11 -e signal=none -e trace=chdir); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e signal=none -e trace=chdir
diff --git a/tests-mx32/printstr.c b/tests-mx32/printstr.c
index 8e22681..030c1e4 100644
--- a/tests-mx32/printstr.c
+++ b/tests-mx32/printstr.c
@@ -2,6 +2,7 @@
  * Check decoding of non-NUL-terminated strings when len == -1.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/printstrn-umoven-legacy.test b/tests-mx32/printstrn-umoven-legacy.test
new file mode 100755
index 0000000..3b2aa26
--- /dev/null
+++ b/tests-mx32/printstrn-umoven-legacy.test
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# Force legacy printstrn/umoven using process_vm_readv fault injection.
+#
+# Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+> "$LOG" || fail_ "failed to write $LOG"
+fault_args='-qq -esignal=none -etrace=process_vm_readv -efault=process_vm_readv'
+args='../printstrn-umoven-peekdata'
+
+$STRACE -o "$LOG" $fault_args $args > /dev/null || {
+	rc=$?
+	if [ $rc -eq 77 ]; then
+		skip_ "$fault_args $args exited with code 77"
+	else
+		fail_ "$fault_args $args failed with code $rc"
+	fi
+}
+
+> "$LOG" || fail_ "failed to write $LOG"
+args="-e signal=none -e trace=add_key $args skip-process_vm_readv-check"
+
+$STRACE -o /dev/null $fault_args \
+	$STRACE -o "$LOG" $args > "$EXP" ||
+	dump_log_and_fail_with "$STRACE $args failed with code $?"
+
+match_diff "$LOG" "$EXP"
diff --git a/tests-mx32/printstrn-umoven-peekdata.c b/tests-mx32/printstrn-umoven-peekdata.c
new file mode 100644
index 0000000..92a6e6a
--- /dev/null
+++ b/tests-mx32/printstrn-umoven-peekdata.c
@@ -0,0 +1,47 @@
+/*
+ * Test PTRACE_PEEKDATA-based printstrn/umoven.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac < 2 && test_process_vm_readv())
+		error_msg_and_skip("process_vm_readv is available");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printstrn(DEFAULT_STRLEN);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/printstrn-umoven-peekdata.gen.test b/tests-mx32/printstrn-umoven-peekdata.gen.test
new file mode 100755
index 0000000..61f648a
--- /dev/null
+++ b/tests-mx32/printstrn-umoven-peekdata.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printstrn-umoven-peekdata -e signal=none -e trace=add_key); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e signal=none -e trace=add_key
diff --git a/tests-mx32/printstrn-umoven-undumpable.c b/tests-mx32/printstrn-umoven-undumpable.c
new file mode 100644
index 0000000..b23e220
--- /dev/null
+++ b/tests-mx32/printstrn-umoven-undumpable.c
@@ -0,0 +1,71 @@
+/*
+ * Force legacy printpath/umovestr using PR_SET_DUMPABLE.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_PRCTL
+# include <sys/prctl.h>
+#endif
+
+#if defined HAVE_PRCTL && defined PR_SET_DUMPABLE
+
+# include <stdio.h>
+# include <unistd.h>
+
+# include "test_ucopy.h"
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	/*
+	 * Clearing dumpable flag disallows process_vm_readv.
+	 * If the kernel does not contain commit
+	 * 84d77d3f06e7e8dea057d10e8ec77ad71f721be3, then
+	 * PTRACE_PEEKDATA remains allowed.
+	 */
+	if (prctl(PR_SET_DUMPABLE, 0))
+		perror_msg_and_skip("PR_SET_DUMPABLE 0");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printstrn(DEFAULT_STRLEN);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_SET_DUMPABLE")
+
+#endif
diff --git a/tests-mx32/printstrn-umoven-undumpable.gen.test b/tests-mx32/printstrn-umoven-undumpable.gen.test
new file mode 100755
index 0000000..1dee526
--- /dev/null
+++ b/tests-mx32/printstrn-umoven-undumpable.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printstrn-umoven-undumpable -e signal=none -e trace=add_key); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e signal=none -e trace=add_key
diff --git a/tests-mx32/printstrn-umoven.c b/tests-mx32/printstrn-umoven.c
new file mode 100644
index 0000000..d63f7c5
--- /dev/null
+++ b/tests-mx32/printstrn-umoven.c
@@ -0,0 +1,44 @@
+/*
+ * Test regular printstrn/umoven.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	test_printstrn(4096);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/printstrn-umoven.gen.test b/tests-mx32/printstrn-umoven.gen.test
new file mode 100755
index 0000000..4187238
--- /dev/null
+++ b/tests-mx32/printstrn-umoven.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printstrn-umoven -s4096 -e signal=none -e trace=add_key); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -s4096 -e signal=none -e trace=add_key
diff --git a/tests-mx32/process_vm_readv_writev.c b/tests-mx32/process_vm_readv_writev.c
index c0f9c31..5ee801b 100644
--- a/tests-mx32/process_vm_readv_writev.c
+++ b/tests-mx32/process_vm_readv_writev.c
@@ -2,6 +2,7 @@
  * Check decoding of process_vm_readv/process_vm_writev syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/pure_executables.am b/tests-mx32/pure_executables.am
index 8563488..9dc532a 100644
--- a/tests-mx32/pure_executables.am
+++ b/tests-mx32/pure_executables.am
@@ -10,6 +10,7 @@
   aio \
   alarm \
   bpf \
+  bpf-v \
   brk \
   btrfs \
   caps \
@@ -50,6 +51,7 @@
   fcntl \
   fcntl64 \
   fdatasync \
+  fflush \
   file_handle \
   file_ioctl \
   finit_module \
@@ -93,6 +95,7 @@
   getuid \
   getuid32 \
   getxxid \
+  group_req \
   inet-cmsg \
   init_module \
   inotify \
@@ -167,7 +170,9 @@
   net-yy-netlink \
   net-yy-unix \
   netlink_audit \
+  netlink_crypto \
   netlink_generic \
+  netlink_kobject_uevent \
   netlink_netfilter \
   netlink_protocol \
   netlink_route \
@@ -176,8 +181,30 @@
   netlink_xfrm \
   newfstatat \
   nlattr \
+  nlattr_crypto_user_alg \
+  nlattr_br_port_msg \
+  nlattr_dcbmsg \
+  nlattr_fib_rule_hdr \
+  nlattr_ifaddrlblmsg \
+  nlattr_ifaddrmsg \
+  nlattr_ifinfomsg \
+  nlattr_ifla_brport \
+  nlattr_ifla_port \
+  nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
+  nlattr_inet_diag_req_compat \
+  nlattr_inet_diag_req_v2 \
+  nlattr_ndmsg \
+  nlattr_ndtmsg \
+  nlattr_netconfmsg \
   nlattr_netlink_diag_msg \
+  nlattr_nlmsgerr \
+  nlattr_packet_diag_msg \
+  nlattr_rtgenmsg \
+  nlattr_rtmsg \
+  nlattr_smc_diag_msg \
+  nlattr_tcamsg \
+  nlattr_tcmsg \
   nlattr_unix_diag_msg \
   old_mmap \
   oldfstat \
@@ -209,7 +236,13 @@
   preadv \
   preadv-pwritev \
   preadv2-pwritev2 \
+  printpath-umovestr \
+  printpath-umovestr-peekdata \
+  printpath-umovestr-undumpable \
   printstr \
+  printstrn-umoven \
+  printstrn-umoven-peekdata \
+  printstrn-umoven-undumpable \
   prlimit64 \
   process_vm_readv \
   process_vm_writev \
@@ -288,6 +321,9 @@
   sigprocmask \
   sigreturn \
   sigsuspend \
+  so_linger \
+  so_peercred \
+  sock_filter-v \
   socketcall \
   splice \
   stat \
diff --git a/tests-mx32/pure_executables.list b/tests-mx32/pure_executables.list
index 033208e..dade57b 100755
--- a/tests-mx32/pure_executables.list
+++ b/tests-mx32/pure_executables.list
@@ -9,6 +9,7 @@
 aio
 alarm
 bpf
+bpf-v
 brk
 btrfs
 caps
@@ -49,6 +50,7 @@
 fcntl
 fcntl64
 fdatasync
+fflush
 file_handle
 file_ioctl
 finit_module
@@ -92,6 +94,7 @@
 getuid
 getuid32
 getxxid
+group_req
 inet-cmsg
 init_module
 inotify
@@ -166,7 +169,9 @@
 net-yy-netlink
 net-yy-unix
 netlink_audit
+netlink_crypto
 netlink_generic
+netlink_kobject_uevent
 netlink_netfilter
 netlink_protocol
 netlink_route
@@ -175,8 +180,30 @@
 netlink_xfrm
 newfstatat
 nlattr
+nlattr_crypto_user_alg
+nlattr_br_port_msg
+nlattr_dcbmsg
+nlattr_fib_rule_hdr
+nlattr_ifaddrlblmsg
+nlattr_ifaddrmsg
+nlattr_ifinfomsg
+nlattr_ifla_brport
+nlattr_ifla_port
+nlattr_ifla_xdp
 nlattr_inet_diag_msg
+nlattr_inet_diag_req_compat
+nlattr_inet_diag_req_v2
+nlattr_ndmsg
+nlattr_ndtmsg
+nlattr_netconfmsg
 nlattr_netlink_diag_msg
+nlattr_nlmsgerr
+nlattr_packet_diag_msg
+nlattr_rtgenmsg
+nlattr_rtmsg
+nlattr_smc_diag_msg
+nlattr_tcamsg
+nlattr_tcmsg
 nlattr_unix_diag_msg
 old_mmap
 oldfstat
@@ -208,7 +235,13 @@
 preadv
 preadv-pwritev
 preadv2-pwritev2
+printpath-umovestr
+printpath-umovestr-peekdata
+printpath-umovestr-undumpable
 printstr
+printstrn-umoven
+printstrn-umoven-peekdata
+printstrn-umoven-undumpable
 prlimit64
 process_vm_readv
 process_vm_writev
@@ -287,6 +320,9 @@
 sigprocmask
 sigreturn
 sigsuspend
+so_linger
+so_peercred
+sock_filter-v
 socketcall
 splice
 stat
diff --git a/tests-mx32/qual_inject-syntax.test b/tests-mx32/qual_inject-syntax.test
index a9e44d7..7aa6180 100755
--- a/tests-mx32/qual_inject-syntax.test
+++ b/tests-mx32/qual_inject-syntax.test
@@ -103,6 +103,8 @@
 	   chdir:retval=-1 \
 	   chdir:signal=0 \
 	   chdir:signal=129 \
+	   chdir:signal=1:signal=2 \
+	   chdir:signal=1:retval=0:signal=2 \
 	   chdir:retval=0:retval=1 \
 	   chdir:error=1:error=2 \
 	   chdir:retval=0:error=1 \
diff --git a/tests-mx32/quotactl.h b/tests-mx32/quotactl.h
index d3cf53b..352f927 100644
--- a/tests-mx32/quotactl.h
+++ b/tests-mx32/quotactl.h
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/readv.c b/tests-mx32/readv.c
index 93f0760..8430ca5 100644
--- a/tests-mx32/readv.c
+++ b/tests-mx32/readv.c
@@ -2,6 +2,7 @@
  * Check decoding of readv and writev syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/recvmsg.c b/tests-mx32/recvmsg.c
index 2d55d55..d2a67d4 100644
--- a/tests-mx32/recvmsg.c
+++ b/tests-mx32/recvmsg.c
@@ -2,6 +2,7 @@
  * Check decoding of recvmsg and sendmsg syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/request_key.c b/tests-mx32/request_key.c
index 03c7a42..866fe76 100644
--- a/tests-mx32/request_key.c
+++ b/tests-mx32/request_key.c
@@ -2,6 +2,7 @@
  * Check decoding of request_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/rt_sigaction.awk b/tests-mx32/rt_sigaction.awk
index 9c3a9ed..9fb3ed5 100644
--- a/tests-mx32/rt_sigaction.awk
+++ b/tests-mx32/rt_sigaction.awk
@@ -2,6 +2,7 @@
 #
 # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
 # Copyright (c) 2016 Elvira Khabirova <lineprinter0@gmail.com>
+# Copyright (c) 2016-2017 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/rt_sigaction.c b/tests-mx32/rt_sigaction.c
index 1c034ff..9c367b2 100644
--- a/tests-mx32/rt_sigaction.c
+++ b/tests-mx32/rt_sigaction.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/run.sh b/tests-mx32/run.sh
index 02d9912..d1b796c 100755
--- a/tests-mx32/run.sh
+++ b/tests-mx32/run.sh
@@ -5,7 +5,7 @@
 $STRACE -V > /dev/null ||
 	framework_failure_ "$STRACE is not available"
 
-TIMEOUT="timeout -s 9 $TIMEOUT_DURATION"
+TIMEOUT="timeout -k 5 -s XCPU $TIMEOUT_DURATION"
 $TIMEOUT true > /dev/null 2>&1 ||
 	TIMEOUT=
 
diff --git a/tests-mx32/scno_tampering.sh b/tests-mx32/scno_tampering.sh
index 094175e..282f2f3 100755
--- a/tests-mx32/scno_tampering.sh
+++ b/tests-mx32/scno_tampering.sh
@@ -51,9 +51,16 @@
 	mips)
 		# Only the native ABI is supported by the kernel properly, see
 		# https://sourceforge.net/p/strace/mailman/message/35587571/
+		msg_prefix="mips $MIPS_ABI scno tampering does not work"
 		uname_m="$(uname -m)"
 		case "$MIPS_ABI:$uname_m" in
-			o32:mips|n64:mips64) ;;
-			*) skip_ "$MIPS_ABI scno tampering does not work on $uname_m yet" ;;
+			n64:mips64) ;;
+			o32:mips)
+				# is it really mips32?
+				if ../is_linux_mips_n64; then
+					skip_ "$msg_prefix on mips n64 yet"
+				fi
+				;;
+			*) skip_ "$msg_prefix on $uname_m yet" ;;
 		esac ;;
 esac
diff --git a/tests-mx32/seccomp-filter-v.c b/tests-mx32/seccomp-filter-v.c
index f65be7d..e419c6c 100644
--- a/tests-mx32/seccomp-filter-v.c
+++ b/tests-mx32/seccomp-filter-v.c
@@ -42,9 +42,7 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-#endif
+#include <linux/filter.h>
 
 #if defined __NR_seccomp \
  && defined PR_SET_NO_NEW_PRIVS \
@@ -91,10 +89,6 @@
 	SOCK_FILTER_KILL_PROCESS
 };
 
-#ifndef BPF_MAXINSNS
-# define BPF_MAXINSNS 4096
-#endif
-
 int
 main(void)
 {
diff --git a/tests-mx32/seccomp-filter.c b/tests-mx32/seccomp-filter.c
index e2bea06..6e00982 100644
--- a/tests-mx32/seccomp-filter.c
+++ b/tests-mx32/seccomp-filter.c
@@ -37,9 +37,7 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-#endif
+#include <linux/filter.h>
 
 #if defined __NR_seccomp && defined SECCOMP_SET_MODE_FILTER
 
diff --git a/tests-mx32/sigaction.c b/tests-mx32/sigaction.c
index 7b46944..58ddda9 100644
--- a/tests-mx32/sigaction.c
+++ b/tests-mx32/sigaction.c
@@ -85,20 +85,26 @@
 }
 
 #if defined SPARC || defined SPARC64
-static const kernel_ulong_t signo =
-	(kernel_ulong_t) 0xbadc0ded00000000ULL | (unsigned int) -SIGUSR1;
+/*
+ * See arch/sparc/kernel/sys_sparc_32.c:sys_sparc_sigaction
+ * and arch/sparc/kernel/sys_sparc32.c:compat_sys_sparc_sigaction
+ */
+# define ADDR_INT ((unsigned int) -0xdefaced)
+# define SIGNO_INT ((unsigned int) -SIGUSR1)
 # define SIG_STR "-SIGUSR1"
 #else
-static const kernel_ulong_t signo =
-	(kernel_ulong_t) 0xbadc0ded00000000ULL | SIGUSR1;
+# define ADDR_INT ((unsigned int) 0xdefaced)
+# define SIGNO_INT ((unsigned int) SIGUSR1)
 # define SIG_STR "SIGUSR1"
 #endif
+static const kernel_ulong_t signo =
+	(kernel_ulong_t) 0xbadc0ded00000000ULL | SIGNO_INT;
+static const kernel_ulong_t addr =
+	(kernel_ulong_t) 0xfacefeed00000000ULL | ADDR_INT;
 
 int
 main(void)
 {
-	static const kernel_ulong_t addr =
-		(kernel_ulong_t) 0xfacefeed0defacedULL;
 	union {
 		sigset_t libc[1];
 		unsigned long old[1];
@@ -131,7 +137,7 @@
 	       (unsigned long) old_act + 2);
 
 	k_sigaction(addr, 0, 0);
-	printf("sigaction(%d, NULL, NULL) = -1 EINVAL (%m)\n", (int) addr);
+	printf("sigaction(%d, NULL, NULL) = -1 EINVAL (%m)\n", ADDR_INT);
 
 	memset(new_act, 0, sizeof(*new_act));
 
diff --git a/tests-mx32/so_linger.c b/tests-mx32/so_linger.c
new file mode 100644
index 0000000..4dc994b
--- /dev/null
+++ b/tests-mx32/so_linger.c
@@ -0,0 +1,136 @@
+/*
+ * Check decoding of SO_LINGER socket option.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <sys/socket.h>
+#include <unistd.h>
+
+static const char *errstr;
+
+static int
+get_linger(int fd, void *val, socklen_t *len)
+{
+	int rc = getsockopt(fd, SOL_SOCKET, SO_LINGER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static int
+set_linger(int fd, void *val, socklen_t len)
+{
+	int rc = setsockopt(fd, SOL_SOCKET, SO_LINGER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct linger, linger);
+	TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+        int fd = socket(AF_UNIX, SOCK_STREAM, 0);
+        if (fd < 0)
+                perror_msg_and_skip("socket AF_UNIX SOCK_STREAM");
+
+	/* classic getsockopt */
+	*len = sizeof(*linger);
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", [%d]) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger, *len, errstr);
+
+	/* classic setsockopt */
+	linger->l_onoff = -15;
+	linger->l_linger = -42;
+	set_linger(fd, linger, sizeof(*linger));
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", %d) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger,
+	       (unsigned int) sizeof(*linger), errstr);
+
+	/* setsockopt with optlen larger than necessary */
+	set_linger(fd, linger, sizeof(*linger) + 1);
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", %d) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger,
+	       (unsigned int) sizeof(*linger) + 1, errstr);
+
+	/* setsockopt with optlen < 0 - EINVAL */
+	set_linger(fd, linger, -1U);
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, %p, -1) = %s\n",
+	       fd, linger, errstr);
+
+	/* setsockopt with optlen smaller than necessary - EINVAL */
+	set_linger(fd, linger, sizeof(linger->l_onoff));
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, %p, %d) = %s\n",
+	       fd, linger, (unsigned int) sizeof(linger->l_onoff), errstr);
+
+	/* setsockopt optval EFAULT */
+	set_linger(fd, &linger->l_linger, sizeof(*linger));
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, %p, %d) = %s\n",
+	       fd, &linger->l_linger, (unsigned int) sizeof(*linger), errstr);
+
+	/* getsockopt with optlen larger than necessary - shortened */
+	*len = sizeof(*linger) + 1;
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", [%u->%d]) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger,
+	       (unsigned int) sizeof(*linger) + 1, *len, errstr);
+
+	/* getsockopt with optlen larger than usual - truncated to l_onoff */
+	*len = sizeof(linger->l_onoff);
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d}"
+	       ", [%d]) = %s\n",
+	       fd, linger->l_onoff, *len, errstr);
+
+	/* getsockopt with optlen larger than usual - truncated to raw */
+	*len = sizeof(*linger) - 1;
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, ", fd);
+	print_quoted_hex(linger, *len);
+	printf(", [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt optval EFAULT */
+	*len = sizeof(*linger);
+	get_linger(fd, &linger->l_linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, %p, [%d]) = %s\n",
+	       fd, &linger->l_linger, *len, errstr);
+
+	/* getsockopt optlen EFAULT */
+	get_linger(fd, linger, len + 1);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, %p, %p) = %s\n",
+	       fd, linger, len + 1, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/so_linger.gen.test b/tests-mx32/so_linger.gen.test
new file mode 100755
index 0000000..8362163
--- /dev/null
+++ b/tests-mx32/so_linger.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_linger -e trace=getsockopt,setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt,setsockopt
diff --git a/tests-mx32/so_peercred.c b/tests-mx32/so_peercred.c
new file mode 100644
index 0000000..53bf071
--- /dev/null
+++ b/tests-mx32/so_peercred.c
@@ -0,0 +1,117 @@
+/*
+ * Check decoding of SO_PEERCRED socket option.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include <unistd.h>
+
+#include "print_fields.h"
+
+static const char *errstr;
+
+static int
+get_peercred(int fd, void *val, socklen_t *len)
+{
+	int rc = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ucred, peercred);
+	TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+
+	int sv[2];
+	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sv))
+                perror_msg_and_skip("socketpair AF_UNIX SOCK_STREAM");
+
+	/* classic getsockopt */
+	*len = sizeof(*peercred);
+	get_peercred(sv[0], peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", sv[0]);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	PRINT_FIELD_UID(", ", *peercred, uid);
+	PRINT_FIELD_UID(", ", *peercred, gid);
+	printf("}, [%d]) = %s\n", *len, errstr);
+
+	int fd = socket(AF_UNIX, SOCK_STREAM, 0);
+	if (fd < 0)
+		perror_msg_and_skip("socket AF_UNIX SOCK_STREAM");
+
+	/* getsockopt with optlen larger than necessary - shortened */
+	*len = sizeof(*peercred) + 1;
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	PRINT_FIELD_UID(", ", *peercred, uid);
+	PRINT_FIELD_UID(", ", *peercred, gid);
+	printf("}, [%u->%d]) = %s\n",
+	       (unsigned int) sizeof(*peercred) + 1, *len, errstr);
+
+	/* getsockopt with optlen smaller than usual - truncated to ucred.pid */
+	*len = sizeof(peercred->pid);
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	printf("}, [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt with optlen smaller than usual - truncated to ucred.uid */
+	*len = offsetof(struct ucred, gid);
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	PRINT_FIELD_UID(", ", *peercred, uid);
+	printf("}, [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt with optlen larger than usual - truncated to raw */
+	*len = sizeof(*peercred) - 1;
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED, ", fd);
+	print_quoted_hex(peercred, *len);
+	printf(", [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt optval EFAULT */
+	*len = sizeof(*peercred);
+	get_peercred(fd, &peercred->uid, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED, %p, [%d]) = %s\n",
+	       fd, &peercred->uid, *len, errstr);
+
+	/* getsockopt optlen EFAULT */
+	get_peercred(fd, peercred, len + 1);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED, %p, %p) = %s\n",
+	       fd, peercred, len + 1, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/so_peercred.gen.test b/tests-mx32/so_peercred.gen.test
new file mode 100755
index 0000000..02eb479
--- /dev/null
+++ b/tests-mx32/so_peercred.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred -e trace=getsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt
diff --git a/tests-mx32/sock_filter-v.c b/tests-mx32/sock_filter-v.c
new file mode 100644
index 0000000..16d5c1c
--- /dev/null
+++ b/tests-mx32/sock_filter-v.c
@@ -0,0 +1,181 @@
+/*
+ * Check decoding of socket filters.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <unistd.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <linux/filter.h>
+
+#define PRINT_STMT_SYM(pfx, code, k)	PRINT_STMT_SYM_(pfx, #code, #k)
+#define PRINT_STMT_SYM_(pfx, code, k)	\
+	printf("%sBPF_STMT(%s, %s)", pfx, code, k)
+#define PRINT_STMT_VAL(pfx, code, k)	PRINT_STMT_VAL_(pfx, #code, k)
+#define PRINT_STMT_VAL_(pfx, code, k)	\
+	printf("%sBPF_STMT(%s, %#x)", pfx, code, k)
+
+#define PRINT_JUMP(pfx, code, k, jt, jf)	PRINT_JUMP_(pfx, #code, k, jt, jf)
+#define PRINT_JUMP_(pfx, code, k, jt, jf)	\
+	printf("%sBPF_JUMP(%s, %#x, %#x, %#x)", pfx, code, k, jt, jf)
+
+static const struct sock_filter bpf_filter[] = {
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_LL_OFF+4),
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_NET_OFF+8),
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF+SKF_AD_PROTOCOL),
+	BPF_JUMP(BPF_JMP|BPF_K|BPF_JEQ, IPPROTO_UDP, 0, 5),
+	BPF_STMT(BPF_LD|BPF_W|BPF_LEN, 0),
+	BPF_JUMP(BPF_JMP|BPF_K|BPF_JGE, 100, 0, 3),
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, 42),
+	BPF_JUMP(BPF_JMP|BPF_K|BPF_JEQ, 'a', 0, 1),
+	BPF_STMT(BPF_RET|BPF_K, -1U),
+	BPF_STMT(BPF_RET|BPF_K, 0)
+};
+
+static void
+print_filter(void)
+{
+	PRINT_STMT_SYM("[", BPF_LD|BPF_B|BPF_ABS, SKF_LL_OFF+4);
+	PRINT_STMT_SYM(", ", BPF_LD|BPF_B|BPF_ABS, SKF_NET_OFF+8);
+	PRINT_STMT_SYM(", ", BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF+SKF_AD_PROTOCOL);
+	PRINT_JUMP(", ", BPF_JMP|BPF_K|BPF_JEQ, IPPROTO_UDP, 0, 5);
+	PRINT_STMT_VAL(", ", BPF_LD|BPF_W|BPF_LEN, 0);
+	PRINT_JUMP(", ", BPF_JMP|BPF_K|BPF_JGE, 100, 0, 3);
+	PRINT_STMT_VAL(", ", BPF_LD|BPF_B|BPF_ABS, 42);
+	PRINT_JUMP(", ", BPF_JMP|BPF_K|BPF_JEQ, 'a', 0, 1);
+	PRINT_STMT_VAL(", ", BPF_RET|BPF_K, -1U);
+	PRINT_STMT_VAL(", ", BPF_RET|BPF_K, 0);
+	putchar(']');
+}
+
+static const char *errstr;
+
+static int
+get_filter(int fd, void *val, socklen_t *len)
+{
+	int rc = getsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static int
+set_filter(int fd, void *val, socklen_t len)
+{
+	int rc = setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	int rc;
+	struct sock_filter *const filter =
+		tail_memdup(bpf_filter, sizeof(bpf_filter));
+	void *const efault = filter + ARRAY_SIZE(bpf_filter);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct sock_fprog, prog);
+	TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+
+	prog->len = ARRAY_SIZE(bpf_filter);
+	prog->filter = filter;
+
+	int fd = socket(AF_INET, SOCK_DGRAM, 0);
+	if (fd < 0)
+		perror_msg_and_skip("socket AF_INET SOCK_DGRAM");
+
+	/* query sock_filter program length -> 0 */
+	*len = BPF_MAXINSNS;
+	rc = get_filter(fd, NULL, len);
+	if (rc)
+		perror_msg_and_skip("getsockopt SOL_SOCKET SO_ATTACH_FILTER");
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER"
+	       ", NULL, [%u->0]) = 0\n", fd, BPF_MAXINSNS);
+
+	/* getsockopt NULL optlen - EFAULT */
+	rc = get_filter(fd, NULL, NULL);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, NULL, NULL)"
+	       " = %s\n", fd, errstr);
+
+	/* attach a filter */
+	rc = set_filter(fd, prog, sizeof(*prog));
+	if (rc)
+		perror_msg_and_skip("setsockopt SOL_SOCKET SO_ATTACH_FILTER");
+	printf("setsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, {len=%u, filter=",
+	       fd, prog->len);
+	print_filter();
+	printf("}, %u) = 0\n", (unsigned int) sizeof(*prog));
+
+	/* setsockopt optlen is too small - EINVAL */
+	rc = set_filter(fd, prog, sizeof(*prog) - 4);
+	printf("setsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p, %u) = %s\n",
+	       fd, prog, (unsigned int) sizeof(*prog) - 4, errstr);
+
+#ifdef SO_ATTACH_REUSEPORT_CBPF
+	rc = setsockopt(fd, SOL_SOCKET, SO_ATTACH_REUSEPORT_CBPF,
+			prog, sizeof(*prog));
+	errstr = sprintrc(rc);
+	printf("setsockopt(%d, SOL_SOCKET, SO_ATTACH_REUSEPORT_CBPF"
+	       ", {len=%u, filter=", fd, prog->len);
+	print_filter();
+	printf("}, %u) = %s\n", (unsigned int) sizeof(*prog), errstr);
+#endif
+
+	/* query sock_filter program length -> ARRAY_SIZE(bpf_filter) */
+	*len = 0;
+	rc = get_filter(fd, efault, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p"
+	       ", [0->%u]) = %s\n",
+	       fd, efault, (unsigned int) ARRAY_SIZE(bpf_filter), errstr);
+
+	/* getsockopt optlen is too small - EINVAL */
+	*len = ARRAY_SIZE(bpf_filter) - 1;
+	rc = get_filter(fd, efault, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p"
+	       ", [%u]) = %s\n",
+	       fd, efault, (unsigned int) ARRAY_SIZE(bpf_filter) - 1, errstr);
+
+	/* getsockopt optval EFAULT */
+	*len = ARRAY_SIZE(bpf_filter);
+	rc = get_filter(fd, filter + 1, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p"
+	       ", [%u]) = %s\n", fd, filter + 1,
+	       (unsigned int) ARRAY_SIZE(bpf_filter), errstr);
+
+	/* getsockopt optlen is too large - truncated */
+	*len = ARRAY_SIZE(bpf_filter) + 1;
+	rc = get_filter(fd, filter, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, ", fd);
+	print_filter();
+	printf(", [%u->%d]) = %s\n",
+	       (unsigned int) ARRAY_SIZE(bpf_filter) + 1, *len, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/sock_filter-v.gen.test b/tests-mx32/sock_filter-v.gen.test
new file mode 100755
index 0000000..611c2de
--- /dev/null
+++ b/tests-mx32/sock_filter-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v -v -e trace=getsockopt,setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -v -e trace=getsockopt,setsockopt
diff --git a/tests-mx32/strace-V.test b/tests-mx32/strace-V.test
index 8db1395..ec1ca05 100755
--- a/tests-mx32/strace-V.test
+++ b/tests-mx32/strace-V.test
@@ -8,24 +8,48 @@
 
 run_strace -V > "$LOG"
 
-getval()
+getstr()
 {
 	sed -r -n 's/#define[[:space:]]*'"$1"'[[:space:]]*"([^"]*)".*/\1/p' \
 		../../config.h
 }
 
-config_year=$(getval COPYRIGHT_YEAR)
+# getoption OPTION YES_STRING [NO_STRING]
+#
+# Returns YES_STRING in case OPTION is enabled (present in config.h and has
+# a non-zero numeric value). Otherwise, NO_STRING (or empty string, if not
+# specified) is returned.
+getoption()
+{
+	local opt
+	opt=$(sed -r -n 's/#define[[:space:]]*'"$1"'[[:space:]]*([0-9]+)$/\1/p' \
+		../../config.h)
+	if [ -n "$opt" -a "$opt" -ne 0 ]; then
+		printf "%s" "$2"
+	else
+		printf "%s" "${3-}"
+	fi
+}
+
+config_year=$(getstr COPYRIGHT_YEAR)
 
 [ "$year" -ge "$config_year" ] && [ "$config_year" -ge 2017 ] || {
 	echo >&2 "The year derived from config.h (${config_year}) does not pass sanity checks."
 	exit 1
 }
 
+option_unwind=$(getoption USE_LIBUNWIND " stack-unwind")
+
+features="${option_unwind}"
+[ -n "$features" ] || features=" (none)"
+
 cat > "$EXP" << __EOF__
-$(getval PACKAGE_NAME) -- version $(getval PACKAGE_VERSION)
-Copyright (c) 1991-${config_year} The strace developers <$(getval PACKAGE_URL)>.
+$(getstr PACKAGE_NAME) -- version $(getstr PACKAGE_VERSION)
+Copyright (c) 1991-${config_year} The strace developers <$(getstr PACKAGE_URL)>.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Optional features enabled:${features}
 __EOF__
 
 match_diff "$LOG" "$EXP"
diff --git a/tests-mx32/strace-ff.test b/tests-mx32/strace-ff.test
index 7107527..6141814 100755
--- a/tests-mx32/strace-ff.test
+++ b/tests-mx32/strace-ff.test
@@ -7,7 +7,7 @@
 run_prog_skip_if_failed \
 	kill -0 $$
 
-../set_ptracer_any ../sleep 1 > "$OUT" &
+../set_ptracer_any ../sleep 3 > "$OUT" &
 tracee_pid=$!
 
 while ! [ -s "$OUT" ]; do
diff --git a/tests-mx32/strace-t.test b/tests-mx32/strace-t.test
index 38070f3..73303ae 100755
--- a/tests-mx32/strace-t.test
+++ b/tests-mx32/strace-t.test
@@ -4,15 +4,26 @@
 
 . "${srcdir=.}/init.sh"
 
-run_prog_skip_if_failed date +%T > /dev/null
+run_prog_skip_if_failed date +%s > "$LOG"
+run_prog_skip_if_failed date +%T --date "@$(cat "$LOG")" > /dev/null
 run_prog ../sleep 0
 
-t0="$(date +%T)"
+s0="$(date +%s)"
 run_strace -t -eexecve $args
-t1="$(date +%T)"
+s1="$(date +%s)"
+
+s="$s0"
+t_reg=
+while [ "$s" -le "$s1" ]; do
+	t="$(date +%T --date "@$s")"
+	[ -z "$t_reg" ] && t_reg="$t" || t_reg="$t_reg|$t"
+	s=$(($s + 1))
+done
+t_reg="($t_reg)"
 
 cat > "$EXP" << __EOF__
-($t0|$t1) execve\\("\\.\\./sleep", \\["\\.\\./sleep", "0"\\], 0x[[:xdigit:]]* /\\* [[:digit:]]* vars \\*/\\) = 0
+$t_reg execve\\("\\.\\./sleep", \\["\\.\\./sleep", "0"\\], 0x[[:xdigit:]]* /\\* [[:digit:]]* vars \\*/\\) = 0
+$t_reg \\+\\+\\+ exited with 0 \\+\\+\\+
 __EOF__
 
 match_grep "$LOG" "$EXP"
diff --git a/tests-mx32/strace.supp b/tests-mx32/strace.supp
index 578b0a2..248a471 100644
--- a/tests-mx32/strace.supp
+++ b/tests-mx32/strace.supp
@@ -5,3 +5,13 @@
    fun:sched_getaffinity*
    fun:get_cpuset_size
 }
+
+{
+   qualify_tokens: memleak before error_msg_and_die
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:malloc
+   fun:strdup
+   fun:xstrdup
+   fun:qualify_tokens
+}
diff --git a/tests-mx32/syntax.sh b/tests-mx32/syntax.sh
new file mode 100644
index 0000000..0a0d2a5
--- /dev/null
+++ b/tests-mx32/syntax.sh
@@ -0,0 +1,81 @@
+#!/bin/sh
+#
+# Define syntax testing primitives.
+#
+# Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2016-2017 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+check_exit_status_and_stderr()
+{
+	$STRACE "$@" 2> "$LOG" &&
+		dump_log_and_fail_with \
+			"strace $* failed to handle the error properly"
+	match_diff "$LOG" "$EXP" ||
+		dump_log_and_fail_with \
+			"strace $* failed to print expected diagnostics"
+}
+
+check_exit_status_and_stderr_using_grep()
+{
+	$STRACE "$@" 2> "$LOG" &&
+		dump_log_and_fail_with \
+			"strace $* failed to handle the error properly"
+	match_grep "$LOG" "$EXP" ||
+		dump_log_and_fail_with \
+			"strace $* failed to print expected diagnostics"
+}
+
+strace_exp="${STRACE##* }"
+
+check_e()
+{
+	local pattern="$1"; shift
+	cat > "$EXP" << __EOF__
+$strace_exp: $pattern
+__EOF__
+	check_exit_status_and_stderr "$@"
+}
+
+check_e_using_grep()
+{
+	local pattern="$1"; shift
+	cat > "$EXP" << __EOF__
+$strace_exp: $pattern
+__EOF__
+	check_exit_status_and_stderr_using_grep "$@"
+}
+
+check_h()
+{
+	local pattern="$1"; shift
+	cat > "$EXP" << __EOF__
+$strace_exp: $pattern
+Try '$strace_exp -h' for more information.
+__EOF__
+	check_exit_status_and_stderr "$@"
+}
diff --git a/tests-mx32/test_netlink.h b/tests-mx32/test_netlink.h
new file mode 100644
index 0000000..f509e18
--- /dev/null
+++ b/tests-mx32/test_netlink.h
@@ -0,0 +1,97 @@
+#include "tests.h"
+#include "print_fields.h"
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/socket.h>
+#include "netlink.h"
+
+#define TEST_NETLINK_(fd_, nlh0_,					\
+		      type_, type_str_,					\
+		      flags_, flags_str_,				\
+		      data_len_, src_, slen_, ...)			\
+	do {								\
+		struct nlmsghdr *const TEST_NETLINK_nlh =		\
+			(nlh0_) - (slen_);				\
+		const unsigned int msg_len =				\
+			NLMSG_HDRLEN + (data_len_);			\
+									\
+		SET_STRUCT(struct nlmsghdr, TEST_NETLINK_nlh,		\
+			.nlmsg_len = msg_len,				\
+			.nlmsg_type = (type_),				\
+			.nlmsg_flags = (flags_)				\
+		);							\
+		memcpy(NLMSG_DATA(TEST_NETLINK_nlh), (src_), (slen_));	\
+									\
+		const char *const errstr =				\
+			sprintrc(sendto((fd_), TEST_NETLINK_nlh,	\
+					msg_len, MSG_DONTWAIT,		\
+					NULL, 0));			\
+									\
+		printf("sendto(%d, {{len=%u, type=%s"			\
+		       ", flags=%s, seq=0, pid=0}, ",			\
+		       (fd_), msg_len, (type_str_), (flags_str_));	\
+									\
+		{ __VA_ARGS__; }					\
+									\
+		printf("}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",		\
+		       msg_len, errstr);				\
+	} while (0)
+
+#define TEST_NETLINK(fd_, nlh0_, type_, flags_,				\
+		     data_len_, src_, slen_, ...)			\
+	TEST_NETLINK_((fd_), (nlh0_),					\
+		      (type_), #type_,					\
+		      (flags_), #flags_,				\
+		      (data_len_), (src_), (slen_), __VA_ARGS__)
+
+#define TEST_NETLINK_OBJECT_EX_(fd_, nlh0_,				\
+				type_, type_str_,			\
+				flags_, flags_str_,			\
+				obj_, fallback_func, ...)		\
+	do {								\
+		char pattern[DEFAULT_STRLEN];				\
+		fill_memory_ex(pattern, sizeof(pattern),		\
+			       'a', 'z' - 'a' + 1);			\
+		const unsigned int plen =				\
+			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
+			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
+		/* len < sizeof(obj_) */				\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      (type_), (type_str_),			\
+			      (flags_), (flags_str_),			\
+			      plen, pattern, plen,			\
+			      (fallback_func)(pattern, plen));		\
+		/* short read of sizeof(obj_) */			\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      (type_), (type_str_),			\
+			      (flags_), (flags_str_),			\
+			      sizeof(obj_),				\
+			      pattern, plen,				\
+			      printf("%p",				\
+				     NLMSG_DATA(TEST_NETLINK_nlh)));	\
+		/* sizeof(obj_) */					\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      (type_), (type_str_),			\
+			      (flags_), (flags_str_),			\
+			      sizeof(obj_),				\
+			      &(obj_), sizeof(obj_),			\
+			      __VA_ARGS__);				\
+	} while (0)
+
+#define TEST_NETLINK_OBJECT_EX(fd_, nlh0_,				\
+			       type_, flags_,				\
+			       obj_, fallback_func, ...)		\
+	TEST_NETLINK_OBJECT_EX_((fd_), (nlh0),				\
+				(type_), #type_,			\
+				(flags_), #flags_,			\
+				(obj_), (fallback_func), __VA_ARGS__)
+
+#define TEST_NETLINK_OBJECT(fd_, nlh0_,					\
+			    type_, flags_,				\
+			    obj_, ...)					\
+	TEST_NETLINK_OBJECT_EX_((fd_), (nlh0),				\
+				(type_), #type_,			\
+				(flags_), #flags_,			\
+				(obj_), print_quoted_hex, __VA_ARGS__)
diff --git a/tests-mx32/test_nlattr.h b/tests-mx32/test_nlattr.h
index 8cbb211..048d547 100644
--- a/tests-mx32/test_nlattr.h
+++ b/tests-mx32/test_nlattr.h
@@ -29,6 +29,7 @@
 #include "print_fields.h"
 
 #include <stdio.h>
+#include <stdint.h>
 #include <string.h>
 #include <sys/socket.h>
 #include "netlink.h"
@@ -62,14 +63,15 @@
 	do {								\
 		struct nlmsghdr *const nlh =				\
 			(nlh0_) - (NLA_HDRLEN + (slen_));		\
-		struct nlattr *const nla = NLMSG_ATTR(nlh, (hdrlen_));	\
+		struct nlattr *const TEST_NLATTR_nla =			\
+			NLMSG_ATTR(nlh, (hdrlen_));			\
 		const unsigned int nla_len =				\
 			NLA_HDRLEN + (nla_data_len_);			\
 		const unsigned int msg_len =				\
 			NLMSG_SPACE(hdrlen_) + nla_len;			\
 									\
 		(init_msg_)(nlh, msg_len);				\
-		init_nlattr(nla, nla_len, (nla_type_),			\
+		init_nlattr(TEST_NLATTR_nla, nla_len, (nla_type_),	\
 			   (src_), (slen_));				\
 									\
 		const char *const errstr =				\
@@ -95,23 +97,24 @@
 		(nla_type_), #nla_type_,				\
 		(nla_data_len_), (src_), (slen_), __VA_ARGS__)
 
-#define TEST_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,				\
-			   init_msg_, print_msg_,			\
-			   nla_type_, pattern_, obj_, ...)		\
+#define TEST_NLATTR_OBJECT_EX_(fd_, nlh0_, hdrlen_,			\
+			       init_msg_, print_msg_,			\
+			       nla_type_, nla_type_str_,		\
+			       pattern_, obj_, fallback_func, ...)	\
 	do {								\
-		const int plen = sizeof(obj_) - 1 > DEFAULT_STRLEN	\
+		const unsigned int plen =				\
+			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
 			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
 		/* len < sizeof(obj_) */				\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
-			(nla_type_), #nla_type_,			\
-			sizeof(obj_) - 1,				\
-			(pattern_), sizeof(obj_) - 1,			\
-			printf("\"%.*s\"", plen, (pattern_)));		\
+			(nla_type_), (nla_type_str_),			\
+			plen, (pattern_), plen,				\
+			(fallback_func)((pattern_), plen));		\
 		/* short read of sizeof(obj_) */			\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
-			(nla_type_), #nla_type_,			\
+			(nla_type_), (nla_type_str_),			\
 			sizeof(obj_),					\
 			(pattern_), sizeof(obj_) - 1,			\
 			printf("%p",					\
@@ -119,26 +122,44 @@
 		/* sizeof(obj_) */					\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
-			(nla_type_), #nla_type_,			\
+			(nla_type_), (nla_type_str_),			\
 			sizeof(obj_),					\
 			&(obj_), sizeof(obj_),				\
 			__VA_ARGS__);					\
 	} while (0)
 
+#define TEST_NLATTR_OBJECT_EX(fd_, nlh0_, hdrlen_,			\
+			      init_msg_, print_msg_,			\
+			      nla_type_,				\
+			      pattern_, obj_, fallback_func, ...)	\
+	TEST_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),		\
+			       (init_msg_), (print_msg_),		\
+			       (nla_type_), #nla_type_,			\
+			       (pattern_), (obj_), (fallback_func),	\
+			       __VA_ARGS__)
+
+#define TEST_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,				\
+			   init_msg_, print_msg_,			\
+			   nla_type_, pattern_, obj_, ...)		\
+	TEST_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),		\
+			       (init_msg_), (print_msg_),		\
+			       (nla_type_), #nla_type_,			\
+			       (pattern_), (obj_), print_quoted_hex,	\
+			       __VA_ARGS__)
+
 #define TEST_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,				\
 			  init_msg_, print_msg_,			\
 			  nla_type_, pattern_, obj_, print_elem_)	\
 	do {								\
-		const int plen =					\
+		const unsigned int plen =				\
 			sizeof((obj_)[0]) - 1 > DEFAULT_STRLEN		\
 			? DEFAULT_STRLEN : (int) sizeof((obj_)[0]) - 1;	\
 		/* len < sizeof((obj_)[0]) */				\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
-			sizeof((obj_)[0]) - 1,				\
-			(pattern_), sizeof((obj_)[0]) - 1,		\
-			printf("\"%.*s\"", plen, (pattern_)));		\
+			plen, (pattern_), plen,				\
+			print_quoted_hex((pattern_), plen));		\
 		/* sizeof((obj_)[0]) < len < sizeof(obj_) */		\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
@@ -181,3 +202,38 @@
 			}						\
 			printf("]"));					\
 	} while (0)
+
+#define TEST_NESTED_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,			\
+				  init_msg_, print_msg_,		\
+				  nla_type_, pattern_, obj_, ...)	\
+	do {								\
+		const unsigned int plen =				\
+			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
+			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
+		/* len < sizeof(obj_) */				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			plen, (pattern_), plen,				\
+			print_quoted_hex((pattern_), plen);		\
+			printf("}"));					\
+		/* short read of sizeof(obj_) */			\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			sizeof(obj_),					\
+			(pattern_), sizeof(obj_) - 1,			\
+			printf("%p}",					\
+			       RTA_DATA(TEST_NLATTR_nla)));		\
+		/* sizeof(obj_) */					\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			sizeof(obj_),					\
+			&(obj_), sizeof(obj_),				\
+			__VA_ARGS__,					\
+			printf("}"));					\
+	} while (0)
diff --git a/tests-mx32/test_printpath.c b/tests-mx32/test_printpath.c
new file mode 100644
index 0000000..5f482f2
--- /dev/null
+++ b/tests-mx32/test_printpath.c
@@ -0,0 +1,110 @@
+/*
+ * Test printpath/umovestr.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/param.h>
+
+#include "test_ucopy.h"
+
+static void
+test_printpath_at(char *const p, const unsigned int test_max)
+{
+	/*
+	 *       /
+	 *      /.
+	 *     /..
+	 *    /...
+	 *   /../.
+	 *  /../..
+	 * /../../
+	 */
+
+	char *const eop = p + (test_max - 1);
+	*eop = '\0';
+	unsigned int i;
+	for (i = 1; i < test_max; ++i) {
+		const unsigned int i_1 = i - 1;
+		memmove(eop - i, eop - i_1, i_1);
+		eop[-1] = "/.."[i_1 % 3];
+		if (chdir(eop - i))
+			perror_msg_and_fail("chdir");
+		printf("chdir(\"%s\") = 0\n", eop - i);
+	}
+}
+
+static void
+test_efault(const unsigned int test_max)
+{
+	char *p = tail_alloc(test_max);
+	const char *const efault = p + test_max;
+	memset(p, '/', test_max);
+
+	for (; p <= efault; ++p) {
+		if (p <= efault - PATH_MAX)
+			continue;
+		printf("chdir(%p) = %s\n", p, sprintrc(chdir(p)));
+	}
+}
+
+static void
+test_enametoolong(void)
+{
+	char *p = tail_alloc(PATH_MAX);
+	memset(p, '/', PATH_MAX);
+
+	printf("chdir(\"%.*s\"...) = %s\n",
+	       PATH_MAX - 1, p, sprintrc(chdir(p)));
+}
+
+void
+test_printpath(const unsigned int test_max)
+{
+	/*
+	 * /../..|
+	 * /../.|.
+	 * /../|..
+	 * /..|/..
+	 * /.|./..
+	 * /|../..
+	 * |/../..
+	 */
+	const unsigned int page_size = get_page_size();
+	char *p = tail_alloc(test_max + page_size);
+	unsigned int i;
+	for (i = 1; i < sizeof(long); ++i)
+		test_printpath_at(p + i, test_max);
+	for (i = 0; i < sizeof(long); ++i)
+		test_printpath_at(p + page_size - i, test_max);
+	test_efault(test_max);
+	test_enametoolong();
+}
diff --git a/tests-mx32/test_printstrn.c b/tests-mx32/test_printstrn.c
new file mode 100644
index 0000000..bc9c775
--- /dev/null
+++ b/tests-mx32/test_printstrn.c
@@ -0,0 +1,102 @@
+/*
+ * Test printstrn/umoven.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <asm/unistd.h>
+
+#include "scno.h"
+#include "test_ucopy.h"
+
+static const char *errstr;
+
+static void add_key(const char *addr, const unsigned int len)
+{
+	errstr = sprintrc(syscall(__NR_add_key, 0, 0, addr, len, -1));
+}
+
+static void
+test_printstrn_at(char *const p, const unsigned int test_max)
+{
+	unsigned int i;
+
+	for (i = 0; i <= test_max; ++i) {
+		add_key(p + (test_max - i), i);
+		printf("add_key(NULL, NULL, \"%.*s\", %u"
+		       ", KEY_SPEC_THREAD_KEYRING) = %s\n",
+		       (int) i, p + (test_max - i), i, errstr);
+	}
+}
+
+static void
+test_efault(const unsigned int test_max)
+{
+	char *p = tail_alloc(test_max);
+	memset(p, '/', test_max);
+	unsigned int i;
+
+	for (i = 0; i <= test_max; ++i) {
+		unsigned int j;
+		for (j = 1; j <= sizeof(long); ++j) {
+			add_key(p + (test_max - i), i + j);
+			printf("add_key(NULL, NULL, %p, %u"
+			       ", KEY_SPEC_THREAD_KEYRING) = %s\n",
+			       p + (test_max - i), i + j, errstr);
+		}
+	}
+}
+
+void
+test_printstrn(const unsigned int test_max)
+{
+	/*
+	 * abcdefgh|
+	 * abcdefg|h
+	 * abcdef|gh
+	 * abcde|fgh
+	 * abcd|efgh
+	 * abc|defgh
+	 * ab|cdefgh
+	 * a|bcdefgh
+	 * |abcdefgh
+	 */
+	const unsigned int page_size = get_page_size();
+	char *p = tail_alloc(test_max + page_size);
+	fill_memory_ex(p, test_max + page_size, 'a', 'z' - 'a' + 1);
+
+	unsigned int i;
+	for (i = 1; i <= sizeof(long); ++i)
+		test_printstrn_at(p + i, test_max);
+	for (i = 0; i < sizeof(long); ++i)
+		test_printstrn_at(p + page_size - i, test_max);
+	test_efault(test_max);
+}
diff --git a/tests-mx32/test_ucopy.c b/tests-mx32/test_ucopy.c
new file mode 100644
index 0000000..9ddffbc
--- /dev/null
+++ b/tests-mx32/test_ucopy.c
@@ -0,0 +1,162 @@
+/*
+ * Test whether process_vm_readv and PTRACE_PEEKDATA work.
+ *
+ * Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/ptrace.h>
+#include <sys/uio.h>
+#include <sys/wait.h>
+
+#include "test_ucopy.h"
+
+#ifndef HAVE_PROCESS_VM_READV
+
+# include <asm/unistd.h>
+# include "scno.h"
+static ssize_t
+strace_process_vm_readv(pid_t pid,
+		 const struct iovec *lvec,
+		 unsigned long liovcnt,
+		 const struct iovec *rvec,
+		 unsigned long riovcnt,
+		 unsigned long flags)
+{
+	return syscall(__NR_process_vm_readv,
+		       (long) pid, lvec, liovcnt, rvec, riovcnt, flags);
+}
+# define process_vm_readv strace_process_vm_readv
+
+#endif /* !HAVE_PROCESS_VM_READV */
+
+static bool
+call_process_vm_readv(const int pid, long *const addr)
+{
+	long data = 0;
+
+	const struct iovec local = {
+		.iov_base = &data,
+		.iov_len = sizeof(data)
+	};
+	const struct iovec remote = {
+		.iov_base = addr,
+		.iov_len = sizeof(*addr)
+	};
+
+	return process_vm_readv(pid, &local, 1, &remote, 1, 0) == sizeof(data)
+		&& data == 1;
+}
+
+static bool
+call_ptrace_peekdata(const int pid, long *const addr)
+{
+	return ptrace(PTRACE_PEEKDATA, pid, addr, 0) == 1;
+}
+
+static bool
+test_ucopy(bool (*fn)(int pid, long *addr))
+{
+	static long data;
+
+	data = 0;
+	bool rc = false;
+	int saved = 0;
+
+	pid_t pid = fork();
+	if (pid < 0)
+		perror_msg_and_fail("fork");
+
+	if (!pid) {
+		data = 1;
+		if (ptrace(PTRACE_TRACEME, 0, 0, 0))
+			perror_msg_and_fail("PTRACE_TRACEME");
+		raise(SIGSTOP);
+		_exit(0);
+	}
+
+	for (;;) {
+		int status, tracee;
+
+		errno = 0;
+		tracee = wait(&status);
+		if (tracee != pid) {
+			if (errno == EINTR)
+				continue;
+			saved = errno;
+			kill(pid, SIGKILL);
+			errno = saved;
+			perror_msg_and_fail("wait");
+		}
+		if (WIFEXITED(status)) {
+			if (WEXITSTATUS(status) == 0)
+				break;
+			error_msg_and_fail("unexpected exit status %u",
+					   WEXITSTATUS(status));
+		}
+		if (WIFSIGNALED(status))
+			error_msg_and_fail("unexpected signal %u",
+					   WTERMSIG(status));
+		if (!WIFSTOPPED(status) || WSTOPSIG(status) != SIGSTOP) {
+			kill(pid, SIGKILL);
+			error_msg_and_fail("unexpected wait status %x",
+					   status);
+		}
+
+		errno = 0;
+		rc = fn(pid, &data);
+		if (!rc)
+			saved = errno;
+
+		if (ptrace(PTRACE_CONT, pid, 0, 0)) {
+			saved = errno;
+			kill(pid, SIGKILL);
+			errno = saved;
+			perror_msg_and_fail("PTRACE_CONT");
+		}
+	}
+
+	if (!rc)
+		errno = saved;
+	return rc;
+}
+
+bool
+test_process_vm_readv(void)
+{
+	return test_ucopy(call_process_vm_readv);
+}
+
+bool
+test_ptrace_peekdata(void)
+{
+	return test_ucopy(call_ptrace_peekdata);
+}
diff --git a/tests-mx32/test_ucopy.h b/tests-mx32/test_ucopy.h
new file mode 100644
index 0000000..30d1c11
--- /dev/null
+++ b/tests-mx32/test_ucopy.h
@@ -0,0 +1,13 @@
+#include <stdbool.h>
+
+extern bool
+test_process_vm_readv(void);
+
+extern bool
+test_ptrace_peekdata(void);
+
+extern void
+test_printpath(unsigned int test_max_size);
+
+extern void
+test_printstrn(unsigned int test_max_size);
diff --git a/tests-mx32/tests.h b/tests-mx32/tests.h
index 094f365..d453e3e 100644
--- a/tests-mx32/tests.h
+++ b/tests-mx32/tests.h
@@ -134,8 +134,17 @@
 /* Print string in a quoted form. */
 void print_quoted_string(const char *);
 
+/*
+ * Print a NUL-terminated string `str' of length up to `size' - 1
+ * in a quoted form.
+ */
+void print_quoted_cstring(const char *str, size_t size);
+
 /* Print memory in a quoted form. */
-void print_quoted_memory(const char *, size_t);
+void print_quoted_memory(const void *, size_t);
+
+/* Print memory in a hexquoted form. */
+void print_quoted_hex(const void *, size_t);
 
 /* Print time_t and nanoseconds in symbolic format. */
 void print_time_t_nsec(time_t, unsigned long long, int);
@@ -188,6 +197,15 @@
 /* Create a pipe with maximized descriptor numbers. */
 void pipe_maxfd(int pipefd[2]);
 
+/* if_nametoindex("lo") */
+unsigned int ifindex_lo(void);
+
+#ifdef HAVE_IF_INDEXTONAME
+# define IFINDEX_LO_STR "if_nametoindex(\"lo\")"
+#else
+# define IFINDEX_LO_STR "1"
+#endif
+
 #define F8ILL_KULONG_SUPPORTED	(sizeof(void *) < sizeof(kernel_ulong_t))
 #define F8ILL_KULONG_MASK	((kernel_ulong_t) 0xffffffff00000000ULL)
 
@@ -225,26 +243,6 @@
 # define SKIP_MAIN_UNDEFINED(arg) \
 	int main(void) { error_msg_and_skip("undefined: %s", arg); }
 
-/*
- * The kernel used to define 64-bit types on 64-bit systems on a per-arch
- * basis.  Some architectures would use unsigned long and others would use
- * unsigned long long.  These types were exported as part of the
- * kernel-userspace ABI and now must be maintained forever.  This matches
- * what the kernel exports for each architecture so we don't need to cast
- * every printing of __u64 or __s64 to stdint types.
- */
-# if SIZEOF_LONG == 4
-#  define PRI__64 "ll"
-# elif defined ALPHA || defined IA64 || defined MIPS || defined POWERPC
-#  define PRI__64 "l"
-# else
-#  define PRI__64 "ll"
-# endif
-
-# define PRI__d64 PRI__64"d"
-# define PRI__u64 PRI__64"u"
-# define PRI__x64 PRI__64"x"
-
 # if WORDS_BIGENDIAN
 #  define LL_PAIR(HI, LO) (HI), (LO)
 # else
diff --git a/tests-mx32/times.c b/tests-mx32/times.c
index c4cce0e..e2db4e2 100644
--- a/tests-mx32/times.c
+++ b/tests-mx32/times.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2015 Eugene Syromyatnikov <evgsyr@gmail.com>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/uio.c b/tests-mx32/uio.c
index 21f005d..c02c816 100644
--- a/tests-mx32/uio.c
+++ b/tests-mx32/uio.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/uname.c b/tests-mx32/uname.c
index 96db753..23b64c1 100644
--- a/tests-mx32/uname.c
+++ b/tests-mx32/uname.c
@@ -12,24 +12,23 @@
 	int abbrev = ac > 1;
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct utsname, uname);
 	int rc = syscall(__NR_uname, uname);
-	printf("uname({sysname=\"");
+	printf("uname({sysname=");
 	print_quoted_string(uname->sysname);
-	printf("\", nodename=\"");
+	printf(", nodename=");
 	print_quoted_string(uname->nodename);
 	if (abbrev) {
-		printf("\", ...");
+		printf(", ...");
 	} else {
-		printf("\", release=\"");
+		printf(", release=");
 		print_quoted_string(uname->release);
-		printf("\", version=\"");
+		printf(", version=");
 		print_quoted_string(uname->version);
-		printf("\", machine=\"");
+		printf(", machine=");
 		print_quoted_string(uname->machine);
 # ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
-		printf("\", domainname=\"");
+		printf(", domainname=");
 		print_quoted_string(uname->domainname);
 # endif
-		printf("\"");
 	}
 	printf("}) = %d\n", rc);
 
diff --git a/tests-mx32/unix-pair-sendto-recvfrom.c b/tests-mx32/unix-pair-sendto-recvfrom.c
index a0c710a..675fc07 100644
--- a/tests-mx32/unix-pair-sendto-recvfrom.c
+++ b/tests-mx32/unix-pair-sendto-recvfrom.c
@@ -2,6 +2,7 @@
  * Check decoding and dumping of sendto and recvfrom syscalls.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/vmsplice.c b/tests-mx32/vmsplice.c
index 4242d9e..6058569 100644
--- a/tests-mx32/vmsplice.c
+++ b/tests-mx32/vmsplice.c
@@ -2,6 +2,7 @@
  * This file is part of vmsplice strace test.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/xattr.c b/tests-mx32/xattr.c
index 03b4270..3bd87cc 100644
--- a/tests-mx32/xattr.c
+++ b/tests-mx32/xattr.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -112,9 +113,7 @@
 	else {
 		const int ellipsis = rc > DEFAULT_STRLEN;
 
-		putchar('"');
 		print_quoted_memory(big, ellipsis ? DEFAULT_STRLEN : rc);
-		putchar('"');
 		if (ellipsis)
 			fputs("...", stdout);
 	}
diff --git a/tests-mx32/xchownx.c b/tests-mx32/xchownx.c
index e415fef..beca206 100644
--- a/tests-mx32/xchownx.c
+++ b/tests-mx32/xchownx.c
@@ -2,6 +2,7 @@
  * Check decoding of chown/chown32/lchown/lchown32/fchown/fchown32 syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests-mx32/xetitimer.c b/tests-mx32/xetitimer.c
index 3a81880..f9cfe0b 100644
--- a/tests-mx32/xetitimer.c
+++ b/tests-mx32/xetitimer.c
@@ -167,7 +167,7 @@
 	p_new->it_interval.tv_sec = 0xdeadbeefU;
 	p_new->it_interval.tv_usec = 0xfacefeedU;
 	p_new->it_value.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	p_new->it_value.tv_usec = (long) 0xbadc0dedfacefeedLL;
+	p_new->it_value.tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 
 	rc = setitimer(ITIMER_REAL, p_new, p_old);
 	printf("setitimer(ITIMER_REAL"
diff --git a/tests-mx32/xettimeofday.c b/tests-mx32/xettimeofday.c
index ec422cf..8652b24 100644
--- a/tests-mx32/xettimeofday.c
+++ b/tests-mx32/xettimeofday.c
@@ -73,7 +73,7 @@
 	       tz->tz_minuteswest, tz->tz_dsttime);
 
 	tv->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv->tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv->tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 	assert(syscall(__NR_settimeofday, tv, tz) == -1);
 	printf("settimeofday({tv_sec=%lld, tv_usec=%llu}"
 	       ", {tz_minuteswest=%d, tz_dsttime=%d}) = -1 EINVAL (%m)\n",
diff --git a/tests-mx32/xselect.c b/tests-mx32/xselect.c
index 6c8cd81..a25ebcc 100644
--- a/tests-mx32/xselect.c
+++ b/tests-mx32/xselect.c
@@ -91,7 +91,7 @@
 	FD_SET(fds[0], set);
 	FD_SET(fds[1], set);
 	tv->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv->tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv->tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 	memcpy(&tv_in, tv, sizeof(tv_in));
 	rc = syscall(TEST_SYSCALL_NR, fds[1] + 1, set, set, set, tv);
 	if (rc < 0) {
diff --git a/tests-mx32/xutimes.c b/tests-mx32/xutimes.c
index 5fd7161..23728a1 100644
--- a/tests-mx32/xutimes.c
+++ b/tests-mx32/xutimes.c
@@ -107,7 +107,7 @@
 	tv[0].tv_sec = 0xdeadbeefU;
 	tv[0].tv_usec = 0xfacefeedU;
 	tv[1].tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv[1].tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv[1].tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 
 	k_utimes(kfname, (uintptr_t) tv);
 	printf("%s(%s, [", TEST_SYSCALL_STR, qname);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 19b7400..b4ba22a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -50,6 +50,7 @@
 	get_sigset_size.c \
 	hexdump_strdup.c \
 	hexquote_strndup.c \
+	ifindex.c \
 	inode_of_sockfd.c \
 	libmmsg.c \
 	libsocketcall.c \
@@ -63,7 +64,12 @@
 	skip_unavailable.c \
 	sprintrc.c \
 	tail_alloc.c \
+	test_netlink.h \
 	test_nlattr.h \
+	test_printpath.c \
+	test_printstrn.c \
+	test_ucopy.c \
+	test_ucopy.h \
 	tests.h \
 	tprintf.c \
 	# end of libtests_a_SOURCES
@@ -81,6 +87,8 @@
 	attach-p-cmd-p \
 	block_reset_raise_run \
 	caps-abbrev \
+	clone_parent \
+	clone_ptrace \
 	count-f \
 	execve-v \
 	execveat-v \
@@ -96,6 +104,7 @@
 	ioctl_loop-v \
 	ioctl_nsfs \
 	ioctl_rtc-v \
+	is_linux_mips_n64 \
 	ksysent \
 	mmsg-silent \
 	mmsg_name-v \
@@ -241,18 +250,23 @@
 	attach-f-p.test \
 	attach-p-cmd.test \
 	bexecve.test \
+	clone_parent.test \
+	clone_ptrace.test \
 	count-f.test \
 	count.test \
 	detach-running.test \
 	detach-sleeping.test \
 	detach-stopped.test \
 	filter-unavailable.test \
+	fflush.test \
 	get_regs.test \
 	interactive_block.test \
 	ksysent.test \
 	opipe.test \
 	options-syntax.test \
 	pc.test \
+	printpath-umovestr-legacy.test \
+	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
 	qual_inject-error-signal.test \
@@ -292,7 +306,7 @@
 
 @VALGRIND_CHECK_RULES@
 VALGRIND_FLAGS = --quiet
-VALGRIND_SUPPRESSIONS_FILES = $(srcdir)/strace.supp
+VALGRIND_SUPPRESSIONS_FILES = $(abs_srcdir)/strace.supp
 
 EXTRA_DIST = \
 	caps-abbrev.awk \
@@ -317,6 +331,7 @@
 	lstatx.c \
 	match.awk \
 	net.expected \
+	netlink_sock_diag-v.sh \
 	oldselect.expected \
 	pipe.expected \
 	process_vm_readv_writev.c \
@@ -345,6 +360,7 @@
 	strace.supp \
 	struct_flock.c \
 	sun_path.expected \
+	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
@@ -385,6 +401,10 @@
 clean-local-check:
 	-rm -rf -- $(TESTS:.test=.dir) $(GEN_TESTS:.gen.test=.dir)
 
+.PHONY: check-valgrind-local
+check-valgrind-local: $(check_LIBRARIES) $(check_PROGRAMS)
+
+BUILT_SOURCES = ksysent.h
 CLEANFILES = ksysent.h
 
 include ../scno.am
diff --git a/tests/Makefile.in b/tests/Makefile.in
index f29c87b..71e5737 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -139,13 +139,15 @@
 check_PROGRAMS = $(am__EXEEXT_1) answer$(EXEEXT) attach-f-p$(EXEEXT) \
 	attach-f-p-cmd$(EXEEXT) attach-p-cmd-cmd$(EXEEXT) \
 	attach-p-cmd-p$(EXEEXT) block_reset_raise_run$(EXEEXT) \
-	caps-abbrev$(EXEEXT) count-f$(EXEEXT) execve-v$(EXEEXT) \
+	caps-abbrev$(EXEEXT) clone_parent$(EXEEXT) \
+	clone_ptrace$(EXEEXT) count-f$(EXEEXT) execve-v$(EXEEXT) \
 	execveat-v$(EXEEXT) filter-unavailable$(EXEEXT) \
 	fork-f$(EXEEXT) getpid$(EXEEXT) getppid$(EXEEXT) \
 	gettid$(EXEEXT) int_0x80$(EXEEXT) ioctl_dm-v$(EXEEXT) \
 	ioctl_evdev-v$(EXEEXT) ioctl_loop-nv$(EXEEXT) \
 	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
-	ksysent$(EXEEXT) mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
+	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
+	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
 	msg_control-v$(EXEEXT) net-accept-connect$(EXEEXT) \
 	netlink_inet_diag$(EXEEXT) netlink_netlink_diag$(EXEEXT) \
 	netlink_unix_diag$(EXEEXT) nsyscalls$(EXEEXT) pc$(EXEEXT) \
@@ -170,7 +172,7 @@
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_code_coverage.m4 \
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
-	$(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/mpers.m4 $(top_srcdir)/m4/st_bpf.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
 	$(top_srcdir)/m4/st_warn_cflags.m4 \
 	$(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
@@ -195,6 +197,7 @@
 	libtests_a-get_sigset_size.$(OBJEXT) \
 	libtests_a-hexdump_strdup.$(OBJEXT) \
 	libtests_a-hexquote_strndup.$(OBJEXT) \
+	libtests_a-ifindex.$(OBJEXT) \
 	libtests_a-inode_of_sockfd.$(OBJEXT) \
 	libtests_a-libmmsg.$(OBJEXT) \
 	libtests_a-libsocketcall.$(OBJEXT) \
@@ -206,13 +209,15 @@
 	libtests_a-signal2name.$(OBJEXT) \
 	libtests_a-skip_unavailable.$(OBJEXT) \
 	libtests_a-sprintrc.$(OBJEXT) libtests_a-tail_alloc.$(OBJEXT) \
-	libtests_a-tprintf.$(OBJEXT)
+	libtests_a-test_printpath.$(OBJEXT) \
+	libtests_a-test_printstrn.$(OBJEXT) \
+	libtests_a-test_ucopy.$(OBJEXT) libtests_a-tprintf.$(OBJEXT)
 libtests_a_OBJECTS = $(am_libtests_a_OBJECTS)
 am__EXEEXT_1 = _newselect$(EXEEXT) accept$(EXEEXT) accept4$(EXEEXT) \
 	access$(EXEEXT) acct$(EXEEXT) add_key$(EXEEXT) \
 	adjtimex$(EXEEXT) aio$(EXEEXT) alarm$(EXEEXT) bpf$(EXEEXT) \
-	brk$(EXEEXT) btrfs$(EXEEXT) caps$(EXEEXT) chmod$(EXEEXT) \
-	chown$(EXEEXT) chown32$(EXEEXT) chroot$(EXEEXT) \
+	bpf-v$(EXEEXT) brk$(EXEEXT) btrfs$(EXEEXT) caps$(EXEEXT) \
+	chmod$(EXEEXT) chown$(EXEEXT) chown32$(EXEEXT) chroot$(EXEEXT) \
 	clock_adjtime$(EXEEXT) clock_nanosleep$(EXEEXT) \
 	clock_xettime$(EXEEXT) copy_file_range$(EXEEXT) creat$(EXEEXT) \
 	delete_module$(EXEEXT) dup$(EXEEXT) dup2$(EXEEXT) \
@@ -224,53 +229,66 @@
 	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) fchdir$(EXEEXT) \
 	fchmod$(EXEEXT) fchmodat$(EXEEXT) fchown$(EXEEXT) \
 	fchown32$(EXEEXT) fchownat$(EXEEXT) fcntl$(EXEEXT) \
-	fcntl64$(EXEEXT) fdatasync$(EXEEXT) file_handle$(EXEEXT) \
-	file_ioctl$(EXEEXT) finit_module$(EXEEXT) flock$(EXEEXT) \
-	fstat$(EXEEXT) fstat64$(EXEEXT) fstatat64$(EXEEXT) \
-	fstatfs$(EXEEXT) fstatfs64$(EXEEXT) fsync$(EXEEXT) \
-	ftruncate$(EXEEXT) ftruncate64$(EXEEXT) futex$(EXEEXT) \
-	futimesat$(EXEEXT) get_mempolicy$(EXEEXT) getcpu$(EXEEXT) \
-	getcwd$(EXEEXT) getdents$(EXEEXT) getdents64$(EXEEXT) \
-	getegid$(EXEEXT) getegid32$(EXEEXT) geteuid$(EXEEXT) \
-	geteuid32$(EXEEXT) getgid$(EXEEXT) getgid32$(EXEEXT) \
-	getgroups$(EXEEXT) getgroups32$(EXEEXT) getpeername$(EXEEXT) \
-	getpgrp$(EXEEXT) getpid$(EXEEXT) getppid$(EXEEXT) \
-	getrandom$(EXEEXT) getresgid$(EXEEXT) getresgid32$(EXEEXT) \
-	getresuid$(EXEEXT) getresuid32$(EXEEXT) getrlimit$(EXEEXT) \
-	getrusage$(EXEEXT) getsid$(EXEEXT) getsockname$(EXEEXT) \
-	getuid$(EXEEXT) getuid32$(EXEEXT) getxxid$(EXEEXT) \
-	inet-cmsg$(EXEEXT) init_module$(EXEEXT) inotify$(EXEEXT) \
-	inotify_init1$(EXEEXT) ioctl$(EXEEXT) ioctl_block$(EXEEXT) \
-	ioctl_dm$(EXEEXT) ioctl_evdev$(EXEEXT) ioctl_loop$(EXEEXT) \
-	ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) ioctl_scsi$(EXEEXT) \
-	ioctl_sg_io_v3$(EXEEXT) ioctl_sg_io_v4$(EXEEXT) \
-	ioctl_sock_gifconf$(EXEEXT) ioctl_uffdio$(EXEEXT) \
-	ioctl_v4l2$(EXEEXT) ioperm$(EXEEXT) iopl$(EXEEXT) \
-	ioprio$(EXEEXT) ip_mreq$(EXEEXT) ipc$(EXEEXT) ipc_msg$(EXEEXT) \
-	ipc_msgbuf$(EXEEXT) ipc_sem$(EXEEXT) ipc_shm$(EXEEXT) \
-	kcmp$(EXEEXT) kexec_file_load$(EXEEXT) kexec_load$(EXEEXT) \
-	keyctl$(EXEEXT) kill$(EXEEXT) lchown$(EXEEXT) \
-	lchown32$(EXEEXT) link$(EXEEXT) linkat$(EXEEXT) \
-	llseek$(EXEEXT) lookup_dcookie$(EXEEXT) lseek$(EXEEXT) \
-	lstat$(EXEEXT) lstat64$(EXEEXT) madvise$(EXEEXT) \
-	mbind$(EXEEXT) membarrier$(EXEEXT) memfd_create$(EXEEXT) \
-	migrate_pages$(EXEEXT) mincore$(EXEEXT) mkdir$(EXEEXT) \
-	mkdirat$(EXEEXT) mknod$(EXEEXT) mknodat$(EXEEXT) \
-	mlock$(EXEEXT) mlock2$(EXEEXT) mlockall$(EXEEXT) mmap$(EXEEXT) \
-	mmap64$(EXEEXT) mmsg$(EXEEXT) mmsg_name$(EXEEXT) \
-	mount$(EXEEXT) move_pages$(EXEEXT) mq$(EXEEXT) \
-	mq_sendrecv$(EXEEXT) mq_sendrecv-read$(EXEEXT) \
+	fcntl64$(EXEEXT) fdatasync$(EXEEXT) fflush$(EXEEXT) \
+	file_handle$(EXEEXT) file_ioctl$(EXEEXT) finit_module$(EXEEXT) \
+	flock$(EXEEXT) fstat$(EXEEXT) fstat64$(EXEEXT) \
+	fstatat64$(EXEEXT) fstatfs$(EXEEXT) fstatfs64$(EXEEXT) \
+	fsync$(EXEEXT) ftruncate$(EXEEXT) ftruncate64$(EXEEXT) \
+	futex$(EXEEXT) futimesat$(EXEEXT) get_mempolicy$(EXEEXT) \
+	getcpu$(EXEEXT) getcwd$(EXEEXT) getdents$(EXEEXT) \
+	getdents64$(EXEEXT) getegid$(EXEEXT) getegid32$(EXEEXT) \
+	geteuid$(EXEEXT) geteuid32$(EXEEXT) getgid$(EXEEXT) \
+	getgid32$(EXEEXT) getgroups$(EXEEXT) getgroups32$(EXEEXT) \
+	getpeername$(EXEEXT) getpgrp$(EXEEXT) getpid$(EXEEXT) \
+	getppid$(EXEEXT) getrandom$(EXEEXT) getresgid$(EXEEXT) \
+	getresgid32$(EXEEXT) getresuid$(EXEEXT) getresuid32$(EXEEXT) \
+	getrlimit$(EXEEXT) getrusage$(EXEEXT) getsid$(EXEEXT) \
+	getsockname$(EXEEXT) getuid$(EXEEXT) getuid32$(EXEEXT) \
+	getxxid$(EXEEXT) group_req$(EXEEXT) inet-cmsg$(EXEEXT) \
+	init_module$(EXEEXT) inotify$(EXEEXT) inotify_init1$(EXEEXT) \
+	ioctl$(EXEEXT) ioctl_block$(EXEEXT) ioctl_dm$(EXEEXT) \
+	ioctl_evdev$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
+	ioctl_rtc$(EXEEXT) ioctl_scsi$(EXEEXT) ioctl_sg_io_v3$(EXEEXT) \
+	ioctl_sg_io_v4$(EXEEXT) ioctl_sock_gifconf$(EXEEXT) \
+	ioctl_uffdio$(EXEEXT) ioctl_v4l2$(EXEEXT) ioperm$(EXEEXT) \
+	iopl$(EXEEXT) ioprio$(EXEEXT) ip_mreq$(EXEEXT) ipc$(EXEEXT) \
+	ipc_msg$(EXEEXT) ipc_msgbuf$(EXEEXT) ipc_sem$(EXEEXT) \
+	ipc_shm$(EXEEXT) kcmp$(EXEEXT) kexec_file_load$(EXEEXT) \
+	kexec_load$(EXEEXT) keyctl$(EXEEXT) kill$(EXEEXT) \
+	lchown$(EXEEXT) lchown32$(EXEEXT) link$(EXEEXT) \
+	linkat$(EXEEXT) llseek$(EXEEXT) lookup_dcookie$(EXEEXT) \
+	lseek$(EXEEXT) lstat$(EXEEXT) lstat64$(EXEEXT) \
+	madvise$(EXEEXT) mbind$(EXEEXT) membarrier$(EXEEXT) \
+	memfd_create$(EXEEXT) migrate_pages$(EXEEXT) mincore$(EXEEXT) \
+	mkdir$(EXEEXT) mkdirat$(EXEEXT) mknod$(EXEEXT) \
+	mknodat$(EXEEXT) mlock$(EXEEXT) mlock2$(EXEEXT) \
+	mlockall$(EXEEXT) mmap$(EXEEXT) mmap64$(EXEEXT) mmsg$(EXEEXT) \
+	mmsg_name$(EXEEXT) mount$(EXEEXT) move_pages$(EXEEXT) \
+	mq$(EXEEXT) mq_sendrecv$(EXEEXT) mq_sendrecv-read$(EXEEXT) \
 	mq_sendrecv-write$(EXEEXT) msg_control$(EXEEXT) \
 	msg_name$(EXEEXT) munlockall$(EXEEXT) nanosleep$(EXEEXT) \
 	net-icmp_filter$(EXEEXT) net-sockaddr$(EXEEXT) \
 	net-y-unix$(EXEEXT) net-yy-inet$(EXEEXT) \
 	net-yy-netlink$(EXEEXT) net-yy-unix$(EXEEXT) \
-	netlink_audit$(EXEEXT) netlink_generic$(EXEEXT) \
+	netlink_audit$(EXEEXT) netlink_crypto$(EXEEXT) \
+	netlink_generic$(EXEEXT) netlink_kobject_uevent$(EXEEXT) \
 	netlink_netfilter$(EXEEXT) netlink_protocol$(EXEEXT) \
 	netlink_route$(EXEEXT) netlink_selinux$(EXEEXT) \
 	netlink_sock_diag$(EXEEXT) netlink_xfrm$(EXEEXT) \
 	newfstatat$(EXEEXT) nlattr$(EXEEXT) \
-	nlattr_inet_diag_msg$(EXEEXT) nlattr_netlink_diag_msg$(EXEEXT) \
+	nlattr_crypto_user_alg$(EXEEXT) nlattr_br_port_msg$(EXEEXT) \
+	nlattr_dcbmsg$(EXEEXT) nlattr_fib_rule_hdr$(EXEEXT) \
+	nlattr_ifaddrlblmsg$(EXEEXT) nlattr_ifaddrmsg$(EXEEXT) \
+	nlattr_ifinfomsg$(EXEEXT) nlattr_ifla_brport$(EXEEXT) \
+	nlattr_ifla_port$(EXEEXT) nlattr_ifla_xdp$(EXEEXT) \
+	nlattr_inet_diag_msg$(EXEEXT) \
+	nlattr_inet_diag_req_compat$(EXEEXT) \
+	nlattr_inet_diag_req_v2$(EXEEXT) nlattr_ndmsg$(EXEEXT) \
+	nlattr_ndtmsg$(EXEEXT) nlattr_netconfmsg$(EXEEXT) \
+	nlattr_netlink_diag_msg$(EXEEXT) nlattr_nlmsgerr$(EXEEXT) \
+	nlattr_packet_diag_msg$(EXEEXT) nlattr_rtgenmsg$(EXEEXT) \
+	nlattr_rtmsg$(EXEEXT) nlattr_smc_diag_msg$(EXEEXT) \
+	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
 	oldfstat$(EXEEXT) oldlstat$(EXEEXT) oldselect$(EXEEXT) \
 	oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
@@ -283,15 +301,20 @@
 	prctl-securebits$(EXEEXT) prctl-tid_address$(EXEEXT) \
 	prctl-tsc$(EXEEXT) pread64-pwrite64$(EXEEXT) preadv$(EXEEXT) \
 	preadv-pwritev$(EXEEXT) preadv2-pwritev2$(EXEEXT) \
-	printstr$(EXEEXT) prlimit64$(EXEEXT) process_vm_readv$(EXEEXT) \
-	process_vm_writev$(EXEEXT) pselect6$(EXEEXT) ptrace$(EXEEXT) \
-	pwritev$(EXEEXT) quotactl$(EXEEXT) quotactl-xfs$(EXEEXT) \
-	read-write$(EXEEXT) readahead$(EXEEXT) readdir$(EXEEXT) \
-	readlink$(EXEEXT) readlinkat$(EXEEXT) readv$(EXEEXT) \
-	reboot$(EXEEXT) recvfrom$(EXEEXT) recvmmsg-timeout$(EXEEXT) \
-	recvmsg$(EXEEXT) remap_file_pages$(EXEEXT) rename$(EXEEXT) \
-	renameat$(EXEEXT) renameat2$(EXEEXT) request_key$(EXEEXT) \
-	rmdir$(EXEEXT) rt_sigaction$(EXEEXT) rt_sigpending$(EXEEXT) \
+	printpath-umovestr$(EXEEXT) \
+	printpath-umovestr-peekdata$(EXEEXT) \
+	printpath-umovestr-undumpable$(EXEEXT) printstr$(EXEEXT) \
+	printstrn-umoven$(EXEEXT) printstrn-umoven-peekdata$(EXEEXT) \
+	printstrn-umoven-undumpable$(EXEEXT) prlimit64$(EXEEXT) \
+	process_vm_readv$(EXEEXT) process_vm_writev$(EXEEXT) \
+	pselect6$(EXEEXT) ptrace$(EXEEXT) pwritev$(EXEEXT) \
+	quotactl$(EXEEXT) quotactl-xfs$(EXEEXT) read-write$(EXEEXT) \
+	readahead$(EXEEXT) readdir$(EXEEXT) readlink$(EXEEXT) \
+	readlinkat$(EXEEXT) readv$(EXEEXT) reboot$(EXEEXT) \
+	recvfrom$(EXEEXT) recvmmsg-timeout$(EXEEXT) recvmsg$(EXEEXT) \
+	remap_file_pages$(EXEEXT) rename$(EXEEXT) renameat$(EXEEXT) \
+	renameat2$(EXEEXT) request_key$(EXEEXT) rmdir$(EXEEXT) \
+	rt_sigaction$(EXEEXT) rt_sigpending$(EXEEXT) \
 	rt_sigprocmask$(EXEEXT) rt_sigqueueinfo$(EXEEXT) \
 	rt_sigreturn$(EXEEXT) rt_sigsuspend$(EXEEXT) \
 	rt_sigtimedwait$(EXEEXT) rt_tgsigqueueinfo$(EXEEXT) \
@@ -311,23 +334,25 @@
 	shmxt$(EXEEXT) shutdown$(EXEEXT) sigaction$(EXEEXT) \
 	sigaltstack$(EXEEXT) siginfo$(EXEEXT) signal$(EXEEXT) \
 	signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
-	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) socketcall$(EXEEXT) \
-	splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
-	statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
-	sxetmask$(EXEEXT) symlink$(EXEEXT) symlinkat$(EXEEXT) \
-	sync$(EXEEXT) sync_file_range$(EXEEXT) \
-	sync_file_range2$(EXEEXT) sysinfo$(EXEEXT) syslog$(EXEEXT) \
-	tee$(EXEEXT) time$(EXEEXT) timer_create$(EXEEXT) \
-	timer_xettime$(EXEEXT) timerfd_xettime$(EXEEXT) times$(EXEEXT) \
-	times-fail$(EXEEXT) truncate$(EXEEXT) truncate64$(EXEEXT) \
-	ugetrlimit$(EXEEXT) uio$(EXEEXT) umask$(EXEEXT) \
-	umount$(EXEEXT) umount2$(EXEEXT) umoven-illptr$(EXEEXT) \
-	umovestr$(EXEEXT) umovestr-illptr$(EXEEXT) umovestr2$(EXEEXT) \
-	umovestr3$(EXEEXT) uname$(EXEEXT) unlink$(EXEEXT) \
-	unlinkat$(EXEEXT) unshare$(EXEEXT) userfaultfd$(EXEEXT) \
-	ustat$(EXEEXT) utime$(EXEEXT) utimensat$(EXEEXT) \
-	utimes$(EXEEXT) vhangup$(EXEEXT) vmsplice$(EXEEXT) \
-	wait4$(EXEEXT) waitid$(EXEEXT) waitpid$(EXEEXT) xattr$(EXEEXT) \
+	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
+	so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
+	socketcall$(EXEEXT) splice$(EXEEXT) stat$(EXEEXT) \
+	stat64$(EXEEXT) statfs$(EXEEXT) statfs64$(EXEEXT) \
+	statx$(EXEEXT) swap$(EXEEXT) sxetmask$(EXEEXT) \
+	symlink$(EXEEXT) symlinkat$(EXEEXT) sync$(EXEEXT) \
+	sync_file_range$(EXEEXT) sync_file_range2$(EXEEXT) \
+	sysinfo$(EXEEXT) syslog$(EXEEXT) tee$(EXEEXT) time$(EXEEXT) \
+	timer_create$(EXEEXT) timer_xettime$(EXEEXT) \
+	timerfd_xettime$(EXEEXT) times$(EXEEXT) times-fail$(EXEEXT) \
+	truncate$(EXEEXT) truncate64$(EXEEXT) ugetrlimit$(EXEEXT) \
+	uio$(EXEEXT) umask$(EXEEXT) umount$(EXEEXT) umount2$(EXEEXT) \
+	umoven-illptr$(EXEEXT) umovestr$(EXEEXT) \
+	umovestr-illptr$(EXEEXT) umovestr2$(EXEEXT) umovestr3$(EXEEXT) \
+	uname$(EXEEXT) unlink$(EXEEXT) unlinkat$(EXEEXT) \
+	unshare$(EXEEXT) userfaultfd$(EXEEXT) ustat$(EXEEXT) \
+	utime$(EXEEXT) utimensat$(EXEEXT) utimes$(EXEEXT) \
+	vhangup$(EXEEXT) vmsplice$(EXEEXT) wait4$(EXEEXT) \
+	waitid$(EXEEXT) waitpid$(EXEEXT) xattr$(EXEEXT) \
 	xattr-strings$(EXEEXT) xet_robust_list$(EXEEXT) \
 	xetitimer$(EXEEXT) xetpgid$(EXEEXT) xetpriority$(EXEEXT) \
 	xettimeofday$(EXEEXT)
@@ -394,6 +419,10 @@
 bpf_OBJECTS = bpf.$(OBJEXT)
 bpf_LDADD = $(LDADD)
 bpf_DEPENDENCIES = libtests.a
+bpf_v_SOURCES = bpf-v.c
+bpf_v_OBJECTS = bpf-v.$(OBJEXT)
+bpf_v_LDADD = $(LDADD)
+bpf_v_DEPENDENCIES = libtests.a
 brk_SOURCES = brk.c
 brk_OBJECTS = brk.$(OBJEXT)
 brk_LDADD = $(LDADD)
@@ -437,6 +466,14 @@
 clock_xettime_SOURCES = clock_xettime.c
 clock_xettime_OBJECTS = clock_xettime.$(OBJEXT)
 clock_xettime_DEPENDENCIES = $(LDADD)
+clone_parent_SOURCES = clone_parent.c
+clone_parent_OBJECTS = clone_parent.$(OBJEXT)
+clone_parent_LDADD = $(LDADD)
+clone_parent_DEPENDENCIES = libtests.a
+clone_ptrace_SOURCES = clone_ptrace.c
+clone_ptrace_OBJECTS = clone_ptrace.$(OBJEXT)
+clone_ptrace_LDADD = $(LDADD)
+clone_ptrace_DEPENDENCIES = libtests.a
 copy_file_range_SOURCES = copy_file_range.c
 copy_file_range_OBJECTS = copy_file_range.$(OBJEXT)
 copy_file_range_LDADD = $(LDADD)
@@ -568,6 +605,10 @@
 fdatasync_OBJECTS = fdatasync.$(OBJEXT)
 fdatasync_LDADD = $(LDADD)
 fdatasync_DEPENDENCIES = libtests.a
+fflush_SOURCES = fflush.c
+fflush_OBJECTS = fflush.$(OBJEXT)
+fflush_LDADD = $(LDADD)
+fflush_DEPENDENCIES = libtests.a
 file_handle_SOURCES = file_handle.c
 file_handle_OBJECTS = file_handle.$(OBJEXT)
 file_handle_LDADD = $(LDADD)
@@ -751,6 +792,10 @@
 getxxid_OBJECTS = getxxid.$(OBJEXT)
 getxxid_LDADD = $(LDADD)
 getxxid_DEPENDENCIES = libtests.a
+group_req_SOURCES = group_req.c
+group_req_OBJECTS = group_req.$(OBJEXT)
+group_req_LDADD = $(LDADD)
+group_req_DEPENDENCIES = libtests.a
 inet_cmsg_SOURCES = inet-cmsg.c
 inet_cmsg_OBJECTS = inet-cmsg.$(OBJEXT)
 inet_cmsg_LDADD = $(LDADD)
@@ -883,6 +928,10 @@
 ipc_shm_OBJECTS = ipc_shm.$(OBJEXT)
 ipc_shm_LDADD = $(LDADD)
 ipc_shm_DEPENDENCIES = libtests.a
+is_linux_mips_n64_SOURCES = is_linux_mips_n64.c
+is_linux_mips_n64_OBJECTS = is_linux_mips_n64.$(OBJEXT)
+is_linux_mips_n64_LDADD = $(LDADD)
+is_linux_mips_n64_DEPENDENCIES = libtests.a
 kcmp_SOURCES = kcmp.c
 kcmp_OBJECTS = kcmp.$(OBJEXT)
 kcmp_LDADD = $(LDADD)
@@ -1091,6 +1140,10 @@
 netlink_audit_OBJECTS = netlink_audit.$(OBJEXT)
 netlink_audit_LDADD = $(LDADD)
 netlink_audit_DEPENDENCIES = libtests.a
+netlink_crypto_SOURCES = netlink_crypto.c
+netlink_crypto_OBJECTS = netlink_crypto.$(OBJEXT)
+netlink_crypto_LDADD = $(LDADD)
+netlink_crypto_DEPENDENCIES = libtests.a
 netlink_generic_SOURCES = netlink_generic.c
 netlink_generic_OBJECTS = netlink_generic.$(OBJEXT)
 netlink_generic_LDADD = $(LDADD)
@@ -1099,6 +1152,10 @@
 netlink_inet_diag_OBJECTS = netlink_inet_diag.$(OBJEXT)
 netlink_inet_diag_LDADD = $(LDADD)
 netlink_inet_diag_DEPENDENCIES = libtests.a
+netlink_kobject_uevent_SOURCES = netlink_kobject_uevent.c
+netlink_kobject_uevent_OBJECTS = netlink_kobject_uevent.$(OBJEXT)
+netlink_kobject_uevent_LDADD = $(LDADD)
+netlink_kobject_uevent_DEPENDENCIES = libtests.a
 netlink_netfilter_SOURCES = netlink_netfilter.c
 netlink_netfilter_OBJECTS = netlink_netfilter.$(OBJEXT)
 netlink_netfilter_LDADD = $(LDADD)
@@ -1139,14 +1196,103 @@
 nlattr_OBJECTS = nlattr.$(OBJEXT)
 nlattr_LDADD = $(LDADD)
 nlattr_DEPENDENCIES = libtests.a
+nlattr_br_port_msg_SOURCES = nlattr_br_port_msg.c
+nlattr_br_port_msg_OBJECTS = nlattr_br_port_msg.$(OBJEXT)
+nlattr_br_port_msg_LDADD = $(LDADD)
+nlattr_br_port_msg_DEPENDENCIES = libtests.a
+nlattr_crypto_user_alg_SOURCES = nlattr_crypto_user_alg.c
+nlattr_crypto_user_alg_OBJECTS = nlattr_crypto_user_alg.$(OBJEXT)
+nlattr_crypto_user_alg_LDADD = $(LDADD)
+nlattr_crypto_user_alg_DEPENDENCIES = libtests.a
+nlattr_dcbmsg_SOURCES = nlattr_dcbmsg.c
+nlattr_dcbmsg_OBJECTS = nlattr_dcbmsg.$(OBJEXT)
+nlattr_dcbmsg_LDADD = $(LDADD)
+nlattr_dcbmsg_DEPENDENCIES = libtests.a
+nlattr_fib_rule_hdr_SOURCES = nlattr_fib_rule_hdr.c
+nlattr_fib_rule_hdr_OBJECTS = nlattr_fib_rule_hdr.$(OBJEXT)
+nlattr_fib_rule_hdr_LDADD = $(LDADD)
+nlattr_fib_rule_hdr_DEPENDENCIES = libtests.a
+nlattr_ifaddrlblmsg_SOURCES = nlattr_ifaddrlblmsg.c
+nlattr_ifaddrlblmsg_OBJECTS = nlattr_ifaddrlblmsg.$(OBJEXT)
+nlattr_ifaddrlblmsg_LDADD = $(LDADD)
+nlattr_ifaddrlblmsg_DEPENDENCIES = libtests.a
+nlattr_ifaddrmsg_SOURCES = nlattr_ifaddrmsg.c
+nlattr_ifaddrmsg_OBJECTS = nlattr_ifaddrmsg.$(OBJEXT)
+nlattr_ifaddrmsg_LDADD = $(LDADD)
+nlattr_ifaddrmsg_DEPENDENCIES = libtests.a
+nlattr_ifinfomsg_SOURCES = nlattr_ifinfomsg.c
+nlattr_ifinfomsg_OBJECTS = nlattr_ifinfomsg.$(OBJEXT)
+nlattr_ifinfomsg_LDADD = $(LDADD)
+nlattr_ifinfomsg_DEPENDENCIES = libtests.a
+nlattr_ifla_brport_SOURCES = nlattr_ifla_brport.c
+nlattr_ifla_brport_OBJECTS = nlattr_ifla_brport.$(OBJEXT)
+nlattr_ifla_brport_LDADD = $(LDADD)
+nlattr_ifla_brport_DEPENDENCIES = libtests.a
+nlattr_ifla_port_SOURCES = nlattr_ifla_port.c
+nlattr_ifla_port_OBJECTS = nlattr_ifla_port.$(OBJEXT)
+nlattr_ifla_port_LDADD = $(LDADD)
+nlattr_ifla_port_DEPENDENCIES = libtests.a
+nlattr_ifla_xdp_SOURCES = nlattr_ifla_xdp.c
+nlattr_ifla_xdp_OBJECTS = nlattr_ifla_xdp.$(OBJEXT)
+nlattr_ifla_xdp_LDADD = $(LDADD)
+nlattr_ifla_xdp_DEPENDENCIES = libtests.a
 nlattr_inet_diag_msg_SOURCES = nlattr_inet_diag_msg.c
 nlattr_inet_diag_msg_OBJECTS = nlattr_inet_diag_msg.$(OBJEXT)
 nlattr_inet_diag_msg_LDADD = $(LDADD)
 nlattr_inet_diag_msg_DEPENDENCIES = libtests.a
+nlattr_inet_diag_req_compat_SOURCES = nlattr_inet_diag_req_compat.c
+nlattr_inet_diag_req_compat_OBJECTS =  \
+	nlattr_inet_diag_req_compat.$(OBJEXT)
+nlattr_inet_diag_req_compat_LDADD = $(LDADD)
+nlattr_inet_diag_req_compat_DEPENDENCIES = libtests.a
+nlattr_inet_diag_req_v2_SOURCES = nlattr_inet_diag_req_v2.c
+nlattr_inet_diag_req_v2_OBJECTS = nlattr_inet_diag_req_v2.$(OBJEXT)
+nlattr_inet_diag_req_v2_LDADD = $(LDADD)
+nlattr_inet_diag_req_v2_DEPENDENCIES = libtests.a
+nlattr_ndmsg_SOURCES = nlattr_ndmsg.c
+nlattr_ndmsg_OBJECTS = nlattr_ndmsg.$(OBJEXT)
+nlattr_ndmsg_LDADD = $(LDADD)
+nlattr_ndmsg_DEPENDENCIES = libtests.a
+nlattr_ndtmsg_SOURCES = nlattr_ndtmsg.c
+nlattr_ndtmsg_OBJECTS = nlattr_ndtmsg.$(OBJEXT)
+nlattr_ndtmsg_LDADD = $(LDADD)
+nlattr_ndtmsg_DEPENDENCIES = libtests.a
+nlattr_netconfmsg_SOURCES = nlattr_netconfmsg.c
+nlattr_netconfmsg_OBJECTS = nlattr_netconfmsg.$(OBJEXT)
+nlattr_netconfmsg_LDADD = $(LDADD)
+nlattr_netconfmsg_DEPENDENCIES = libtests.a
 nlattr_netlink_diag_msg_SOURCES = nlattr_netlink_diag_msg.c
 nlattr_netlink_diag_msg_OBJECTS = nlattr_netlink_diag_msg.$(OBJEXT)
 nlattr_netlink_diag_msg_LDADD = $(LDADD)
 nlattr_netlink_diag_msg_DEPENDENCIES = libtests.a
+nlattr_nlmsgerr_SOURCES = nlattr_nlmsgerr.c
+nlattr_nlmsgerr_OBJECTS = nlattr_nlmsgerr.$(OBJEXT)
+nlattr_nlmsgerr_LDADD = $(LDADD)
+nlattr_nlmsgerr_DEPENDENCIES = libtests.a
+nlattr_packet_diag_msg_SOURCES = nlattr_packet_diag_msg.c
+nlattr_packet_diag_msg_OBJECTS = nlattr_packet_diag_msg.$(OBJEXT)
+nlattr_packet_diag_msg_LDADD = $(LDADD)
+nlattr_packet_diag_msg_DEPENDENCIES = libtests.a
+nlattr_rtgenmsg_SOURCES = nlattr_rtgenmsg.c
+nlattr_rtgenmsg_OBJECTS = nlattr_rtgenmsg.$(OBJEXT)
+nlattr_rtgenmsg_LDADD = $(LDADD)
+nlattr_rtgenmsg_DEPENDENCIES = libtests.a
+nlattr_rtmsg_SOURCES = nlattr_rtmsg.c
+nlattr_rtmsg_OBJECTS = nlattr_rtmsg.$(OBJEXT)
+nlattr_rtmsg_LDADD = $(LDADD)
+nlattr_rtmsg_DEPENDENCIES = libtests.a
+nlattr_smc_diag_msg_SOURCES = nlattr_smc_diag_msg.c
+nlattr_smc_diag_msg_OBJECTS = nlattr_smc_diag_msg.$(OBJEXT)
+nlattr_smc_diag_msg_LDADD = $(LDADD)
+nlattr_smc_diag_msg_DEPENDENCIES = libtests.a
+nlattr_tcamsg_SOURCES = nlattr_tcamsg.c
+nlattr_tcamsg_OBJECTS = nlattr_tcamsg.$(OBJEXT)
+nlattr_tcamsg_LDADD = $(LDADD)
+nlattr_tcamsg_DEPENDENCIES = libtests.a
+nlattr_tcmsg_SOURCES = nlattr_tcmsg.c
+nlattr_tcmsg_OBJECTS = nlattr_tcmsg.$(OBJEXT)
+nlattr_tcmsg_LDADD = $(LDADD)
+nlattr_tcmsg_DEPENDENCIES = libtests.a
 nlattr_unix_diag_msg_SOURCES = nlattr_unix_diag_msg.c
 nlattr_unix_diag_msg_OBJECTS = nlattr_unix_diag_msg.$(OBJEXT)
 nlattr_unix_diag_msg_LDADD = $(LDADD)
@@ -1305,10 +1451,39 @@
 print_maxfd_OBJECTS = print_maxfd.$(OBJEXT)
 print_maxfd_LDADD = $(LDADD)
 print_maxfd_DEPENDENCIES = libtests.a
+printpath_umovestr_SOURCES = printpath-umovestr.c
+printpath_umovestr_OBJECTS = printpath-umovestr.$(OBJEXT)
+printpath_umovestr_LDADD = $(LDADD)
+printpath_umovestr_DEPENDENCIES = libtests.a
+printpath_umovestr_peekdata_SOURCES = printpath-umovestr-peekdata.c
+printpath_umovestr_peekdata_OBJECTS =  \
+	printpath-umovestr-peekdata.$(OBJEXT)
+printpath_umovestr_peekdata_LDADD = $(LDADD)
+printpath_umovestr_peekdata_DEPENDENCIES = libtests.a
+printpath_umovestr_undumpable_SOURCES =  \
+	printpath-umovestr-undumpable.c
+printpath_umovestr_undumpable_OBJECTS =  \
+	printpath-umovestr-undumpable.$(OBJEXT)
+printpath_umovestr_undumpable_LDADD = $(LDADD)
+printpath_umovestr_undumpable_DEPENDENCIES = libtests.a
 printstr_SOURCES = printstr.c
 printstr_OBJECTS = printstr.$(OBJEXT)
 printstr_LDADD = $(LDADD)
 printstr_DEPENDENCIES = libtests.a
+printstrn_umoven_SOURCES = printstrn-umoven.c
+printstrn_umoven_OBJECTS = printstrn-umoven.$(OBJEXT)
+printstrn_umoven_LDADD = $(LDADD)
+printstrn_umoven_DEPENDENCIES = libtests.a
+printstrn_umoven_peekdata_SOURCES = printstrn-umoven-peekdata.c
+printstrn_umoven_peekdata_OBJECTS =  \
+	printstrn-umoven-peekdata.$(OBJEXT)
+printstrn_umoven_peekdata_LDADD = $(LDADD)
+printstrn_umoven_peekdata_DEPENDENCIES = libtests.a
+printstrn_umoven_undumpable_SOURCES = printstrn-umoven-undumpable.c
+printstrn_umoven_undumpable_OBJECTS =  \
+	printstrn-umoven-undumpable.$(OBJEXT)
+printstrn_umoven_undumpable_LDADD = $(LDADD)
+printstrn_umoven_undumpable_DEPENDENCIES = libtests.a
 prlimit64_SOURCES = prlimit64.c
 prlimit64_OBJECTS = prlimit64.$(OBJEXT)
 prlimit64_LDADD = $(LDADD)
@@ -1685,6 +1860,18 @@
 sleep_OBJECTS = sleep.$(OBJEXT)
 sleep_LDADD = $(LDADD)
 sleep_DEPENDENCIES = libtests.a
+so_linger_SOURCES = so_linger.c
+so_linger_OBJECTS = so_linger.$(OBJEXT)
+so_linger_LDADD = $(LDADD)
+so_linger_DEPENDENCIES = libtests.a
+so_peercred_SOURCES = so_peercred.c
+so_peercred_OBJECTS = so_peercred.$(OBJEXT)
+so_peercred_LDADD = $(LDADD)
+so_peercred_DEPENDENCIES = libtests.a
+sock_filter_v_SOURCES = sock_filter-v.c
+sock_filter_v_OBJECTS = sock_filter-v.$(OBJEXT)
+sock_filter_v_LDADD = $(LDADD)
+sock_filter_v_DEPENDENCIES = libtests.a
 socketcall_SOURCES = socketcall.c
 socketcall_OBJECTS = socketcall.$(OBJEXT)
 socketcall_LDADD = $(LDADD)
@@ -1981,16 +2168,17 @@
 SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
 	access.c acct.c add_key.c adjtimex.c aio.c alarm.c answer.c \
 	attach-f-p.c attach-f-p-cmd.c attach-p-cmd-cmd.c \
-	attach-p-cmd-p.c block_reset_raise_run.c bpf.c brk.c btrfs.c \
-	caps.c caps-abbrev.c chmod.c chown.c chown32.c chroot.c \
-	clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	copy_file_range.c count-f.c creat.c delete_module.c dup.c \
-	dup2.c dup3.c epoll_create.c epoll_create1.c epoll_ctl.c \
-	epoll_pwait.c epoll_wait.c erestartsys.c eventfd.c execve.c \
-	execve-v.c execveat.c execveat-v.c faccessat.c fadvise64.c \
-	fadvise64_64.c fallocate.c fanotify_init.c fanotify_mark.c \
-	fchdir.c fchmod.c fchmodat.c fchown.c fchown32.c fchownat.c \
-	fcntl.c fcntl64.c fdatasync.c file_handle.c file_ioctl.c \
+	attach-p-cmd-p.c block_reset_raise_run.c bpf.c bpf-v.c brk.c \
+	btrfs.c caps.c caps-abbrev.c chmod.c chown.c chown32.c \
+	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
+	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
+	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
+	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
+	fallocate.c fanotify_init.c fanotify_mark.c fchdir.c fchmod.c \
+	fchmodat.c fchown.c fchown32.c fchownat.c fcntl.c fcntl64.c \
+	fdatasync.c fflush.c file_handle.c file_ioctl.c \
 	filter-unavailable.c finit_module.c flock.c fork-f.c fstat.c \
 	fstat64.c fstatat64.c fstatfs.c fstatfs64.c fsync.c \
 	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
@@ -1999,7 +2187,7 @@
 	getgroups.c getgroups32.c getpeername.c getpgrp.c getpid.c \
 	getppid.c getrandom.c getresgid.c getresgid32.c getresuid.c \
 	getresuid32.c getrlimit.c getrusage.c getsid.c getsockname.c \
-	gettid.c getuid.c getuid32.c getxxid.c inet-cmsg.c \
+	gettid.c getuid.c getuid32.c getxxid.c group_req.c inet-cmsg.c \
 	init_module.c inotify.c inotify_init1.c int_0x80.c ioctl.c \
 	ioctl_block.c ioctl_dm.c ioctl_dm-v.c ioctl_evdev.c \
 	ioctl_evdev-v.c ioctl_loop.c ioctl_loop-nv.c ioctl_loop-v.c \
@@ -2007,56 +2195,69 @@
 	ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
 	ioctl_sock_gifconf.c ioctl_uffdio.c ioctl_v4l2.c ioperm.c \
 	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msgbuf.c \
-	ipc_sem.c ipc_shm.c kcmp.c kexec_file_load.c kexec_load.c \
-	keyctl.c kill.c ksysent.c lchown.c lchown32.c link.c linkat.c \
-	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
-	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
-	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
-	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
-	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
-	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
-	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
-	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
-	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
-	netlink_audit.c netlink_generic.c netlink_inet_diag.c \
-	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
-	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
-	netlink_unix_diag.c netlink_xfrm.c newfstatat.c nlattr.c \
-	nlattr_inet_diag_msg.c nlattr_netlink_diag_msg.c \
-	nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c oldfstat.c \
-	oldlstat.c oldselect.c oldstat.c open.c openat.c osf_utimes.c \
-	pause.c pc.c perf_event_open.c perf_event_open_nonverbose.c \
-	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
-	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
-	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
-	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c \
+	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
+	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
+	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
+	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
+	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
+	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
+	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
+	munlockall.c nanosleep.c net-accept-connect.c \
+	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
+	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
+	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
+	netlink_kobject_uevent.c netlink_netfilter.c \
+	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
+	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
+	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
+	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
+	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
+	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
+	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
+	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
+	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
+	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
+	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
+	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
+	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
+	osf_utimes.c pause.c pc.c perf_event_open.c \
+	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
+	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
+	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
+	prctl-dumpable.c prctl-name.c prctl-no-args.c \
+	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
-	preadv2-pwritev2.c print_maxfd.c printstr.c prlimit64.c \
-	process_vm_readv.c process_vm_writev.c pselect6.c ptrace.c \
-	pwritev.c qual_fault.c qual_inject-error-signal.c \
-	qual_inject-retval.c qual_inject-signal.c qual_signal.c \
-	quotactl.c quotactl-v.c quotactl-xfs.c quotactl-xfs-v.c \
-	read-write.c readahead.c readdir.c readlink.c readlinkat.c \
-	readv.c reboot.c recvfrom.c recvmmsg-timeout.c recvmsg.c \
-	redirect-fds.c remap_file_pages.c rename.c renameat.c \
-	renameat2.c request_key.c restart_syscall.c rmdir.c \
-	rt_sigaction.c rt_sigpending.c rt_sigprocmask.c \
-	rt_sigqueueinfo.c rt_sigreturn.c rt_sigsuspend.c \
-	rt_sigtimedwait.c rt_tgsigqueueinfo.c run_expect_termsig.c \
-	sched_get_priority_mxx.c sched_rr_get_interval.c \
-	sched_xetaffinity.c sched_xetattr.c sched_xetparam.c \
-	sched_xetscheduler.c sched_yield.c scm_rights.c \
-	seccomp-filter.c seccomp-filter-v.c seccomp-strict.c select.c \
-	semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c setdomainname.c setfsgid.c setfsgid32.c \
-	setfsuid.c setfsuid32.c setgid.c setgid32.c setgroups.c \
-	setgroups32.c sethostname.c setns.c setregid.c setregid32.c \
-	setresgid.c setresgid32.c setresuid.c setresuid32.c setreuid.c \
-	setreuid32.c setrlimit.c setuid.c setuid32.c shmxt.c \
-	shutdown.c sigaction.c sigaltstack.c siginfo.c signal.c \
-	signal_receive.c signalfd4.c sigpending.c sigprocmask.c \
-	sigreturn.c sigsuspend.c sleep.c socketcall.c splice.c \
+	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
+	printpath-umovestr-peekdata.c printpath-umovestr-undumpable.c \
+	printstr.c printstrn-umoven.c printstrn-umoven-peekdata.c \
+	printstrn-umoven-undumpable.c prlimit64.c process_vm_readv.c \
+	process_vm_writev.c pselect6.c ptrace.c pwritev.c qual_fault.c \
+	qual_inject-error-signal.c qual_inject-retval.c \
+	qual_inject-signal.c qual_signal.c quotactl.c quotactl-v.c \
+	quotactl-xfs.c quotactl-xfs-v.c read-write.c readahead.c \
+	readdir.c readlink.c readlinkat.c readv.c reboot.c recvfrom.c \
+	recvmmsg-timeout.c recvmsg.c redirect-fds.c remap_file_pages.c \
+	rename.c renameat.c renameat2.c request_key.c \
+	restart_syscall.c rmdir.c rt_sigaction.c rt_sigpending.c \
+	rt_sigprocmask.c rt_sigqueueinfo.c rt_sigreturn.c \
+	rt_sigsuspend.c rt_sigtimedwait.c rt_tgsigqueueinfo.c \
+	run_expect_termsig.c sched_get_priority_mxx.c \
+	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
+	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
+	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
+	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
+	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	setfsgid32.c setfsuid.c setfsuid32.c setgid.c setgid32.c \
+	setgroups.c setgroups32.c sethostname.c setns.c setregid.c \
+	setregid32.c setresgid.c setresgid32.c setresuid.c \
+	setresuid32.c setreuid.c setreuid32.c setrlimit.c setuid.c \
+	setuid32.c shmxt.c shutdown.c sigaction.c sigaltstack.c \
+	siginfo.c signal.c signal_receive.c signalfd4.c sigpending.c \
+	sigprocmask.c sigreturn.c sigsuspend.c sleep.c so_linger.c \
+	so_peercred.c sock_filter-v.c socketcall.c splice.c \
 	$(stack_fcall_SOURCES) stat.c stat64.c statfs.c statfs64.c \
 	statx.c swap.c sxetmask.c symlink.c symlinkat.c sync.c \
 	sync_file_range.c sync_file_range2.c sysinfo.c syslog.c tee.c \
@@ -2073,16 +2274,17 @@
 DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
 	access.c acct.c add_key.c adjtimex.c aio.c alarm.c answer.c \
 	attach-f-p.c attach-f-p-cmd.c attach-p-cmd-cmd.c \
-	attach-p-cmd-p.c block_reset_raise_run.c bpf.c brk.c btrfs.c \
-	caps.c caps-abbrev.c chmod.c chown.c chown32.c chroot.c \
-	clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	copy_file_range.c count-f.c creat.c delete_module.c dup.c \
-	dup2.c dup3.c epoll_create.c epoll_create1.c epoll_ctl.c \
-	epoll_pwait.c epoll_wait.c erestartsys.c eventfd.c execve.c \
-	execve-v.c execveat.c execveat-v.c faccessat.c fadvise64.c \
-	fadvise64_64.c fallocate.c fanotify_init.c fanotify_mark.c \
-	fchdir.c fchmod.c fchmodat.c fchown.c fchown32.c fchownat.c \
-	fcntl.c fcntl64.c fdatasync.c file_handle.c file_ioctl.c \
+	attach-p-cmd-p.c block_reset_raise_run.c bpf.c bpf-v.c brk.c \
+	btrfs.c caps.c caps-abbrev.c chmod.c chown.c chown32.c \
+	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
+	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
+	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
+	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
+	fallocate.c fanotify_init.c fanotify_mark.c fchdir.c fchmod.c \
+	fchmodat.c fchown.c fchown32.c fchownat.c fcntl.c fcntl64.c \
+	fdatasync.c fflush.c file_handle.c file_ioctl.c \
 	filter-unavailable.c finit_module.c flock.c fork-f.c fstat.c \
 	fstat64.c fstatat64.c fstatfs.c fstatfs64.c fsync.c \
 	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
@@ -2091,7 +2293,7 @@
 	getgroups.c getgroups32.c getpeername.c getpgrp.c getpid.c \
 	getppid.c getrandom.c getresgid.c getresgid32.c getresuid.c \
 	getresuid32.c getrlimit.c getrusage.c getsid.c getsockname.c \
-	gettid.c getuid.c getuid32.c getxxid.c inet-cmsg.c \
+	gettid.c getuid.c getuid32.c getxxid.c group_req.c inet-cmsg.c \
 	init_module.c inotify.c inotify_init1.c int_0x80.c ioctl.c \
 	ioctl_block.c ioctl_dm.c ioctl_dm-v.c ioctl_evdev.c \
 	ioctl_evdev-v.c ioctl_loop.c ioctl_loop-nv.c ioctl_loop-v.c \
@@ -2099,56 +2301,69 @@
 	ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
 	ioctl_sock_gifconf.c ioctl_uffdio.c ioctl_v4l2.c ioperm.c \
 	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msgbuf.c \
-	ipc_sem.c ipc_shm.c kcmp.c kexec_file_load.c kexec_load.c \
-	keyctl.c kill.c ksysent.c lchown.c lchown32.c link.c linkat.c \
-	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
-	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
-	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
-	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
-	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
-	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
-	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
-	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
-	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
-	netlink_audit.c netlink_generic.c netlink_inet_diag.c \
-	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
-	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
-	netlink_unix_diag.c netlink_xfrm.c newfstatat.c nlattr.c \
-	nlattr_inet_diag_msg.c nlattr_netlink_diag_msg.c \
-	nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c oldfstat.c \
-	oldlstat.c oldselect.c oldstat.c open.c openat.c osf_utimes.c \
-	pause.c pc.c perf_event_open.c perf_event_open_nonverbose.c \
-	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
-	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
-	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
-	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c \
+	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
+	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
+	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
+	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
+	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
+	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
+	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
+	munlockall.c nanosleep.c net-accept-connect.c \
+	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
+	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
+	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
+	netlink_kobject_uevent.c netlink_netfilter.c \
+	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
+	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
+	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
+	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
+	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
+	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
+	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
+	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
+	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
+	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
+	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
+	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
+	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
+	osf_utimes.c pause.c pc.c perf_event_open.c \
+	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
+	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
+	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
+	prctl-dumpable.c prctl-name.c prctl-no-args.c \
+	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
-	preadv2-pwritev2.c print_maxfd.c printstr.c prlimit64.c \
-	process_vm_readv.c process_vm_writev.c pselect6.c ptrace.c \
-	pwritev.c qual_fault.c qual_inject-error-signal.c \
-	qual_inject-retval.c qual_inject-signal.c qual_signal.c \
-	quotactl.c quotactl-v.c quotactl-xfs.c quotactl-xfs-v.c \
-	read-write.c readahead.c readdir.c readlink.c readlinkat.c \
-	readv.c reboot.c recvfrom.c recvmmsg-timeout.c recvmsg.c \
-	redirect-fds.c remap_file_pages.c rename.c renameat.c \
-	renameat2.c request_key.c restart_syscall.c rmdir.c \
-	rt_sigaction.c rt_sigpending.c rt_sigprocmask.c \
-	rt_sigqueueinfo.c rt_sigreturn.c rt_sigsuspend.c \
-	rt_sigtimedwait.c rt_tgsigqueueinfo.c run_expect_termsig.c \
-	sched_get_priority_mxx.c sched_rr_get_interval.c \
-	sched_xetaffinity.c sched_xetattr.c sched_xetparam.c \
-	sched_xetscheduler.c sched_yield.c scm_rights.c \
-	seccomp-filter.c seccomp-filter-v.c seccomp-strict.c select.c \
-	semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c setdomainname.c setfsgid.c setfsgid32.c \
-	setfsuid.c setfsuid32.c setgid.c setgid32.c setgroups.c \
-	setgroups32.c sethostname.c setns.c setregid.c setregid32.c \
-	setresgid.c setresgid32.c setresuid.c setresuid32.c setreuid.c \
-	setreuid32.c setrlimit.c setuid.c setuid32.c shmxt.c \
-	shutdown.c sigaction.c sigaltstack.c siginfo.c signal.c \
-	signal_receive.c signalfd4.c sigpending.c sigprocmask.c \
-	sigreturn.c sigsuspend.c sleep.c socketcall.c splice.c \
+	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
+	printpath-umovestr-peekdata.c printpath-umovestr-undumpable.c \
+	printstr.c printstrn-umoven.c printstrn-umoven-peekdata.c \
+	printstrn-umoven-undumpable.c prlimit64.c process_vm_readv.c \
+	process_vm_writev.c pselect6.c ptrace.c pwritev.c qual_fault.c \
+	qual_inject-error-signal.c qual_inject-retval.c \
+	qual_inject-signal.c qual_signal.c quotactl.c quotactl-v.c \
+	quotactl-xfs.c quotactl-xfs-v.c read-write.c readahead.c \
+	readdir.c readlink.c readlinkat.c readv.c reboot.c recvfrom.c \
+	recvmmsg-timeout.c recvmsg.c redirect-fds.c remap_file_pages.c \
+	rename.c renameat.c renameat2.c request_key.c \
+	restart_syscall.c rmdir.c rt_sigaction.c rt_sigpending.c \
+	rt_sigprocmask.c rt_sigqueueinfo.c rt_sigreturn.c \
+	rt_sigsuspend.c rt_sigtimedwait.c rt_tgsigqueueinfo.c \
+	run_expect_termsig.c sched_get_priority_mxx.c \
+	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
+	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
+	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
+	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
+	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	setfsgid32.c setfsuid.c setfsuid32.c setgid.c setgid32.c \
+	setgroups.c setgroups32.c sethostname.c setns.c setregid.c \
+	setregid32.c setresgid.c setresgid32.c setresuid.c \
+	setresuid32.c setreuid.c setreuid32.c setrlimit.c setuid.c \
+	setuid32.c shmxt.c shutdown.c sigaction.c sigaltstack.c \
+	siginfo.c signal.c signal_receive.c signalfd4.c sigpending.c \
+	sigprocmask.c sigreturn.c sigsuspend.c sleep.c so_linger.c \
+	so_peercred.c sock_filter-v.c socketcall.c splice.c \
 	$(stack_fcall_SOURCES) stat.c stat64.c statfs.c statfs64.c \
 	statx.c swap.c sxetmask.c symlink.c symlinkat.c sync.c \
 	sync_file_range.c sync_file_range2.c sysinfo.c syslog.c tee.c \
@@ -2167,7 +2382,10 @@
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-am__extra_recursive_targets = check-valgrind-recursive
+am__extra_recursive_targets = check-valgrind-recursive \
+	check-valgrind-memcheck-recursive \
+	check-valgrind-helgrind-recursive check-valgrind-drd-recursive \
+	check-valgrind-sgcheck-recursive
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
@@ -2410,6 +2628,7 @@
 CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
 CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
 CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
 COPYRIGHT_YEAR = @COPYRIGHT_YEAR@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
@@ -2444,6 +2663,7 @@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANPAGE_DATE = @MANPAGE_DATE@
 MIPS_ABI = @MIPS_ABI@
 MKDIR_P = @MKDIR_P@
 OBJEXT = @OBJEXT@
@@ -2551,6 +2771,7 @@
 	get_sigset_size.c \
 	hexdump_strdup.c \
 	hexquote_strndup.c \
+	ifindex.c \
 	inode_of_sockfd.c \
 	libmmsg.c \
 	libsocketcall.c \
@@ -2564,7 +2785,12 @@
 	skip_unavailable.c \
 	sprintrc.c \
 	tail_alloc.c \
+	test_netlink.h \
 	test_nlattr.h \
+	test_printpath.c \
+	test_printstrn.c \
+	test_ucopy.c \
+	test_ucopy.h \
 	tests.h \
 	tprintf.c \
 	# end of libtests_a_SOURCES
@@ -2585,6 +2811,7 @@
   aio \
   alarm \
   bpf \
+  bpf-v \
   brk \
   btrfs \
   caps \
@@ -2625,6 +2852,7 @@
   fcntl \
   fcntl64 \
   fdatasync \
+  fflush \
   file_handle \
   file_ioctl \
   finit_module \
@@ -2668,6 +2896,7 @@
   getuid \
   getuid32 \
   getxxid \
+  group_req \
   inet-cmsg \
   init_module \
   inotify \
@@ -2742,7 +2971,9 @@
   net-yy-netlink \
   net-yy-unix \
   netlink_audit \
+  netlink_crypto \
   netlink_generic \
+  netlink_kobject_uevent \
   netlink_netfilter \
   netlink_protocol \
   netlink_route \
@@ -2751,8 +2982,30 @@
   netlink_xfrm \
   newfstatat \
   nlattr \
+  nlattr_crypto_user_alg \
+  nlattr_br_port_msg \
+  nlattr_dcbmsg \
+  nlattr_fib_rule_hdr \
+  nlattr_ifaddrlblmsg \
+  nlattr_ifaddrmsg \
+  nlattr_ifinfomsg \
+  nlattr_ifla_brport \
+  nlattr_ifla_port \
+  nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
+  nlattr_inet_diag_req_compat \
+  nlattr_inet_diag_req_v2 \
+  nlattr_ndmsg \
+  nlattr_ndtmsg \
+  nlattr_netconfmsg \
   nlattr_netlink_diag_msg \
+  nlattr_nlmsgerr \
+  nlattr_packet_diag_msg \
+  nlattr_rtgenmsg \
+  nlattr_rtmsg \
+  nlattr_smc_diag_msg \
+  nlattr_tcamsg \
+  nlattr_tcmsg \
   nlattr_unix_diag_msg \
   old_mmap \
   oldfstat \
@@ -2784,7 +3037,13 @@
   preadv \
   preadv-pwritev \
   preadv2-pwritev2 \
+  printpath-umovestr \
+  printpath-umovestr-peekdata \
+  printpath-umovestr-undumpable \
   printstr \
+  printstrn-umoven \
+  printstrn-umoven-peekdata \
+  printstrn-umoven-undumpable \
   prlimit64 \
   process_vm_readv \
   process_vm_writev \
@@ -2863,6 +3122,9 @@
   sigprocmask \
   sigreturn \
   sigsuspend \
+  so_linger \
+  so_peercred \
+  sock_filter-v \
   socketcall \
   splice \
   stat \
@@ -2954,35 +3216,36 @@
 GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test \
 	access.gen.test acct.gen.test add_key.gen.test \
 	adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test \
-	btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test \
-	chroot.gen.test clock.gen.test clock_adjtime.gen.test \
-	clock_nanosleep.gen.test clock_xettime.gen.test \
-	copy_file_range.gen.test creat.gen.test delete_module.gen.test \
-	dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test \
-	epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test \
-	epoll_wait.gen.test erestartsys.gen.test execveat.gen.test \
-	execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test \
-	fallocate.gen.test fanotify_init.gen.test \
-	fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test \
-	fchmodat.gen.test fchown.gen.test fchown32.gen.test \
-	fchownat.gen.test fcntl.gen.test fcntl64.gen.test \
-	fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test \
-	finit_module.gen.test flock.gen.test fork-f.gen.test \
-	fstat.gen.test fstat64.gen.test fstatat64.gen.test \
-	fstatfs.gen.test fstatfs64.gen.test fsync.gen.test \
-	ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test \
-	get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test \
-	getdents.gen.test getdents64.gen.test getegid.gen.test \
-	getegid32.gen.test geteuid.gen.test geteuid32.gen.test \
-	getgid.gen.test getgid32.gen.test getgroups.gen.test \
-	getgroups32.gen.test getpeername.gen.test getpgrp.gen.test \
-	getpid.gen.test getppid.gen.test getrandom.gen.test \
-	getresgid.gen.test getresgid32.gen.test getresuid.gen.test \
-	getresuid32.gen.test getrlimit.gen.test getrusage.gen.test \
-	getsid.gen.test getsockname.gen.test gettid.gen.test \
-	getuid32.gen.test getxxid.gen.test inet-cmsg.gen.test \
-	init_module.gen.test inotify.gen.test inotify_init1.gen.test \
-	int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test \
+	bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test \
+	chown32.gen.test chroot.gen.test clock.gen.test \
+	clock_adjtime.gen.test clock_nanosleep.gen.test \
+	clock_xettime.gen.test copy_file_range.gen.test creat.gen.test \
+	delete_module.gen.test dup.gen.test dup2.gen.test \
+	dup3.gen.test epoll_create.gen.test epoll_create1.gen.test \
+	epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test \
+	erestartsys.gen.test execveat.gen.test execveat-v.gen.test \
+	faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test \
+	fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test \
+	fchmod.gen.test fchmodat.gen.test fchown.gen.test \
+	fchown32.gen.test fchownat.gen.test fcntl.gen.test \
+	fcntl64.gen.test fdatasync.gen.test file_handle.gen.test \
+	file_ioctl.gen.test finit_module.gen.test flock.gen.test \
+	fork-f.gen.test fstat.gen.test fstat64.gen.test \
+	fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test \
+	fsync.gen.test ftruncate.gen.test ftruncate64.gen.test \
+	futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test \
+	getcwd.gen.test getdents.gen.test getdents64.gen.test \
+	getegid.gen.test getegid32.gen.test geteuid.gen.test \
+	geteuid32.gen.test getgid.gen.test getgid32.gen.test \
+	getgroups.gen.test getgroups32.gen.test getpeername.gen.test \
+	getpgrp.gen.test getpid.gen.test getppid.gen.test \
+	getrandom.gen.test getresgid.gen.test getresgid32.gen.test \
+	getresuid.gen.test getresuid32.gen.test getrlimit.gen.test \
+	getrusage.gen.test getsid.gen.test getsockname.gen.test \
+	gettid.gen.test getuid32.gen.test getxxid.gen.test \
+	group_req.gen.test inet-cmsg.gen.test init_module.gen.test \
+	inotify.gen.test inotify_init1.gen.test int_0x80.gen.test \
+	ioctl_block.gen.test ioctl_evdev.gen.test \
 	ioctl_evdev-v.gen.test ioctl_loop.gen.test \
 	ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test \
 	ioctl_rtc-v.gen.test ioctl_scsi.gen.test \
@@ -3006,11 +3269,24 @@
 	msg_control-v.gen.test msg_name.gen.test munlockall.gen.test \
 	nanosleep.gen.test net-icmp_filter.gen.test \
 	net-sockaddr.gen.test netlink_audit.gen.test \
-	netlink_generic.gen.test netlink_netfilter.gen.test \
+	netlink_crypto.gen.test netlink_generic.gen.test \
+	netlink_kobject_uevent.gen.test netlink_netfilter.gen.test \
 	netlink_protocol.gen.test netlink_route.gen.test \
 	netlink_selinux.gen.test netlink_xfrm.gen.test \
 	newfstatat.gen.test nlattr.gen.test \
-	nlattr_inet_diag_msg.gen.test nlattr_netlink_diag_msg.gen.test \
+	nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test \
+	nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test \
+	nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test \
+	nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test \
+	nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test \
+	nlattr_inet_diag_msg.gen.test \
+	nlattr_inet_diag_req_compat.gen.test \
+	nlattr_inet_diag_req_v2.gen.test nlattr_ndmsg.gen.test \
+	nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test \
+	nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test \
+	nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test \
+	nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test \
+	nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
 	nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
 	oldfstat.gen.test oldlstat.gen.test oldstat.gen.test \
 	open.gen.test openat.gen.test osf_utimes.gen.test \
@@ -3020,7 +3296,12 @@
 	pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test \
 	ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test \
 	preadv.gen.test preadv-pwritev.gen.test \
-	preadv2-pwritev2.gen.test printstr.gen.test prlimit64.gen.test \
+	preadv2-pwritev2.gen.test printstr.gen.test \
+	printpath-umovestr.gen.test \
+	printpath-umovestr-peekdata.gen.test \
+	printpath-umovestr-undumpable.gen.test \
+	printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test \
+	printstrn-umoven-undumpable.gen.test prlimit64.gen.test \
 	process_vm_readv.gen.test process_vm_writev.gen.test \
 	pselect6.gen.test ptrace.gen.test pwritev.gen.test \
 	quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test \
@@ -3051,6 +3332,7 @@
 	sigaction.gen.test siginfo.gen.test signal.gen.test \
 	signal_receive.gen.test signalfd4.gen.test sigpending.gen.test \
 	sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test \
+	so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test \
 	socketcall.gen.test splice.gen.test stat.gen.test \
 	stat64.gen.test statfs.gen.test statfs64.gen.test \
 	statx.gen.test swap.gen.test sxetmask.gen.test \
@@ -3141,18 +3423,23 @@
 	attach-f-p.test \
 	attach-p-cmd.test \
 	bexecve.test \
+	clone_parent.test \
+	clone_ptrace.test \
 	count-f.test \
 	count.test \
 	detach-running.test \
 	detach-sleeping.test \
 	detach-stopped.test \
 	filter-unavailable.test \
+	fflush.test \
 	get_regs.test \
 	interactive_block.test \
 	ksysent.test \
 	opipe.test \
 	options-syntax.test \
 	pc.test \
+	printpath-umovestr-legacy.test \
+	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
 	qual_inject-error-signal.test \
@@ -3187,7 +3474,7 @@
 TEST_LOG_COMPILER = env
 AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) MIPS_ABI=$(MIPS_ABI) $(srcdir)/run.sh
 VALGRIND_FLAGS = --quiet
-VALGRIND_SUPPRESSIONS_FILES = $(srcdir)/strace.supp
+VALGRIND_SUPPRESSIONS_FILES = $(abs_srcdir)/strace.supp
 EXTRA_DIST = \
 	caps-abbrev.awk \
 	caps.awk \
@@ -3211,6 +3498,7 @@
 	lstatx.c \
 	match.awk \
 	net.expected \
+	netlink_sock_diag-v.sh \
 	oldselect.expected \
 	pipe.expected \
 	process_vm_readv_writev.c \
@@ -3239,6 +3527,7 @@
 	strace.supp \
 	struct_flock.c \
 	sun_path.expected \
+	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
@@ -3263,6 +3552,7 @@
 	$(TESTS)
 
 objects = $(filter %.$(OBJEXT),$(SOURCES:.c=.$(OBJEXT)))
+BUILT_SOURCES = ksysent.h scno.h
 CLEANFILES = ksysent.h syscallent.i scno.h
 SCNO_CPPFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 		$(ARCH_MFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS)
@@ -3270,7 +3560,8 @@
 digits = [[:digit:]][[:digit:]]*
 al_nums = [[:alnum:]_][[:alnum:]_]*
 SCNO_SED = /TRACE_INDIRECT_SUBCALL/d; s/^\[[[:space:]]*\($(digits)\)\][[:space:]]*=[[:space:]]*{[^,]*,[^,]*,[^,]*,[[:space:]]*"\($(al_nums)\)"[[:space:]]*},.*/\#ifndef __NR_\2\n\# define __NR_\2 (SYSCALL_BIT | \1)\n\#endif/p
-all: all-am
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs
@@ -3381,6 +3672,10 @@
 	@rm -f bpf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bpf_OBJECTS) $(bpf_LDADD) $(LIBS)
 
+bpf-v$(EXEEXT): $(bpf_v_OBJECTS) $(bpf_v_DEPENDENCIES) $(EXTRA_bpf_v_DEPENDENCIES) 
+	@rm -f bpf-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_v_OBJECTS) $(bpf_v_LDADD) $(LIBS)
+
 brk$(EXEEXT): $(brk_OBJECTS) $(brk_DEPENDENCIES) $(EXTRA_brk_DEPENDENCIES) 
 	@rm -f brk$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(brk_OBJECTS) $(brk_LDADD) $(LIBS)
@@ -3425,6 +3720,14 @@
 	@rm -f clock_xettime$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(clock_xettime_OBJECTS) $(clock_xettime_LDADD) $(LIBS)
 
+clone_parent$(EXEEXT): $(clone_parent_OBJECTS) $(clone_parent_DEPENDENCIES) $(EXTRA_clone_parent_DEPENDENCIES) 
+	@rm -f clone_parent$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(clone_parent_OBJECTS) $(clone_parent_LDADD) $(LIBS)
+
+clone_ptrace$(EXEEXT): $(clone_ptrace_OBJECTS) $(clone_ptrace_DEPENDENCIES) $(EXTRA_clone_ptrace_DEPENDENCIES) 
+	@rm -f clone_ptrace$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(clone_ptrace_OBJECTS) $(clone_ptrace_LDADD) $(LIBS)
+
 copy_file_range$(EXEEXT): $(copy_file_range_OBJECTS) $(copy_file_range_DEPENDENCIES) $(EXTRA_copy_file_range_DEPENDENCIES) 
 	@rm -f copy_file_range$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(copy_file_range_OBJECTS) $(copy_file_range_LDADD) $(LIBS)
@@ -3557,6 +3860,10 @@
 	@rm -f fdatasync$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fdatasync_OBJECTS) $(fdatasync_LDADD) $(LIBS)
 
+fflush$(EXEEXT): $(fflush_OBJECTS) $(fflush_DEPENDENCIES) $(EXTRA_fflush_DEPENDENCIES) 
+	@rm -f fflush$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fflush_OBJECTS) $(fflush_LDADD) $(LIBS)
+
 file_handle$(EXEEXT): $(file_handle_OBJECTS) $(file_handle_DEPENDENCIES) $(EXTRA_file_handle_DEPENDENCIES) 
 	@rm -f file_handle$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(file_handle_OBJECTS) $(file_handle_LDADD) $(LIBS)
@@ -3741,6 +4048,10 @@
 	@rm -f getxxid$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(getxxid_OBJECTS) $(getxxid_LDADD) $(LIBS)
 
+group_req$(EXEEXT): $(group_req_OBJECTS) $(group_req_DEPENDENCIES) $(EXTRA_group_req_DEPENDENCIES) 
+	@rm -f group_req$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(group_req_OBJECTS) $(group_req_LDADD) $(LIBS)
+
 inet-cmsg$(EXEEXT): $(inet_cmsg_OBJECTS) $(inet_cmsg_DEPENDENCIES) $(EXTRA_inet_cmsg_DEPENDENCIES) 
 	@rm -f inet-cmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(inet_cmsg_OBJECTS) $(inet_cmsg_LDADD) $(LIBS)
@@ -3873,6 +4184,10 @@
 	@rm -f ipc_shm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_shm_OBJECTS) $(ipc_shm_LDADD) $(LIBS)
 
+is_linux_mips_n64$(EXEEXT): $(is_linux_mips_n64_OBJECTS) $(is_linux_mips_n64_DEPENDENCIES) $(EXTRA_is_linux_mips_n64_DEPENDENCIES) 
+	@rm -f is_linux_mips_n64$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(is_linux_mips_n64_OBJECTS) $(is_linux_mips_n64_LDADD) $(LIBS)
+
 kcmp$(EXEEXT): $(kcmp_OBJECTS) $(kcmp_DEPENDENCIES) $(EXTRA_kcmp_DEPENDENCIES) 
 	@rm -f kcmp$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kcmp_OBJECTS) $(kcmp_LDADD) $(LIBS)
@@ -4085,6 +4400,10 @@
 	@rm -f netlink_audit$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_audit_OBJECTS) $(netlink_audit_LDADD) $(LIBS)
 
+netlink_crypto$(EXEEXT): $(netlink_crypto_OBJECTS) $(netlink_crypto_DEPENDENCIES) $(EXTRA_netlink_crypto_DEPENDENCIES) 
+	@rm -f netlink_crypto$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(netlink_crypto_OBJECTS) $(netlink_crypto_LDADD) $(LIBS)
+
 netlink_generic$(EXEEXT): $(netlink_generic_OBJECTS) $(netlink_generic_DEPENDENCIES) $(EXTRA_netlink_generic_DEPENDENCIES) 
 	@rm -f netlink_generic$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_generic_OBJECTS) $(netlink_generic_LDADD) $(LIBS)
@@ -4093,6 +4412,10 @@
 	@rm -f netlink_inet_diag$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_inet_diag_OBJECTS) $(netlink_inet_diag_LDADD) $(LIBS)
 
+netlink_kobject_uevent$(EXEEXT): $(netlink_kobject_uevent_OBJECTS) $(netlink_kobject_uevent_DEPENDENCIES) $(EXTRA_netlink_kobject_uevent_DEPENDENCIES) 
+	@rm -f netlink_kobject_uevent$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(netlink_kobject_uevent_OBJECTS) $(netlink_kobject_uevent_LDADD) $(LIBS)
+
 netlink_netfilter$(EXEEXT): $(netlink_netfilter_OBJECTS) $(netlink_netfilter_DEPENDENCIES) $(EXTRA_netlink_netfilter_DEPENDENCIES) 
 	@rm -f netlink_netfilter$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(netlink_netfilter_OBJECTS) $(netlink_netfilter_LDADD) $(LIBS)
@@ -4133,14 +4456,102 @@
 	@rm -f nlattr$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_OBJECTS) $(nlattr_LDADD) $(LIBS)
 
+nlattr_br_port_msg$(EXEEXT): $(nlattr_br_port_msg_OBJECTS) $(nlattr_br_port_msg_DEPENDENCIES) $(EXTRA_nlattr_br_port_msg_DEPENDENCIES) 
+	@rm -f nlattr_br_port_msg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_br_port_msg_OBJECTS) $(nlattr_br_port_msg_LDADD) $(LIBS)
+
+nlattr_crypto_user_alg$(EXEEXT): $(nlattr_crypto_user_alg_OBJECTS) $(nlattr_crypto_user_alg_DEPENDENCIES) $(EXTRA_nlattr_crypto_user_alg_DEPENDENCIES) 
+	@rm -f nlattr_crypto_user_alg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_crypto_user_alg_OBJECTS) $(nlattr_crypto_user_alg_LDADD) $(LIBS)
+
+nlattr_dcbmsg$(EXEEXT): $(nlattr_dcbmsg_OBJECTS) $(nlattr_dcbmsg_DEPENDENCIES) $(EXTRA_nlattr_dcbmsg_DEPENDENCIES) 
+	@rm -f nlattr_dcbmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_dcbmsg_OBJECTS) $(nlattr_dcbmsg_LDADD) $(LIBS)
+
+nlattr_fib_rule_hdr$(EXEEXT): $(nlattr_fib_rule_hdr_OBJECTS) $(nlattr_fib_rule_hdr_DEPENDENCIES) $(EXTRA_nlattr_fib_rule_hdr_DEPENDENCIES) 
+	@rm -f nlattr_fib_rule_hdr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_fib_rule_hdr_OBJECTS) $(nlattr_fib_rule_hdr_LDADD) $(LIBS)
+
+nlattr_ifaddrlblmsg$(EXEEXT): $(nlattr_ifaddrlblmsg_OBJECTS) $(nlattr_ifaddrlblmsg_DEPENDENCIES) $(EXTRA_nlattr_ifaddrlblmsg_DEPENDENCIES) 
+	@rm -f nlattr_ifaddrlblmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifaddrlblmsg_OBJECTS) $(nlattr_ifaddrlblmsg_LDADD) $(LIBS)
+
+nlattr_ifaddrmsg$(EXEEXT): $(nlattr_ifaddrmsg_OBJECTS) $(nlattr_ifaddrmsg_DEPENDENCIES) $(EXTRA_nlattr_ifaddrmsg_DEPENDENCIES) 
+	@rm -f nlattr_ifaddrmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifaddrmsg_OBJECTS) $(nlattr_ifaddrmsg_LDADD) $(LIBS)
+
+nlattr_ifinfomsg$(EXEEXT): $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_DEPENDENCIES) $(EXTRA_nlattr_ifinfomsg_DEPENDENCIES) 
+	@rm -f nlattr_ifinfomsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_LDADD) $(LIBS)
+
+nlattr_ifla_brport$(EXEEXT): $(nlattr_ifla_brport_OBJECTS) $(nlattr_ifla_brport_DEPENDENCIES) $(EXTRA_nlattr_ifla_brport_DEPENDENCIES) 
+	@rm -f nlattr_ifla_brport$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_brport_OBJECTS) $(nlattr_ifla_brport_LDADD) $(LIBS)
+
+nlattr_ifla_port$(EXEEXT): $(nlattr_ifla_port_OBJECTS) $(nlattr_ifla_port_DEPENDENCIES) $(EXTRA_nlattr_ifla_port_DEPENDENCIES) 
+	@rm -f nlattr_ifla_port$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_port_OBJECTS) $(nlattr_ifla_port_LDADD) $(LIBS)
+
+nlattr_ifla_xdp$(EXEEXT): $(nlattr_ifla_xdp_OBJECTS) $(nlattr_ifla_xdp_DEPENDENCIES) $(EXTRA_nlattr_ifla_xdp_DEPENDENCIES) 
+	@rm -f nlattr_ifla_xdp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_xdp_OBJECTS) $(nlattr_ifla_xdp_LDADD) $(LIBS)
+
 nlattr_inet_diag_msg$(EXEEXT): $(nlattr_inet_diag_msg_OBJECTS) $(nlattr_inet_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_inet_diag_msg_DEPENDENCIES) 
 	@rm -f nlattr_inet_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_msg_OBJECTS) $(nlattr_inet_diag_msg_LDADD) $(LIBS)
 
+nlattr_inet_diag_req_compat$(EXEEXT): $(nlattr_inet_diag_req_compat_OBJECTS) $(nlattr_inet_diag_req_compat_DEPENDENCIES) $(EXTRA_nlattr_inet_diag_req_compat_DEPENDENCIES) 
+	@rm -f nlattr_inet_diag_req_compat$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_req_compat_OBJECTS) $(nlattr_inet_diag_req_compat_LDADD) $(LIBS)
+
+nlattr_inet_diag_req_v2$(EXEEXT): $(nlattr_inet_diag_req_v2_OBJECTS) $(nlattr_inet_diag_req_v2_DEPENDENCIES) $(EXTRA_nlattr_inet_diag_req_v2_DEPENDENCIES) 
+	@rm -f nlattr_inet_diag_req_v2$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_req_v2_OBJECTS) $(nlattr_inet_diag_req_v2_LDADD) $(LIBS)
+
+nlattr_ndmsg$(EXEEXT): $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_DEPENDENCIES) $(EXTRA_nlattr_ndmsg_DEPENDENCIES) 
+	@rm -f nlattr_ndmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_LDADD) $(LIBS)
+
+nlattr_ndtmsg$(EXEEXT): $(nlattr_ndtmsg_OBJECTS) $(nlattr_ndtmsg_DEPENDENCIES) $(EXTRA_nlattr_ndtmsg_DEPENDENCIES) 
+	@rm -f nlattr_ndtmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ndtmsg_OBJECTS) $(nlattr_ndtmsg_LDADD) $(LIBS)
+
+nlattr_netconfmsg$(EXEEXT): $(nlattr_netconfmsg_OBJECTS) $(nlattr_netconfmsg_DEPENDENCIES) $(EXTRA_nlattr_netconfmsg_DEPENDENCIES) 
+	@rm -f nlattr_netconfmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_netconfmsg_OBJECTS) $(nlattr_netconfmsg_LDADD) $(LIBS)
+
 nlattr_netlink_diag_msg$(EXEEXT): $(nlattr_netlink_diag_msg_OBJECTS) $(nlattr_netlink_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_netlink_diag_msg_DEPENDENCIES) 
 	@rm -f nlattr_netlink_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_netlink_diag_msg_OBJECTS) $(nlattr_netlink_diag_msg_LDADD) $(LIBS)
 
+nlattr_nlmsgerr$(EXEEXT): $(nlattr_nlmsgerr_OBJECTS) $(nlattr_nlmsgerr_DEPENDENCIES) $(EXTRA_nlattr_nlmsgerr_DEPENDENCIES) 
+	@rm -f nlattr_nlmsgerr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_nlmsgerr_OBJECTS) $(nlattr_nlmsgerr_LDADD) $(LIBS)
+
+nlattr_packet_diag_msg$(EXEEXT): $(nlattr_packet_diag_msg_OBJECTS) $(nlattr_packet_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_packet_diag_msg_DEPENDENCIES) 
+	@rm -f nlattr_packet_diag_msg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_packet_diag_msg_OBJECTS) $(nlattr_packet_diag_msg_LDADD) $(LIBS)
+
+nlattr_rtgenmsg$(EXEEXT): $(nlattr_rtgenmsg_OBJECTS) $(nlattr_rtgenmsg_DEPENDENCIES) $(EXTRA_nlattr_rtgenmsg_DEPENDENCIES) 
+	@rm -f nlattr_rtgenmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_rtgenmsg_OBJECTS) $(nlattr_rtgenmsg_LDADD) $(LIBS)
+
+nlattr_rtmsg$(EXEEXT): $(nlattr_rtmsg_OBJECTS) $(nlattr_rtmsg_DEPENDENCIES) $(EXTRA_nlattr_rtmsg_DEPENDENCIES) 
+	@rm -f nlattr_rtmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_rtmsg_OBJECTS) $(nlattr_rtmsg_LDADD) $(LIBS)
+
+nlattr_smc_diag_msg$(EXEEXT): $(nlattr_smc_diag_msg_OBJECTS) $(nlattr_smc_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_smc_diag_msg_DEPENDENCIES) 
+	@rm -f nlattr_smc_diag_msg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_smc_diag_msg_OBJECTS) $(nlattr_smc_diag_msg_LDADD) $(LIBS)
+
+nlattr_tcamsg$(EXEEXT): $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_DEPENDENCIES) $(EXTRA_nlattr_tcamsg_DEPENDENCIES) 
+	@rm -f nlattr_tcamsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_LDADD) $(LIBS)
+
+nlattr_tcmsg$(EXEEXT): $(nlattr_tcmsg_OBJECTS) $(nlattr_tcmsg_DEPENDENCIES) $(EXTRA_nlattr_tcmsg_DEPENDENCIES) 
+	@rm -f nlattr_tcmsg$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tcmsg_OBJECTS) $(nlattr_tcmsg_LDADD) $(LIBS)
+
 nlattr_unix_diag_msg$(EXEEXT): $(nlattr_unix_diag_msg_OBJECTS) $(nlattr_unix_diag_msg_DEPENDENCIES) $(EXTRA_nlattr_unix_diag_msg_DEPENDENCIES) 
 	@rm -f nlattr_unix_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_unix_diag_msg_OBJECTS) $(nlattr_unix_diag_msg_LDADD) $(LIBS)
@@ -4297,10 +4708,34 @@
 	@rm -f print_maxfd$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(print_maxfd_OBJECTS) $(print_maxfd_LDADD) $(LIBS)
 
+printpath-umovestr$(EXEEXT): $(printpath_umovestr_OBJECTS) $(printpath_umovestr_DEPENDENCIES) $(EXTRA_printpath_umovestr_DEPENDENCIES) 
+	@rm -f printpath-umovestr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printpath_umovestr_OBJECTS) $(printpath_umovestr_LDADD) $(LIBS)
+
+printpath-umovestr-peekdata$(EXEEXT): $(printpath_umovestr_peekdata_OBJECTS) $(printpath_umovestr_peekdata_DEPENDENCIES) $(EXTRA_printpath_umovestr_peekdata_DEPENDENCIES) 
+	@rm -f printpath-umovestr-peekdata$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printpath_umovestr_peekdata_OBJECTS) $(printpath_umovestr_peekdata_LDADD) $(LIBS)
+
+printpath-umovestr-undumpable$(EXEEXT): $(printpath_umovestr_undumpable_OBJECTS) $(printpath_umovestr_undumpable_DEPENDENCIES) $(EXTRA_printpath_umovestr_undumpable_DEPENDENCIES) 
+	@rm -f printpath-umovestr-undumpable$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printpath_umovestr_undumpable_OBJECTS) $(printpath_umovestr_undumpable_LDADD) $(LIBS)
+
 printstr$(EXEEXT): $(printstr_OBJECTS) $(printstr_DEPENDENCIES) $(EXTRA_printstr_DEPENDENCIES) 
 	@rm -f printstr$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(printstr_OBJECTS) $(printstr_LDADD) $(LIBS)
 
+printstrn-umoven$(EXEEXT): $(printstrn_umoven_OBJECTS) $(printstrn_umoven_DEPENDENCIES) $(EXTRA_printstrn_umoven_DEPENDENCIES) 
+	@rm -f printstrn-umoven$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printstrn_umoven_OBJECTS) $(printstrn_umoven_LDADD) $(LIBS)
+
+printstrn-umoven-peekdata$(EXEEXT): $(printstrn_umoven_peekdata_OBJECTS) $(printstrn_umoven_peekdata_DEPENDENCIES) $(EXTRA_printstrn_umoven_peekdata_DEPENDENCIES) 
+	@rm -f printstrn-umoven-peekdata$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printstrn_umoven_peekdata_OBJECTS) $(printstrn_umoven_peekdata_LDADD) $(LIBS)
+
+printstrn-umoven-undumpable$(EXEEXT): $(printstrn_umoven_undumpable_OBJECTS) $(printstrn_umoven_undumpable_DEPENDENCIES) $(EXTRA_printstrn_umoven_undumpable_DEPENDENCIES) 
+	@rm -f printstrn-umoven-undumpable$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(printstrn_umoven_undumpable_OBJECTS) $(printstrn_umoven_undumpable_LDADD) $(LIBS)
+
 prlimit64$(EXEEXT): $(prlimit64_OBJECTS) $(prlimit64_DEPENDENCIES) $(EXTRA_prlimit64_DEPENDENCIES) 
 	@rm -f prlimit64$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prlimit64_OBJECTS) $(prlimit64_LDADD) $(LIBS)
@@ -4677,6 +5112,18 @@
 	@rm -f sleep$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(sleep_OBJECTS) $(sleep_LDADD) $(LIBS)
 
+so_linger$(EXEEXT): $(so_linger_OBJECTS) $(so_linger_DEPENDENCIES) $(EXTRA_so_linger_DEPENDENCIES) 
+	@rm -f so_linger$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_linger_OBJECTS) $(so_linger_LDADD) $(LIBS)
+
+so_peercred$(EXEEXT): $(so_peercred_OBJECTS) $(so_peercred_DEPENDENCIES) $(EXTRA_so_peercred_DEPENDENCIES) 
+	@rm -f so_peercred$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_OBJECTS) $(so_peercred_LDADD) $(LIBS)
+
+sock_filter-v$(EXEEXT): $(sock_filter_v_OBJECTS) $(sock_filter_v_DEPENDENCIES) $(EXTRA_sock_filter_v_DEPENDENCIES) 
+	@rm -f sock_filter-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_OBJECTS) $(sock_filter_v_LDADD) $(LIBS)
+
 socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_socketcall_DEPENDENCIES) 
 	@rm -f socketcall$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
@@ -4958,6 +5405,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach-p-cmd-cmd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach-p-cmd-p.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/block_reset_raise_run.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/brk.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btrfs.Po@am__quote@
@@ -4970,6 +5418,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_adjtime.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_nanosleep.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_xettime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clone_parent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clone_ptrace.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy_file_range.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count-f.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/creat.Po@am__quote@
@@ -5003,6 +5453,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdatasync.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fflush.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_handle.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_ioctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filter-unavailable.Po@am__quote@
@@ -5049,6 +5500,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getuid.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getuid32.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getxxid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/group_req.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet-cmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init_module.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inotify.Po@am__quote@
@@ -5082,6 +5534,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_linux_mips_n64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcmp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_file_load.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_load.Po@am__quote@
@@ -5098,6 +5551,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-get_sigset_size.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-hexdump_strdup.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-hexquote_strndup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-ifindex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-inode_of_sockfd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libmmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libsocketcall.Po@am__quote@
@@ -5111,6 +5565,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-skip_unavailable.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-sprintrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-tail_alloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-test_printpath.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-test_printstrn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-test_ucopy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-tprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linkat.Po@am__quote@
@@ -5157,8 +5614,10 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net-yy-netlink.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net-yy-unix.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_audit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_crypto.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_generic.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_inet_diag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_kobject_uevent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_netfilter.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_netlink_diag.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_protocol.Po@am__quote@
@@ -5169,8 +5628,30 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_xfrm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newfstatat-newfstatat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_br_port_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_crypto_user_alg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_dcbmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_fib_rule_hdr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifaddrlblmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifaddrmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifinfomsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifla_brport.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifla_port.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ifla_xdp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_compat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_v2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndtmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_netconfmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_netlink_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_nlmsgerr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_packet_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtgenmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_smc_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcamsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_unix_diag_msg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap.Po@am__quote@
@@ -5210,7 +5691,13 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preadv2-pwritev2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preadv_pwritev-preadv-pwritev.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_maxfd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printpath-umovestr-peekdata.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printpath-umovestr-undumpable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printpath-umovestr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstrn-umoven-peekdata.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstrn-umoven-undumpable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printstrn-umoven.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prlimit64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process_vm_readv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process_vm_writev.Po@am__quote@
@@ -5305,6 +5792,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigreturn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigsuspend.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_linger.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socketcall.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splice.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-0.Po@am__quote@
@@ -5501,6 +5991,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-hexquote_strndup.obj `if test -f 'hexquote_strndup.c'; then $(CYGPATH_W) 'hexquote_strndup.c'; else $(CYGPATH_W) '$(srcdir)/hexquote_strndup.c'; fi`
 
+libtests_a-ifindex.o: ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-ifindex.o -MD -MP -MF $(DEPDIR)/libtests_a-ifindex.Tpo -c -o libtests_a-ifindex.o `test -f 'ifindex.c' || echo '$(srcdir)/'`ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-ifindex.Tpo $(DEPDIR)/libtests_a-ifindex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='ifindex.c' object='libtests_a-ifindex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-ifindex.o `test -f 'ifindex.c' || echo '$(srcdir)/'`ifindex.c
+
+libtests_a-ifindex.obj: ifindex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-ifindex.obj -MD -MP -MF $(DEPDIR)/libtests_a-ifindex.Tpo -c -o libtests_a-ifindex.obj `if test -f 'ifindex.c'; then $(CYGPATH_W) 'ifindex.c'; else $(CYGPATH_W) '$(srcdir)/ifindex.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-ifindex.Tpo $(DEPDIR)/libtests_a-ifindex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='ifindex.c' object='libtests_a-ifindex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-ifindex.obj `if test -f 'ifindex.c'; then $(CYGPATH_W) 'ifindex.c'; else $(CYGPATH_W) '$(srcdir)/ifindex.c'; fi`
+
 libtests_a-inode_of_sockfd.o: inode_of_sockfd.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-inode_of_sockfd.o -MD -MP -MF $(DEPDIR)/libtests_a-inode_of_sockfd.Tpo -c -o libtests_a-inode_of_sockfd.o `test -f 'inode_of_sockfd.c' || echo '$(srcdir)/'`inode_of_sockfd.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-inode_of_sockfd.Tpo $(DEPDIR)/libtests_a-inode_of_sockfd.Po
@@ -5683,6 +6187,48 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-tail_alloc.obj `if test -f 'tail_alloc.c'; then $(CYGPATH_W) 'tail_alloc.c'; else $(CYGPATH_W) '$(srcdir)/tail_alloc.c'; fi`
 
+libtests_a-test_printpath.o: test_printpath.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printpath.o -MD -MP -MF $(DEPDIR)/libtests_a-test_printpath.Tpo -c -o libtests_a-test_printpath.o `test -f 'test_printpath.c' || echo '$(srcdir)/'`test_printpath.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printpath.Tpo $(DEPDIR)/libtests_a-test_printpath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printpath.c' object='libtests_a-test_printpath.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printpath.o `test -f 'test_printpath.c' || echo '$(srcdir)/'`test_printpath.c
+
+libtests_a-test_printpath.obj: test_printpath.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printpath.obj -MD -MP -MF $(DEPDIR)/libtests_a-test_printpath.Tpo -c -o libtests_a-test_printpath.obj `if test -f 'test_printpath.c'; then $(CYGPATH_W) 'test_printpath.c'; else $(CYGPATH_W) '$(srcdir)/test_printpath.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printpath.Tpo $(DEPDIR)/libtests_a-test_printpath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printpath.c' object='libtests_a-test_printpath.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printpath.obj `if test -f 'test_printpath.c'; then $(CYGPATH_W) 'test_printpath.c'; else $(CYGPATH_W) '$(srcdir)/test_printpath.c'; fi`
+
+libtests_a-test_printstrn.o: test_printstrn.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printstrn.o -MD -MP -MF $(DEPDIR)/libtests_a-test_printstrn.Tpo -c -o libtests_a-test_printstrn.o `test -f 'test_printstrn.c' || echo '$(srcdir)/'`test_printstrn.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printstrn.Tpo $(DEPDIR)/libtests_a-test_printstrn.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printstrn.c' object='libtests_a-test_printstrn.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printstrn.o `test -f 'test_printstrn.c' || echo '$(srcdir)/'`test_printstrn.c
+
+libtests_a-test_printstrn.obj: test_printstrn.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_printstrn.obj -MD -MP -MF $(DEPDIR)/libtests_a-test_printstrn.Tpo -c -o libtests_a-test_printstrn.obj `if test -f 'test_printstrn.c'; then $(CYGPATH_W) 'test_printstrn.c'; else $(CYGPATH_W) '$(srcdir)/test_printstrn.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_printstrn.Tpo $(DEPDIR)/libtests_a-test_printstrn.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_printstrn.c' object='libtests_a-test_printstrn.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_printstrn.obj `if test -f 'test_printstrn.c'; then $(CYGPATH_W) 'test_printstrn.c'; else $(CYGPATH_W) '$(srcdir)/test_printstrn.c'; fi`
+
+libtests_a-test_ucopy.o: test_ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_ucopy.o -MD -MP -MF $(DEPDIR)/libtests_a-test_ucopy.Tpo -c -o libtests_a-test_ucopy.o `test -f 'test_ucopy.c' || echo '$(srcdir)/'`test_ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_ucopy.Tpo $(DEPDIR)/libtests_a-test_ucopy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_ucopy.c' object='libtests_a-test_ucopy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_ucopy.o `test -f 'test_ucopy.c' || echo '$(srcdir)/'`test_ucopy.c
+
+libtests_a-test_ucopy.obj: test_ucopy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-test_ucopy.obj -MD -MP -MF $(DEPDIR)/libtests_a-test_ucopy.Tpo -c -o libtests_a-test_ucopy.obj `if test -f 'test_ucopy.c'; then $(CYGPATH_W) 'test_ucopy.c'; else $(CYGPATH_W) '$(srcdir)/test_ucopy.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-test_ucopy.Tpo $(DEPDIR)/libtests_a-test_ucopy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test_ucopy.c' object='libtests_a-test_ucopy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-test_ucopy.obj `if test -f 'test_ucopy.c'; then $(CYGPATH_W) 'test_ucopy.c'; else $(CYGPATH_W) '$(srcdir)/test_ucopy.c'; fi`
+
 libtests_a-tprintf.o: tprintf.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-tprintf.o -MD -MP -MF $(DEPDIR)/libtests_a-tprintf.Tpo -c -o libtests_a-tprintf.o `test -f 'tprintf.c' || echo '$(srcdir)/'`tprintf.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-tprintf.Tpo $(DEPDIR)/libtests_a-tprintf.Po
@@ -5893,6 +6439,10 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o uio-uio.obj `if test -f 'uio.c'; then $(CYGPATH_W) 'uio.c'; else $(CYGPATH_W) '$(srcdir)/uio.c'; fi`
 check-valgrind-local: 
+check-valgrind-memcheck-local: 
+check-valgrind-helgrind-local: 
+check-valgrind-drd-local: 
+check-valgrind-sgcheck-local: 
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -6135,10 +6685,12 @@
 check-am: all-am
 	$(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) $(check_PROGRAMS)
 	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: check-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
 all-am: Makefile
 installdirs:
-install: install-am
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
 install-exec: install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
@@ -6172,10 +6724,27 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 check-valgrind: check-valgrind-am
 
 check-valgrind-am: check-valgrind-local
 
+check-valgrind-drd: check-valgrind-drd-am
+
+check-valgrind-drd-am: check-valgrind-drd-local
+
+check-valgrind-helgrind: check-valgrind-helgrind-am
+
+check-valgrind-helgrind-am: check-valgrind-helgrind-local
+
+check-valgrind-memcheck: check-valgrind-memcheck-am
+
+check-valgrind-memcheck-am: check-valgrind-memcheck-local
+
+check-valgrind-sgcheck: check-valgrind-sgcheck-am
+
+check-valgrind-sgcheck-am: check-valgrind-sgcheck-local
+
 clean: clean-am
 
 clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \
@@ -6246,10 +6815,14 @@
 
 uninstall-am:
 
-.MAKE: check-am install-am install-strip
+.MAKE: all check check-am install install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am \
-	check-valgrind-am check-valgrind-local clean \
+	check-valgrind-am check-valgrind-drd-am \
+	check-valgrind-drd-local check-valgrind-helgrind-am \
+	check-valgrind-helgrind-local check-valgrind-local \
+	check-valgrind-memcheck-am check-valgrind-memcheck-local \
+	check-valgrind-sgcheck-am check-valgrind-sgcheck-local clean \
 	clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \
 	clean-local cscopelist-am ctags ctags-am distclean \
 	distclean-compile distclean-generic distclean-tags distdir dvi \
@@ -6294,6 +6867,9 @@
 $(srcdir)/bpf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/btrfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6534,6 +7110,9 @@
 $(srcdir)/getxxid.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/group_req.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/inet-cmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6744,9 +7323,15 @@
 $(srcdir)/netlink_audit.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_crypto.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_generic.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_kobject_uevent.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_netfilter.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6768,12 +7353,78 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_br_port_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_dcbmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_fib_rule_hdr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrlblmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_brport.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_xdp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_inet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_inet_diag_req_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_netconfmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_netlink_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_nlmsgerr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_packet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtgenmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_unix_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -6843,6 +7494,24 @@
 $(srcdir)/printstr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/printpath-umovestr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/prlimit64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7086,6 +7755,15 @@
 $(srcdir)/sigsuspend.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_linger.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/socketcall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7286,6 +7964,9 @@
 clean-local-check:
 	-rm -rf -- $(TESTS:.test=.dir) $(GEN_TESTS:.gen.test=.dir)
 
+.PHONY: check-valgrind-local
+check-valgrind-local: $(check_LIBRARIES) $(check_PROGRAMS)
+
 syscallent.i: $(top_builddir)/config.h $(top_srcdir)/$(OS)/$(ARCH)/syscallent.h
 	$(CPP) -P $(SCNO_CPPFLAGS) -include $^ -o $@
 
diff --git a/tests/add_key.c b/tests/add_key.c
index 1de0cc3..999da03 100644
--- a/tests/add_key.c
+++ b/tests/add_key.c
@@ -2,6 +2,7 @@
  * Check decoding of add_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/aio.c b/tests/aio.c
index 77b6c05..335bb31 100644
--- a/tests/aio.c
+++ b/tests/aio.c
@@ -239,11 +239,12 @@
 	if (rc != (long) nr)
 		perror_msg_and_skip("io_submit");
 	printf("io_submit(%#lx, %u, ["
-	       "{data=%#" PRI__x64 ", pread, reqprio=11, fildes=0, "
-		"buf=%p, nbytes=%u, offset=%" PRI__d64 "}, "
-	       "{data=%#" PRI__x64 ", pread, reqprio=22, fildes=0, "
-		"buf=%p, nbytes=%u, offset=%" PRI__d64 "}"
-	       "]) = %s\n",
+	       "{aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREAD"
+		", aio_reqprio=11, aio_fildes=0, aio_buf=%p, aio_nbytes=%u"
+		", aio_offset=%" PRI__d64
+	       "}, {aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREAD"
+		", aio_reqprio=22, aio_fildes=0, aio_buf=%p, aio_nbytes=%u"
+		", aio_offset=%" PRI__d64 "}]) = %s\n",
 	       *ctx, nr,
 	       cb[0].aio_data, data0, sizeof_data0, cb[0].aio_offset,
 	       cb[1].aio_data, data1, sizeof_data1, cb[1].aio_offset,
@@ -299,8 +300,9 @@
 	       sprintrc(rc));
 
 	rc = syscall(__NR_io_cancel, *ctx, cbc, ev);
-	printf("io_cancel(%#lx, {data=%#" PRI__x64
-	       ", pread, reqprio=99, fildes=-42}, %p) = %s\n",
+	printf("io_cancel(%#lx, {aio_data=%#" PRI__x64
+		", aio_lio_opcode=IOCB_CMD_PREAD, aio_reqprio=99"
+		", aio_fildes=-42}, %p) = %s\n",
 	       *ctx, cbc->aio_data, ev, sprintrc(rc));
 
 	rc = syscall(__NR_io_submit, (unsigned long) 0xfacef157beeff00dULL,
@@ -315,21 +317,25 @@
 
 	rc = syscall(__NR_io_submit, *ctx, 1057L, cbvs2);
 	printf("io_submit(%#lx, %ld, ["
-	       "{data=%#" PRI__x64 ", key=%u, %hu /* SUB_??? */, fildes=%d}, "
-	       "{key=%u, pwrite, reqprio=%hd, fildes=%d, str=NULL"
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64
+	       "{aio_data=%#" PRI__x64 ", aio_key=%u"
+		", aio_lio_opcode=%hu /* IOCB_CMD_??? */, aio_fildes=%d}"
+		", {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITE, aio_reqprio=%hd"
+		", aio_fildes=%d, aio_buf=NULL"
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
 # ifdef IOCB_FLAG_RESFD
-		", resfd=%d, flags=%#x"
+		", aio_resfd=%d, aio_flags=%#x"
 # endif
-		"}, "
-	       "{key=%u, pwrite, reqprio=%hd, fildes=%d, buf=%#" PRI__x64
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}, "
-	       "{key=%u, pwrite, reqprio=%hd, fildes=%d"
-		", str=\"\\0\\1\\2\\3%.28s\"..."
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}, "
-	       "{key=%u, pwritev, reqprio=%hd, fildes=%d, buf=%#" PRI__x64
-		", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}"
-	       ", {NULL}, {%#lx}, %p]) = %s\n",
+	       "}, {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITE"
+		", aio_reqprio=%hd, aio_fildes=%d, aio_buf=%#" PRI__x64
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
+	       "}, {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITE"
+		", aio_reqprio=%hd, aio_fildes=%d"
+		", aio_buf=\"\\0\\1\\2\\3%.28s\"..."
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
+	       "}, {aio_key=%u, aio_lio_opcode=IOCB_CMD_PWRITEV"
+		", aio_reqprio=%hd, aio_fildes=%d, aio_buf=%#" PRI__x64
+		", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64
+	       "}, {NULL}, {%#lx}, %p]) = %s\n",
 	       *ctx, 1057L,
 	       cbv2[0].aio_data, cbv2[0].aio_key,
 	       cbv2[0].aio_lio_opcode, cbv2[0].aio_fildes,
@@ -350,12 +356,14 @@
 	if (rc != (long) nr)
 		perror_msg_and_skip("io_submit");
 	printf("io_submit(%#lx, %u, ["
-	       "{data=%#" PRI__x64 ", preadv, reqprio=%hd, fildes=0, "
-		"iovec=[{iov_base=%p, iov_len=%u}"
-		", {iov_base=%p, iov_len=%u}], offset=%" PRI__d64 "}, "
-	       "{data=%#" PRI__x64 ", preadv, reqprio=%hd, fildes=0, "
-		"iovec=[{iov_base=%p, iov_len=%u}"
-		", {iov_base=%p, iov_len=%u}], offset=%" PRI__d64 "}"
+	       "{aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREADV"
+		", aio_reqprio=%hd, aio_fildes=0, "
+		"aio_buf=[{iov_base=%p, iov_len=%u}"
+	       ", {iov_base=%p, iov_len=%u}], aio_offset=%" PRI__d64 "}, "
+	       "{aio_data=%#" PRI__x64 ", aio_lio_opcode=IOCB_CMD_PREADV"
+		", aio_reqprio=%hd, aio_fildes=0"
+		", aio_buf=[{iov_base=%p, iov_len=%u}"
+		", {iov_base=%p, iov_len=%u}], aio_offset=%" PRI__d64 "}"
 	       "]) = %s\n",
 	       *ctx, nr,
 	       cbv[0].aio_data, cbv[0].aio_reqprio,
diff --git a/tests/bpf-v.c b/tests/bpf-v.c
new file mode 100644
index 0000000..3f44f24
--- /dev/null
+++ b/tests/bpf-v.c
@@ -0,0 +1,3 @@
+/* This file is part of bpf-v strace test. */
+#define VERBOSE 1
+#include "bpf.c"
diff --git a/tests/bpf-v.gen.test b/tests/bpf-v.gen.test
new file mode 100755
index 0000000..e57154e
--- /dev/null
+++ b/tests/bpf-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-v -a20 -v -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -v -e trace=bpf
diff --git a/tests/bpf.c b/tests/bpf.c
index 40f96a7..bec30f8 100644
--- a/tests/bpf.c
+++ b/tests/bpf.c
@@ -1,4 +1,6 @@
 /*
+ * Check bpf syscall decoding.
+ *
  * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
  * All rights reserved.
  *
@@ -28,18 +30,25 @@
 #include "tests.h"
 #include <asm/unistd.h>
 
-#if defined HAVE_UNION_BPF_ATTR_LOG_BUF && defined __NR_bpf
+#if defined __NR_bpf				\
+ && (defined HAVE_UNION_BPF_ATTR_ATTACH_FLAGS	\
+  || defined HAVE_UNION_BPF_ATTR_BPF_FD		\
+  || defined HAVE_UNION_BPF_ATTR_FLAGS		\
+  || defined HAVE_UNION_BPF_ATTR_INNER_MAP_FD	\
+  || defined HAVE_UNION_BPF_ATTR_PROG_FLAGS)
+
+# include <stddef.h>
 # include <stdio.h>
 # include <stdint.h>
+# include <string.h>
 # include <unistd.h>
 # include <linux/bpf.h>
 
-static const struct bpf_insn insns[] = {
-	{ .code = BPF_JMP | BPF_EXIT }
-};
-
+static const kernel_ulong_t long_bits = (kernel_ulong_t) 0xfacefeed00000000ULL;
 static const char *errstr;
-static char log_buf[4096];
+static unsigned int sizeof_attr = sizeof(union bpf_attr);
+static unsigned int page_size;
+static unsigned long end_of_page;
 
 static long
 sys_bpf(kernel_ulong_t cmd, kernel_ulong_t attr, kernel_ulong_t size)
@@ -49,45 +58,374 @@
 	return rc;
 }
 
-static int
-map_create(void)
+# if VERBOSE
+#  define print_extra_data(addr_, size_) print_quoted_hex((addr_), (size_))
+# else
+#  define print_extra_data(addr_, size_) printf("...")
+#endif
+
+# define TEST_BPF_(cmd_, cmd_str_,					\
+		  init_first_, print_first_,				\
+		  init_attr_, print_attr_)				\
+	do {								\
+		/* zero addr */						\
+		sys_bpf(cmd_, 0, long_bits | sizeof(union bpf_attr));	\
+		printf("bpf(%s, NULL, %u) = %s\n",			\
+		       cmd_str_, sizeof_attr, errstr);			\
+									\
+		/* zero size */						\
+		unsigned long addr = end_of_page - sizeof_attr;		\
+		sys_bpf(cmd_, addr, long_bits);				\
+		printf("bpf(%s, %#lx, 0) = %s\n",			\
+		       cmd_str_, addr, errstr);				\
+									\
+		/* the first field only */				\
+		unsigned int offset = init_first_(end_of_page);		\
+		addr = end_of_page - offset;				\
+		sys_bpf(cmd_, addr, offset);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_first_(addr);					\
+		printf("}, %u) = %s\n", offset, errstr);		\
+									\
+		/* efault after the first field */			\
+		sys_bpf(cmd_, addr, offset + 1);			\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr, offset + 1, errstr);		\
+									\
+		/* the relevant part of union bpf_attr */		\
+		offset = init_attr_(end_of_page);			\
+		addr = end_of_page - offset;				\
+		sys_bpf(cmd_, addr, offset);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_attr_(addr);					\
+		printf("}, %u) = %s\n", offset, errstr);		\
+									\
+		/* short read of the relevant part of union bpf_attr */	\
+		sys_bpf(cmd_, addr + 1, offset);			\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr + 1, offset, errstr);		\
+									\
+		if (offset < sizeof_attr) {				\
+			/* short read of the whole union bpf_attr */	\
+			memmove((void *) end_of_page - sizeof_attr + 1,	\
+				(void *) addr, offset);			\
+			addr = end_of_page - sizeof_attr + 1;		\
+			memset((void *) addr + offset, 0,		\
+			       sizeof_attr - offset - 1);		\
+			sys_bpf(cmd_, addr, sizeof_attr);		\
+			printf("bpf(%s, %#lx, %u) = %s\n",		\
+			       cmd_str_, addr, sizeof_attr, errstr);	\
+									\
+			/* the whole union bpf_attr */			\
+			memmove((void *) end_of_page - sizeof_attr,	\
+				(void *) addr, offset);			\
+			addr = end_of_page - sizeof_attr;		\
+			memset((void *) addr + offset, 0,		\
+			       sizeof_attr - offset);			\
+			sys_bpf(cmd_, addr, sizeof_attr);		\
+			printf("bpf(%s, {", cmd_str_);			\
+			print_attr_(addr);				\
+			printf("}, %u) = %s\n", sizeof_attr, errstr);	\
+									\
+			/* non-zero bytes after the relevant part */	\
+			fill_memory_ex((void *) addr + offset,		\
+				       sizeof_attr - offset, '0', 10);	\
+			sys_bpf(cmd_, addr, sizeof_attr);		\
+			printf("bpf(%s, {", cmd_str_);			\
+			print_attr_(addr);				\
+			printf(", ");					\
+			print_extra_data((void *) addr + offset,	\
+					 sizeof_attr - offset);		\
+			printf("}, %u) = %s\n", sizeof_attr, errstr);	\
+		}							\
+									\
+		/* short read of the whole page */			\
+		memmove((void *) end_of_page - page_size + 1,		\
+			(void *) addr, offset);				\
+		addr = end_of_page - page_size + 1;			\
+		memset((void *) addr + offset, 0,			\
+		       page_size - offset - 1);				\
+		sys_bpf(cmd_, addr, page_size);				\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr, page_size, errstr);		\
+									\
+		/* the whole page */					\
+		memmove((void *) end_of_page - page_size,		\
+			(void *) addr, offset);				\
+		addr = end_of_page - page_size;				\
+		memset((void *) addr + offset, 0, page_size - offset);	\
+		sys_bpf(cmd_, addr, page_size);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_attr_(addr);					\
+		printf("}, %u) = %s\n", page_size, errstr);		\
+									\
+		/* non-zero bytes after the whole union bpf_attr */	\
+		fill_memory_ex((void *) addr + offset,			\
+			       page_size - offset, '0', 10);		\
+		sys_bpf(cmd_, addr, page_size);				\
+		printf("bpf(%s, {", cmd_str_);				\
+		print_attr_(addr);					\
+		printf(", ");						\
+		print_extra_data((void *) addr + offset,		\
+				 page_size - offset);			\
+		printf("}, %u) = %s\n", page_size, errstr);		\
+									\
+		/* more than a page */					\
+		sys_bpf(cmd_, addr, page_size + 1);			\
+		printf("bpf(%s, %#lx, %u) = %s\n",			\
+		       cmd_str_, addr, page_size + 1, errstr);		\
+	} while (0)							\
+	/* End of TEST_BPF_ definition. */
+
+# define TEST_BPF(cmd_)							\
+	TEST_BPF_((cmd_), #cmd_,					\
+		  init_ ## cmd_ ## _first, print_ ## cmd_ ## _first,	\
+		  init_ ## cmd_ ## _attr, print_ ## cmd_ ## _attr)	\
+	/* End of TEST_BPF definition. */
+
+# ifdef HAVE_UNION_BPF_ATTR_INNER_MAP_FD
+
+static unsigned int
+init_BPF_MAP_CREATE_first(const unsigned long eop)
 {
-	union bpf_attr attr = {
-		.key_size = 4,
-		.value_size = 8,
-		.max_entries = 256
-	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(BPF_MAP_CREATE, (unsigned long) t_attr, sizeof(attr));
+	static const union bpf_attr attr = { .map_type = 2 };
+	static const unsigned int offset = sizeof(attr.map_type);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.map_type, offset);
+	return offset;
 }
 
-static int
-map_any(int cmd)
+static void
+print_BPF_MAP_CREATE_first(const unsigned long addr)
 {
-	union bpf_attr attr = {
+	printf("map_type=BPF_MAP_TYPE_ARRAY, key_size=0, value_size=0"
+	       ", max_entries=0, map_flags=0, inner_map_fd=0");
+}
+
+static unsigned int
+init_BPF_MAP_CREATE_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_type = 1,
+		.key_size = 4,
+		.value_size = 8,
+		.max_entries = 256,
+		.map_flags = 1,
+		.inner_map_fd = -1
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, inner_map_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_CREATE_attr(const unsigned long addr)
+{
+	printf("map_type=BPF_MAP_TYPE_HASH, key_size=4"
+	       ", value_size=8, max_entries=256"
+	       ", map_flags=BPF_F_NO_PREALLOC, inner_map_fd=-1");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_INNER_MAP_FD */
+
+# ifdef HAVE_UNION_BPF_ATTR_FLAGS
+
+static unsigned int
+init_BPF_MAP_LOOKUP_ELEM_first(const unsigned long eop)
+{
+	static const union bpf_attr attr = { .map_fd = -1 };
+	static const unsigned int offset = sizeof(attr.map_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.map_fd, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_LOOKUP_ELEM_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0, value=0");
+}
+
+static unsigned int
+init_BPF_MAP_LOOKUP_ELEM_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
 		.map_fd = -1,
 		.key = 0xdeadbeef,
 		.value = 0xbadc0ded
 	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(cmd, (unsigned long) t_attr, sizeof(attr));
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, value);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
 }
 
-static int
-prog_load(void)
+static void
+print_BPF_MAP_LOOKUP_ELEM_attr(const unsigned long addr)
 {
-	union bpf_attr attr = {
-		.insn_cnt = sizeof(insns) / sizeof(insns[0]),
-		.insns = (unsigned long) insns,
-		.license = (unsigned long) "GPL",
+	printf("map_fd=-1, key=0xdeadbeef, value=0xbadc0ded");
+}
+
+#  define init_BPF_MAP_UPDATE_ELEM_first init_BPF_MAP_LOOKUP_ELEM_first
+
+static void
+print_BPF_MAP_UPDATE_ELEM_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0, value=0, flags=BPF_ANY");
+}
+
+static unsigned int
+init_BPF_MAP_UPDATE_ELEM_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_fd = -1,
+		.key = 0xdeadbeef,
+		.value = 0xbadc0ded,
+		.flags = 2
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, flags);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_UPDATE_ELEM_attr(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0xdeadbeef, value=0xbadc0ded, flags=BPF_EXIST");
+}
+
+#  define init_BPF_MAP_DELETE_ELEM_first init_BPF_MAP_LOOKUP_ELEM_first
+
+static void
+print_BPF_MAP_DELETE_ELEM_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0");
+}
+
+static unsigned int
+init_BPF_MAP_DELETE_ELEM_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_fd = -1,
+		.key = 0xdeadbeef
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, key);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_DELETE_ELEM_attr(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0xdeadbeef");
+}
+
+#  define init_BPF_MAP_GET_NEXT_KEY_first init_BPF_MAP_LOOKUP_ELEM_first
+
+static void
+print_BPF_MAP_GET_NEXT_KEY_first(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0, next_key=0");
+}
+
+static unsigned int
+init_BPF_MAP_GET_NEXT_KEY_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.map_fd = -1,
+		.key = 0xdeadbeef,
+		.next_key = 0xbadc0ded
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, next_key);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_MAP_GET_NEXT_KEY_attr(const unsigned long addr)
+{
+	printf("map_fd=-1, key=0xdeadbeef, next_key=0xbadc0ded");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_FLAGS */
+
+# ifdef HAVE_UNION_BPF_ATTR_PROG_FLAGS
+
+static unsigned int
+init_BPF_PROG_LOAD_first(const unsigned long eop)
+{
+	static const union bpf_attr attr = { .prog_type = 1 };
+	static const unsigned int offset = sizeof(attr.prog_type);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.prog_type, offset);
+	return offset;
+}
+
+static void
+print_BPF_PROG_LOAD_first(const unsigned long addr)
+{
+
+	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=0, insns=0"
+	       ", license=NULL, log_level=0, log_size=0, log_buf=0"
+	       ", kern_version=0, prog_flags=0");
+}
+
+static const struct bpf_insn insns[] = {
+	{ .code = BPF_JMP | BPF_EXIT }
+};
+static char log_buf[4096];
+
+static unsigned int
+init_BPF_PROG_LOAD_attr(const unsigned long eop)
+{
+	const union bpf_attr attr = {
+		.prog_type = 1,
+		.insn_cnt = ARRAY_SIZE(insns),
+		.insns = (uintptr_t) insns,
+		.license = (uintptr_t) "GPL",
 		.log_level = 42,
 		.log_size = sizeof(log_buf),
-		.log_buf = (unsigned long) log_buf
+		.log_buf = (uintptr_t) log_buf,
+		.kern_version = 0xcafef00d,
+		.prog_flags = 1
 	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(BPF_PROG_LOAD, (unsigned long) t_attr, sizeof(attr));
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, prog_flags);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
 }
 
+static void
+print_BPF_PROG_LOAD_attr(const unsigned long addr)
+{
+	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=%u, insns=%p"
+	       ", license=\"GPL\", log_level=42, log_size=4096, log_buf=%p"
+	       ", kern_version=%u, prog_flags=BPF_F_STRICT_ALIGNMENT",
+	       (unsigned int) ARRAY_SIZE(insns), insns,
+	       log_buf, 0xcafef00d);
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_PROG_FLAGS */
+
 /*
  * bpf() syscall and its first six commands were introduced in Linux kernel
  * 3.18. Some additional commands were added afterwards, so we need to take
@@ -96,134 +434,165 @@
  * BPF_OBJ_PIN and BPF_OBJ_GET commands appear in kernel 4.4.
  */
 # ifdef HAVE_UNION_BPF_ATTR_BPF_FD
-static int
-obj_manage(int cmd)
+
+static unsigned int
+init_BPF_OBJ_PIN_first(const unsigned long eop)
 {
-	union bpf_attr attr = {
-		.pathname = (unsigned long) "/sys/fs/bpf/foo/bar",
+	static const union bpf_attr attr = {};
+	static const unsigned int offset = sizeof(attr.pathname);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.pathname, offset);
+	return offset;
+}
+
+static void
+print_BPF_OBJ_PIN_first(const unsigned long addr)
+{
+
+	printf("pathname=NULL, bpf_fd=0");
+}
+
+static unsigned int
+init_BPF_OBJ_PIN_attr(const unsigned long eop)
+{
+	const union bpf_attr attr = {
+		.pathname = (uintptr_t) "/sys/fs/bpf/foo/bar",
 		.bpf_fd = -1
 	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(cmd, (unsigned long) t_attr, sizeof(attr));
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, bpf_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
 }
-# endif
+
+static void
+print_BPF_OBJ_PIN_attr(const unsigned long addr)
+{
+	printf("pathname=\"/sys/fs/bpf/foo/bar\", bpf_fd=-1");
+}
+
+#  define init_BPF_OBJ_GET_first init_BPF_OBJ_PIN_first
+#  define print_BPF_OBJ_GET_first print_BPF_OBJ_PIN_first
+#  define init_BPF_OBJ_GET_attr init_BPF_OBJ_PIN_attr
+#  define print_BPF_OBJ_GET_attr print_BPF_OBJ_PIN_attr
+
+# endif /* HAVE_UNION_BPF_ATTR_BPF_FD */
 
 /* BPF_PROG_ATTACH and BPF_PROG_DETACH commands appear in kernel 4.10. */
 # ifdef HAVE_UNION_BPF_ATTR_ATTACH_FLAGS
-static int
-prog_cgroup(int cmd)
-{
-	union bpf_attr attr = {
-		.target_fd = -1,
-		.attach_bpf_fd = -1,
-		.attach_type = 0,
-		.attach_flags = 1
-	};
-	void *const t_attr = tail_memdup(&attr, sizeof(attr));
-	return sys_bpf(cmd, (unsigned long) t_attr, sizeof(attr));
-}
-# endif
 
-static unsigned long efault;
+static unsigned int
+init_BPF_PROG_ATTACH_first(const unsigned long eop)
+{
+	static const union bpf_attr attr = { .target_fd = -1 };
+	static const unsigned int offset = sizeof(attr.target_fd);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr.target_fd, offset);
+	return offset;
+}
 
 static void
-bogus_bpf(int cmd, const char *name)
+print_BPF_PROG_ATTACH_first(const unsigned long addr)
 {
-	const unsigned long bogus_size = 1024;
-	const unsigned long bogus_addr = efault - bogus_size;
-
-	sys_bpf(cmd, efault, 4);
-	printf("bpf(%s, %#lx, %lu) = %s\n",
-	       name, efault, 4UL, errstr);
-
-	sys_bpf(cmd, efault, bogus_size);
-	printf("bpf(%s, %#lx, %lu) = %s\n",
-	       name, efault, bogus_size, errstr);
-
-	sys_bpf(cmd, bogus_addr, 0);
-	printf("bpf(%s, %#lx, %lu) = %s\n",
-	       name, bogus_addr, 0UL, errstr);
+	printf("target_fd=-1, attach_bpf_fd=0"
+	       ", attach_type=BPF_CGROUP_INET_INGRESS, attach_flags=0");
 }
 
-#define BOGUS_BPF(cmd)	bogus_bpf(cmd, #cmd)
+static unsigned int
+init_BPF_PROG_ATTACH_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.target_fd = -1,
+		.attach_bpf_fd = -2,
+		.attach_type = 2,
+		.attach_flags = 1
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, attach_flags);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+static void
+print_BPF_PROG_ATTACH_attr(const unsigned long addr)
+{
+	printf("target_fd=-1, attach_bpf_fd=-2"
+	       ", attach_type=BPF_CGROUP_INET_SOCK_CREATE"
+	       ", attach_flags=BPF_F_ALLOW_OVERRIDE");
+}
+
+#  define init_BPF_PROG_DETACH_first init_BPF_PROG_ATTACH_first
+
+static unsigned int
+init_BPF_PROG_DETACH_attr(const unsigned long eop)
+{
+	static const union bpf_attr attr = {
+		.target_fd = -1,
+		.attach_type = 2
+	};
+	static const unsigned int offset =
+		offsetofend(union bpf_attr, attach_type);
+	const unsigned long addr = eop - offset;
+
+	memcpy((void *) addr, &attr, offset);
+	return offset;
+}
+
+
+static void
+print_BPF_PROG_DETACH_first(const unsigned long addr)
+{
+	printf("target_fd=-1, attach_type=BPF_CGROUP_INET_INGRESS");
+}
+
+static void
+print_BPF_PROG_DETACH_attr(const unsigned long addr)
+{
+	printf("target_fd=-1, attach_type=BPF_CGROUP_INET_SOCK_CREATE");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_ATTACH_FLAGS */
 
 int
 main(void)
 {
-	efault = (unsigned long) tail_alloc(1) + 1;
+	page_size = get_page_size();
+	end_of_page = (unsigned long) tail_alloc(1) + 1;
 
-	map_create();
-	printf("bpf(BPF_MAP_CREATE"
-	       ", {map_type=BPF_MAP_TYPE_UNSPEC, key_size=4"
-	       ", value_size=8, max_entries=256}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_CREATE);
+# ifdef HAVE_UNION_BPF_ATTR_INNER_MAP_FD
+	TEST_BPF(BPF_MAP_CREATE);
+# endif
 
-	map_any(BPF_MAP_LOOKUP_ELEM);
-	printf("bpf(BPF_MAP_LOOKUP_ELEM"
-	       ", {map_fd=-1, key=0xdeadbeef}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_LOOKUP_ELEM);
+# ifdef HAVE_UNION_BPF_ATTR_FLAGS
+	TEST_BPF(BPF_MAP_LOOKUP_ELEM);
+	TEST_BPF(BPF_MAP_UPDATE_ELEM);
+	TEST_BPF(BPF_MAP_DELETE_ELEM);
+	TEST_BPF(BPF_MAP_GET_NEXT_KEY);
+# endif
 
-	map_any(BPF_MAP_UPDATE_ELEM);
-	printf("bpf(BPF_MAP_UPDATE_ELEM"
-	       ", {map_fd=-1, key=0xdeadbeef"
-	       ", value=0xbadc0ded, flags=BPF_ANY}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_UPDATE_ELEM);
-
-	map_any(BPF_MAP_DELETE_ELEM);
-	printf("bpf(BPF_MAP_DELETE_ELEM"
-	       ", {map_fd=-1, key=0xdeadbeef}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_DELETE_ELEM);
-
-	map_any(BPF_MAP_GET_NEXT_KEY);
-	printf("bpf(BPF_MAP_GET_NEXT_KEY"
-	       ", {map_fd=-1, key=0xdeadbeef}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_MAP_GET_NEXT_KEY);
-
-	prog_load();
-	printf("bpf(BPF_PROG_LOAD"
-	       ", {prog_type=BPF_PROG_TYPE_UNSPEC, insn_cnt=1, insns=%p"
-	       ", license=\"GPL\", log_level=42, log_size=4096, log_buf=%p"
-	       ", kern_version=0}, %u) = %s\n",
-	       insns, log_buf, (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_PROG_LOAD);
+# ifdef HAVE_UNION_BPF_ATTR_PROG_FLAGS
+	TEST_BPF(BPF_PROG_LOAD);
+# endif
 
 # ifdef HAVE_UNION_BPF_ATTR_BPF_FD
-	obj_manage(BPF_OBJ_PIN);
-	printf("bpf(BPF_OBJ_PIN"
-	       ", {pathname=\"/sys/fs/bpf/foo/bar\", bpf_fd=-1}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_OBJ_PIN);
-
-	obj_manage(BPF_OBJ_GET);
-	printf("bpf(BPF_OBJ_GET"
-	       ", {pathname=\"/sys/fs/bpf/foo/bar\", bpf_fd=-1}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_OBJ_GET);
+	TEST_BPF(BPF_OBJ_PIN);
+	TEST_BPF(BPF_OBJ_GET);
 # endif
 
 # ifdef HAVE_UNION_BPF_ATTR_ATTACH_FLAGS
-	prog_cgroup(BPF_PROG_ATTACH);
-	printf("bpf(BPF_PROG_ATTACH"
-	       ", {target_fd=-1, attach_bpf_fd=-1"
-	       ", attach_type=BPF_CGROUP_INET_INGRESS"
-	       ", attach_flags=BPF_F_ALLOW_OVERRIDE}, %u) = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_PROG_ATTACH);
-
-	prog_cgroup(BPF_PROG_DETACH);
-	printf("bpf(BPF_PROG_DETACH"
-	       ", {target_fd=-1, attach_type=BPF_CGROUP_INET_INGRESS}, %u)"
-	       " = %s\n",
-	       (unsigned) sizeof(union bpf_attr), errstr);
-	BOGUS_BPF(BPF_PROG_DETACH);
+	TEST_BPF(BPF_PROG_ATTACH);
+	TEST_BPF(BPF_PROG_DETACH);
 # endif
 
-	bogus_bpf(0xfacefeed, "0xfacefeed /* BPF_??? */");
+	sys_bpf(0xfacefeed, end_of_page, 40);
+	printf("bpf(0xfacefeed /* BPF_??? */, %#lx, 40) = %s\n",
+	       end_of_page, errstr);
 
 	puts("+++ exited with 0 +++");
 	return 0;
@@ -231,6 +600,6 @@
 
 #else
 
-SKIP_MAIN_UNDEFINED("__NR_bpf")
+SKIP_MAIN_UNDEFINED("__NR_bpf && HAVE_UNION_BPF_ATTR_*")
 
 #endif
diff --git a/tests/clone_parent.c b/tests/clone_parent.c
new file mode 100644
index 0000000..2ec954e
--- /dev/null
+++ b/tests/clone_parent.c
@@ -0,0 +1,80 @@
+/*
+ * Check handling of CLONE_PARENT'ed processes.
+ *
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+static int
+child(void *const arg)
+{
+	return 42;
+}
+
+#define child_stack_size	(get_page_size() / 2)
+
+#ifdef IA64
+extern int __clone2(int (*)(void *), void *, size_t, int, void *, ...);
+# define clone(fn, child_stack, flags, arg)	\
+		__clone2(fn, child_stack, child_stack_size, flags, arg)
+#endif
+
+int
+main(void)
+{
+	const pid_t pid = clone(child, tail_alloc(child_stack_size),
+				CLONE_PARENT | SIGCHLD, 0);
+	if (pid < 0)
+		perror_msg_and_fail("clone");
+
+	int status;
+	if (wait(&status) >= 0)
+		error_msg_and_fail("unexpected return code from wait");
+
+	while (!kill(pid, 0))
+		;
+	if (errno != ESRCH)
+		perror_msg_and_fail("kill");
+
+	FILE *const fp = fdopen(3, "a");
+	if (!fp)
+		perror_msg_and_fail("fdopen");
+	if (fprintf(fp, "%s: Exit of unknown pid %d ignored\n",
+		    getenv("STRACE_EXE") ?: "strace", pid) < 0)
+		perror_msg_and_fail("fprintf");
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/clone_parent.test b/tests/clone_parent.test
new file mode 100755
index 0000000..66b3bbb
--- /dev/null
+++ b/tests/clone_parent.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Check handling of CLONE_PARENT'ed processes.
+. "${srcdir=.}/clone_ptrace.test"
diff --git a/tests/clone_ptrace.c b/tests/clone_ptrace.c
new file mode 100644
index 0000000..48c099a
--- /dev/null
+++ b/tests/clone_ptrace.c
@@ -0,0 +1,110 @@
+/*
+ * Check handling of CLONE_PTRACE'ed processes.
+ *
+ * Copyright (c) 2015-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+static siginfo_t sinfo;
+
+static void
+handler(const int no, siginfo_t *const si, void *const uc)
+{
+	memcpy(&sinfo, si, sizeof(sinfo));
+}
+
+static int
+child(void *const arg)
+{
+	for(;;)
+		pause();
+	return 0;
+}
+
+#define child_stack_size	(get_page_size() / 2)
+
+#ifdef IA64
+extern int __clone2(int (*)(void *), void *, size_t, int, void *, ...);
+# define clone(fn, child_stack, flags, arg)	\
+		__clone2(fn, child_stack, child_stack_size, flags, arg)
+#endif
+
+int
+main(void)
+{
+	const int sig = SIGUSR1;
+	sigset_t mask;
+	sigemptyset(&mask);
+	sigaddset(&mask, sig);
+	if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
+		perror_msg_and_fail("sigprocmask");
+
+	const pid_t pid = clone(child, tail_alloc(child_stack_size),
+				CLONE_PTRACE | SIGCHLD, 0);
+	if (pid < 0)
+		perror_msg_and_fail("clone");
+
+	static const struct sigaction sa = {
+		.sa_sigaction = handler,
+		.sa_flags = SA_SIGINFO
+	};
+	if (sigaction(SIGCHLD, &sa, NULL))
+		perror_msg_and_fail("sigaction");
+
+	kill(pid, sig);
+
+	FILE *const fp = fdopen(3, "a");
+	if (!fp)
+		perror_msg_and_fail("fdopen");
+	if (fprintf(fp, "%s: Detached unknown pid %d\n",
+		    getenv("STRACE_EXE") ?: "strace", pid) < 0)
+		perror_msg_and_fail("fprintf");
+
+	int status;
+	while (wait(&status) != pid) {
+		if (errno != EINTR)
+			perror_msg_and_fail("wait");
+	}
+	if (!WIFSIGNALED(status) || WTERMSIG(status) != sig)
+		error_msg_and_fail("unexpected child exit status %d", status);
+
+	printf("--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=%d"
+	       ", si_uid=%u, si_status=%s, si_utime=%u, si_stime=%u} ---\n"
+	       "+++ exited with 0 +++\n", pid, geteuid(), "SIGUSR1",
+	       (unsigned int) sinfo.si_utime, (unsigned int) sinfo.si_stime);
+
+	return 0;
+}
diff --git a/tests/clone_ptrace.test b/tests/clone_ptrace.test
new file mode 100755
index 0000000..a1f0237
--- /dev/null
+++ b/tests/clone_ptrace.test
@@ -0,0 +1,17 @@
+#!/bin/sh -efu
+# Check handling of CLONE_PTRACE'ed processes.
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null 3>&1
+args="-e trace=none $args"
+> "$LOG" || fail_ "failed to write $LOG"
+
+$STRACE -o "$LOG" $args > "$EXP" 2> "$OUT"-err 3> "$EXP"-err || {
+	msg="$STRACE $args failed with code $?"
+	cat "$OUT"-err "$LOG" >&2
+	fail_ "$msg"
+}
+
+cat "$OUT"-err >&2
+match_diff "$LOG" "$EXP"
+match_diff "$OUT"-err "$EXP"-err
diff --git a/tests/errno2name.c b/tests/errno2name.c
index d481e2e..2354afc 100644
--- a/tests/errno2name.c
+++ b/tests/errno2name.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/fflush.c b/tests/fflush.c
new file mode 100644
index 0000000..84a62ec
--- /dev/null
+++ b/tests/fflush.c
@@ -0,0 +1,42 @@
+/*
+ * Check fflush error diagnostics.
+ *
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main(void)
+{
+	errno = ENOSPC;
+	printf("%s: /dev/full: %m\n", getenv("STRACE_EXE") ?: "strace");
+	return 0;
+}
diff --git a/tests/fflush.test b/tests/fflush.test
new file mode 100755
index 0000000..c0f4e3f
--- /dev/null
+++ b/tests/fflush.test
@@ -0,0 +1,41 @@
+#!/bin/sh -efu
+#
+# Check fflush error diagnostics.
+#
+# Copyright (c) 2011-2017 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null
+args="-o /dev/full -e trace=none $args"
+
+$STRACE $args > "$EXP" 2> "$LOG" || {
+	msg="$STRACE $args failed with code $?"
+	cat "$LOG" >&2
+	fail_ "$msg"
+}
+
+match_diff "$LOG" "$EXP"
diff --git a/tests/futimesat.c b/tests/futimesat.c
index 733fd09..666ebdd 100644
--- a/tests/futimesat.c
+++ b/tests/futimesat.c
@@ -118,7 +118,7 @@
 	tv[0].tv_sec = 0xdeadbeefU;
 	tv[0].tv_usec = 0xfacefeedU;
 	tv[1].tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv[1].tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv[1].tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 
 	k_futimesat(kfdcwd, kfname, (uintptr_t) tv);
 	printf("futimesat(AT_FDCWD, %s, [", qname);
diff --git a/tests/gen_tests.am b/tests/gen_tests.am
index f1b34dd..583a0ae 100644
--- a/tests/gen_tests.am
+++ b/tests/gen_tests.am
@@ -1,5 +1,5 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
-GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_generic.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nlattr_inet_diag_msg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
+GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test group_req.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_crypto.gen.test netlink_generic.gen.test netlink_kobject_uevent.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test nlattr_inet_diag_msg.gen.test nlattr_inet_diag_req_compat.gen.test nlattr_inet_diag_req_v2.gen.test nlattr_ndmsg.gen.test nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test printpath-umovestr.gen.test printpath-umovestr-peekdata.gen.test printpath-umovestr-undumpable.gen.test printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test printstrn-umoven-undumpable.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
 
 $(srcdir)/_newselect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
@@ -31,6 +31,9 @@
 $(srcdir)/bpf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/btrfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -271,6 +274,9 @@
 $(srcdir)/getxxid.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/group_req.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/inet-cmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -481,9 +487,15 @@
 $(srcdir)/netlink_audit.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_crypto.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_generic.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/netlink_kobject_uevent.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/netlink_netfilter.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -505,12 +517,78 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_br_port_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_dcbmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_fib_rule_hdr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrlblmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifaddrmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_brport.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ifla_xdp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_inet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_inet_diag_req_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_ndtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_netconfmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_netlink_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_nlmsgerr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_packet_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtgenmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_rtmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tcmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_unix_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -580,6 +658,24 @@
 $(srcdir)/printstr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/printpath-umovestr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printpath-umovestr-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-peekdata.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/printstrn-umoven-undumpable.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/prlimit64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -823,6 +919,15 @@
 $(srcdir)/sigsuspend.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_linger.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/socketcall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests/gen_tests.in b/tests/gen_tests.in
index 57fd5fd..8592e28 100644
--- a/tests/gen_tests.in
+++ b/tests/gen_tests.in
@@ -35,6 +35,7 @@
 aio	-a14 -e trace=io_setup,io_submit,io_getevents,io_cancel,io_destroy
 alarm	-a10
 bpf	-a20
+bpf-v	-a20 -v -e trace=bpf
 btrfs	+ioctl.test
 chmod	-a28
 chown	-a28
@@ -115,6 +116,7 @@
 gettid	-a9
 getuid32	+getuid.test
 getxxid	-a10 -e trace=getxpid,getxuid,getxgid
+group_req	-e trace=setsockopt
 inet-cmsg	-e trace=recvmsg
 init_module	-a27
 inotify	-a23 -e trace=inotify_add_watch,inotify_rm_watch
@@ -185,7 +187,9 @@
 net-icmp_filter	-e trace=getsockopt,setsockopt
 net-sockaddr	-a24 -e trace=connect
 netlink_audit	+netlink_sock_diag.test
+netlink_crypto	+netlink_sock_diag.test
 netlink_generic	+netlink_sock_diag.test
+netlink_kobject_uevent	+netlink_sock_diag.test
 netlink_netfilter	+netlink_sock_diag.test
 netlink_protocol	-e trace=sendto
 netlink_route	+netlink_sock_diag.test
@@ -193,8 +197,30 @@
 netlink_xfrm	+netlink_sock_diag.test
 newfstatat	-a32 -v -P stat.sample -P /dev/full
 nlattr		+netlink_sock_diag.test
+nlattr_crypto_user_alg		+netlink_sock_diag.test
+nlattr_br_port_msg		+netlink_sock_diag.test
+nlattr_dcbmsg			+netlink_sock_diag.test
+nlattr_fib_rule_hdr		+netlink_sock_diag.test
+nlattr_ifaddrlblmsg		+netlink_sock_diag.test
+nlattr_ifaddrmsg		+netlink_sock_diag.test
+nlattr_ifinfomsg		+netlink_sock_diag.test
+nlattr_ifla_brport		+netlink_sock_diag.test
+nlattr_ifla_port		+netlink_sock_diag.test
+nlattr_ifla_xdp			+netlink_sock_diag.test
 nlattr_inet_diag_msg		+netlink_sock_diag.test
+nlattr_inet_diag_req_compat	+netlink_sock_diag.test
+nlattr_inet_diag_req_v2		+netlink_sock_diag.test
+nlattr_ndmsg			+netlink_sock_diag.test
+nlattr_ndtmsg			+netlink_sock_diag.test
+nlattr_netconfmsg		+netlink_sock_diag.test
 nlattr_netlink_diag_msg		+netlink_sock_diag.test
+nlattr_nlmsgerr			+netlink_sock_diag.test
+nlattr_packet_diag_msg		+netlink_sock_diag-v.sh
+nlattr_rtgenmsg			+netlink_sock_diag.test
+nlattr_rtmsg			+netlink_sock_diag.test
+nlattr_smc_diag_msg		+netlink_sock_diag.test
+nlattr_tcamsg			+netlink_sock_diag.test
+nlattr_tcmsg			+netlink_sock_diag.test
 nlattr_unix_diag_msg		+netlink_sock_diag.test
 old_mmap	-a11 -e trace=mmap
 oldfstat	-a18 -v -P stat.sample
@@ -218,6 +244,12 @@
 preadv-pwritev	-a19 -eread=0 -ewrite=1 -e trace=preadv,pwritev
 preadv2-pwritev2	-a22 -eread=0 -ewrite=1 -e trace=preadv2,pwritev2
 printstr	-e trace=writev
+printpath-umovestr	-a11 -e signal=none -e trace=chdir
+printpath-umovestr-peekdata	-a11 -e signal=none -e trace=chdir
+printpath-umovestr-undumpable	-a11 -e signal=none -e trace=chdir
+printstrn-umoven	-s4096 -e signal=none -e trace=add_key
+printstrn-umoven-peekdata	-e signal=none -e trace=add_key
+printstrn-umoven-undumpable	-e signal=none -e trace=add_key
 prlimit64
 process_vm_readv	-s5 -a37
 process_vm_writev	-s5 -a38
@@ -299,6 +331,9 @@
 sigprocmask	-a34
 sigreturn	-esignal='!USR1'
 sigsuspend	-a19 -esignal=none
+so_linger	-e trace=getsockopt,setsockopt
+so_peercred	-e trace=getsockopt
+sock_filter-v	-v -e trace=getsockopt,setsockopt
 socketcall	-a20
 splice
 stat	-a32 -v -P stat.sample -P /dev/full
diff --git a/tests/getcwd.c b/tests/getcwd.c
index 707c25c..0c32f8d 100644
--- a/tests/getcwd.c
+++ b/tests/getcwd.c
@@ -20,9 +20,9 @@
 	if (res <= 0)
 		perror_msg_and_fail("getcwd");
 
-	printf("getcwd(\"");
+	printf("getcwd(");
 	print_quoted_string(cur_dir);
-	printf("\", %zu) = %ld\n", sizeof(cur_dir), res);
+	printf(", %zu) = %ld\n", sizeof(cur_dir), res);
 
 	res = syscall(__NR_getcwd, cur_dir, 0);
 	printf("getcwd(%p, 0) = %s\n", cur_dir, sprintrc(res));
diff --git a/tests/group_req.c b/tests/group_req.c
new file mode 100644
index 0000000..946fe5c
--- /dev/null
+++ b/tests/group_req.c
@@ -0,0 +1,160 @@
+/*
+ * Check decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <net/if.h>
+#include <netinet/in.h>
+
+#if defined MCAST_JOIN_GROUP && defined MCAST_LEAVE_GROUP
+
+# include <stdio.h>
+# include <unistd.h>
+# include <sys/param.h>
+# include <sys/socket.h>
+# include <arpa/inet.h>
+
+#define	multi4addr	"224.0.0.3"
+#define	multi6addr	"ff01::c"
+
+static const char *errstr;
+
+static int
+set_opt(const int fd, const int level, const int opt,
+	const void *const val, const socklen_t len)
+{
+	int rc = setsockopt(fd, level, opt, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct group_req, greq4);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct group_req, greq6);
+	unsigned int i;
+
+	greq6->gr_interface = greq4->gr_interface = ifindex_lo();
+	if (!greq4->gr_interface)
+		perror_msg_and_skip("lo");
+
+	greq4->gr_group.ss_family = AF_INET;
+	inet_pton(AF_INET, multi4addr, &greq4->gr_group.ss_family + 2);
+
+	greq6->gr_group.ss_family = AF_INET6;
+	inet_pton(AF_INET6, multi6addr, &greq6->gr_group.ss_family + 4);
+
+	(void) close(0);
+	if (socket(AF_INET, SOCK_DGRAM, 0))
+		perror_msg_and_skip("socket");
+
+	struct {
+		const int level;
+		const char *const str_level;
+		const int name;
+		const char *const str_name;
+		const struct group_req *const val;
+		const char *const addr;
+	} opts[] = {
+		{
+			ARG_STR(SOL_IP), ARG_STR(MCAST_JOIN_GROUP), greq4,
+			"gr_group={sa_family=AF_INET, sin_port=htons(65535)"
+			", sin_addr=inet_addr(\"" multi4addr "\")}"
+		},
+		{
+			ARG_STR(SOL_IP), ARG_STR(MCAST_LEAVE_GROUP), greq4,
+			"gr_group={sa_family=AF_INET, sin_port=htons(65535)"
+			", sin_addr=inet_addr(\"" multi4addr "\")}"
+		},
+		{
+			ARG_STR(SOL_IPV6), ARG_STR(MCAST_JOIN_GROUP), greq6,
+			"gr_group={sa_family=AF_INET6, sin6_port=htons(65535)"
+			", inet_pton(AF_INET6, \"" multi6addr "\", &sin6_addr)"
+			", sin6_flowinfo=htonl(4294967295)"
+			", sin6_scope_id=4294967295}"
+		},
+		{
+			ARG_STR(SOL_IPV6), ARG_STR(MCAST_LEAVE_GROUP), greq6,
+			"gr_group={sa_family=AF_INET6, sin6_port=htons(65535)"
+			", inet_pton(AF_INET6, \"" multi6addr "\", &sin6_addr)"
+			", sin6_flowinfo=htonl(4294967295)"
+			", sin6_scope_id=4294967295}"
+		}
+	};
+
+	for (i = 0; i < ARRAY_SIZE(opts); ++i) {
+		/* optlen < 0, EINVAL */
+		set_opt(0, opts[i].level, opts[i].name, opts[i].val, -1U);
+		printf("setsockopt(0, %s, %s, %p, -1) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, errstr);
+
+		/* optlen < sizeof(struct group_req), EINVAL */
+		set_opt(0, opts[i].level, opts[i].name, opts[i].val,
+			sizeof(*opts[i].val) - 1);
+		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, (unsigned int) sizeof(*opts[i].val) - 1,
+		       errstr);
+
+		/* optval EFAULT */
+		set_opt(0, opts[i].level, opts[i].name,
+			(const char *) opts[i].val + 1, sizeof(*opts[i].val));
+		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       (const char *) opts[i].val + 1,
+		       (unsigned int) sizeof(*opts[i].val), errstr);
+
+		/* classic */
+		set_opt(0, opts[i].level, opts[i].name,
+			opts[i].val, sizeof(*opts[i].val));
+		printf("setsockopt(0, %s, %s"
+		       ", {gr_interface=%s, %s}, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       IFINDEX_LO_STR, opts[i].addr,
+		       (unsigned int) sizeof(*opts[i].val), errstr);
+
+		/* optlen > sizeof(struct group_req), shortened */
+		set_opt(0, opts[i].level, opts[i].name, opts[i].val, INT_MAX);
+		printf("setsockopt(0, %s, %s"
+		       ", {gr_interface=%s, %s}, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       IFINDEX_LO_STR, opts[i].addr,
+		       INT_MAX, errstr);
+	}
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("MCAST_JOIN_GROUP && MCAST_LEAVE_GROUP")
+
+#endif
diff --git a/tests/group_req.gen.test b/tests/group_req.gen.test
new file mode 100755
index 0000000..0e753b6
--- /dev/null
+++ b/tests/group_req.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (group_req -e trace=setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=setsockopt
diff --git a/tests/ifindex.c b/tests/ifindex.c
new file mode 100644
index 0000000..390a135
--- /dev/null
+++ b/tests/ifindex.c
@@ -0,0 +1,55 @@
+/*
+ * Proxy wrappers for if_nametoindex.
+ *
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_IF_INDEXTONAME
+
+# include <net/if.h>
+
+unsigned int
+ifindex_lo(void)
+{
+	static unsigned int index;
+
+	if (!index)
+		index = if_nametoindex("lo");
+
+	return index;
+}
+
+#else /* !HAVE_IF_INDEXTONAME */
+
+unsigned int
+ifindex_lo(void)
+{
+	return 1;
+}
+
+#endif
diff --git a/tests/inet-cmsg.c b/tests/inet-cmsg.c
index b530016..fb3d430 100644
--- a/tests/inet-cmsg.c
+++ b/tests/inet-cmsg.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,9 +39,10 @@
 static void
 print_pktinfo(const struct cmsghdr *c)
 {
-	printf("IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex(\"lo\")"
-	       ", ipi_spec_dst=inet_addr(\"127.0.0.1\")"
-	       ", ipi_addr=inet_addr(\"127.0.0.1\")}");
+	printf("IP_PKTINFO, cmsg_data={ipi_ifindex=%s"
+	       ", ipi_spec_dst=inet_addr(\"%s\")"
+	       ", ipi_addr=inet_addr(\"%s\")}",
+	       IFINDEX_LO_STR, "127.0.0.1", "127.0.0.1");
 }
 
 static void
diff --git a/tests/init.sh b/tests/init.sh
index 2d4d0b4..4cb8f1a 100644
--- a/tests/init.sh
+++ b/tests/init.sh
@@ -45,7 +45,7 @@
 
 dump_log_and_fail_with()
 {
-	cat < "$LOG"
+	cat < "$LOG" >&2
 	fail_ "$*"
 }
 
@@ -341,6 +341,7 @@
 	*) NAME=
 esac
 
+STRACE_EXE=
 if [ -n "$NAME" ]; then
 	TESTDIR="$NAME.dir"
 	rm -rf -- "$TESTDIR"
@@ -356,17 +357,23 @@
 		STRACE=../../strace
 		case "${LOG_COMPILER-} ${LOG_FLAGS-}" in
 			*--suppressions=*--error-exitcode=*--tool=*)
+			STRACE_EXE="$STRACE"
 			# add valgrind command prefix
 			STRACE="${LOG_COMPILER-} ${LOG_FLAGS-} $STRACE"
 			;;
 		esac
 	}
+
+	trap 'dump_log_and_fail_with "time limit ($TIMEOUT_DURATION) exceeded"' XCPU
 else
-	[ -n "${STRACE-}" ] ||
-		STRACE=../strace
+	: "${STRACE:=../strace}"
 fi
 
-: "${TIMEOUT_DURATION:=300}"
+# Export $STRACE_EXE to check_PROGRAMS.
+: "${STRACE_EXE:=$STRACE}"
+export STRACE_EXE
+
+: "${TIMEOUT_DURATION:=600}"
 : "${SLEEP_A_BIT:=sleep 1}"
 
 [ -z "${VERBOSE-}" ] ||
diff --git a/tests/ioctl_block.c b/tests/ioctl_block.c
index e44c4c4..2bb6808 100644
--- a/tests/ioctl_block.c
+++ b/tests/ioctl_block.c
@@ -154,7 +154,7 @@
 	blkpg->data = (void *) (unsigned long) 0xcafef00dfffffeedULL;
 
 	ioctl(-1, BLKPG, blkpg);
-	printf("ioctl(-1, BLKPG, {%s, flags=%d, datalen=%d"
+	printf("ioctl(-1, BLKPG, {op=%s, flags=%d, datalen=%d"
 	       ", data=%#lx}) = -1 EBADF (%m)\n",
 	       "BLKPG_RESIZE_PARTITION", blkpg->flags, blkpg->datalen,
 	       (unsigned long) blkpg->data);
@@ -169,9 +169,9 @@
 	blkpg->data = bp;
 
 	ioctl(-1, BLKPG, blkpg);
-	printf("ioctl(-1, BLKPG, {%s, flags=%d, datalen=%d"
+	printf("ioctl(-1, BLKPG, {op=%s, flags=%d, datalen=%d"
 	       ", data={start=%lld, length=%lld, pno=%d"
-	       ", devname=\"%.*s\", volname=\"%.*s\"}})"
+	       ", devname=\"%.*s\"..., volname=\"%.*s\"...}})"
 	       " = -1 EBADF (%m)\n",
 	       "BLKPG_ADD_PARTITION",
 	       blkpg->flags, blkpg->datalen,
diff --git a/tests/ioctl_dm.c b/tests/ioctl_dm.c
index 544d70b..2f77e04 100644
--- a/tests/ioctl_dm.c
+++ b/tests/ioctl_dm.c
@@ -251,7 +251,7 @@
 	strncpy(dm_arg->uuid, str129, sizeof(dm_arg->uuid));
 	ioctl(-1, DM_VERSION, dm_arg);
 	printf("ioctl(-1, DM_VERSION, {version=4.1.2, data_size=%zu, "
-	       "dev=makedev(18, 52), name=\"%.127s\", uuid=\"%.128s\", "
+	       "dev=makedev(18, 52), name=\"%.127s\"..., uuid=\"%.128s\"..., "
 	       "flags=0}) = -1 EBADF (%m)\n",
 	       min_sizeof_dm_ioctl, str129, str129);
 
diff --git a/tests/ioctl_loop.c b/tests/ioctl_loop.c
index 4dcbf9a..3411a4d 100644
--- a/tests/ioctl_loop.c
+++ b/tests/ioctl_loop.c
@@ -39,6 +39,7 @@
 #include <sys/sysmacros.h>
 #include <linux/ioctl.h>
 #include <linux/loop.h>
+#include "print_fields.h"
 #include "xlat/loop_cmds.h"
 
 #ifndef ABBREV
@@ -81,8 +82,7 @@
 	else
 		printf("%#x /* LO_FLAGS_??? */", info->lo_flags);
 
-	printf(", lo_name=\"%.*s\"",
-	       (int) sizeof(info->lo_name) - 1, info->lo_name);
+	PRINT_FIELD_CSTRING(", ", *info, lo_name);
 
 	if (VERBOSE || print_encrypt)
 		printf(", lo_encrypt_key=\"%.*s\"",
@@ -144,17 +144,16 @@
 		printf("%s", flags);
 	else
 		printf("%#x /* LO_FLAGS_??? */", info64->lo_flags);
-	printf(", lo_file_name=\"%.*s\"",
-	       (int) sizeof(info64->lo_file_name) - 1, info64->lo_file_name);
+	PRINT_FIELD_CSTRING(", ", *info64, lo_file_name);
 
-	if (VERBOSE || print_encrypt)
-		printf(", lo_crypt_name=\"%.*s\", lo_encrypt_key=\"%.*s\"",
-		       (int) sizeof(info64->lo_crypt_name) - 1,
-		       info64->lo_crypt_name,
+	if (VERBOSE || print_encrypt) {
+		PRINT_FIELD_CSTRING(", ", *info64, lo_crypt_name);
+		printf(", lo_encrypt_key=\"%.*s\"",
 		       encrypt_key ? (int) strlen(encrypt_key) :
 		       (int) sizeof(info64->lo_encrypt_key),
 		       encrypt_key ? encrypt_key :
 		       (char *) info64->lo_encrypt_key);
+	}
 
 # if VERBOSE
 	printf(", lo_init=[%#" PRIx64 ", %#" PRIx64 "]}",
diff --git a/tests/ioctl_uffdio.c b/tests/ioctl_uffdio.c
index 817e3c7..973de39 100644
--- a/tests/ioctl_uffdio.c
+++ b/tests/ioctl_uffdio.c
@@ -44,6 +44,9 @@
 # include <linux/ioctl.h>
 # include <linux/userfaultfd.h>
 
+#include "xlat.h"
+#include "xlat/uffd_api_features.h"
+
 int
 main(void)
 {
@@ -70,10 +73,14 @@
 	api_struct->api = UFFD_API;
 	api_struct->features = 0;
 	rc = ioctl(fd, UFFDIO_API, api_struct);
-	printf("ioctl(%d, UFFDIO_API, {api=0xaa, features=0, "
-	       "features.out=%#" PRIx64 ", ioctls=1<<_UFFDIO_REGISTER|"
-	       "1<<_UFFDIO_UNREGISTER|1<<_UFFDIO_API",
-	       fd, (uint64_t)api_struct->features);
+	printf("ioctl(%d, UFFDIO_API, {api=0xaa, features=0", fd);
+	if (api_struct->features) {
+		printf(" => features=");
+		printflags(uffd_api_features, api_struct->features,
+			   "UFFD_FEATURE_???");
+	}
+	printf(", ioctls=1<<_UFFDIO_REGISTER|"
+	       "1<<_UFFDIO_UNREGISTER|1<<_UFFDIO_API");
 	api_struct->ioctls &= ~(1ull<<_UFFDIO_REGISTER|
 				1ull<<_UFFDIO_UNREGISTER|
 				1ull<<_UFFDIO_API);
diff --git a/tests/ioctl_v4l2.c b/tests/ioctl_v4l2.c
index cc5dee6..47a538e 100644
--- a/tests/ioctl_v4l2.c
+++ b/tests/ioctl_v4l2.c
@@ -502,12 +502,12 @@
 	struct v4l2_requestbuffers *const p_v4l2_requestbuffers =
 		page + size - sizeof(*p_v4l2_requestbuffers);
 	ioctl(-1, VIDIOC_REQBUFS, p_v4l2_requestbuffers);
-	printf("ioctl(-1, VIDIOC_REQBUFS, {count=%u, type=%#x"
-	       " /* V4L2_BUF_TYPE_??? */, memory=%#x /* V4L2_MEMORY_??? */})"
+	printf("ioctl(-1, VIDIOC_REQBUFS, {type=%#x /* V4L2_BUF_TYPE_??? */, "
+	       "memory=%#x /* V4L2_MEMORY_??? */, count=%u})"
 	       " = -1 EBADF (%m)\n",
-	       p_v4l2_requestbuffers->count,
 	       p_v4l2_requestbuffers->type,
-	       p_v4l2_requestbuffers->memory);
+	       p_v4l2_requestbuffers->memory,
+	       p_v4l2_requestbuffers->count);
 
 	/* VIDIOC_QUERYBUF */
 	ioctl(-1, VIDIOC_QUERYBUF, 0);
diff --git a/tests/ip_mreq.c b/tests/ip_mreq.c
index 4bfe00f..3f4648c 100644
--- a/tests/ip_mreq.c
+++ b/tests/ip_mreq.c
@@ -30,21 +30,22 @@
 #include <netinet/in.h>
 
 #if defined IP_ADD_MEMBERSHIP && defined IPV6_ADD_MEMBERSHIP \
- && defined IPV6_JOIN_ANYCAST && defined HAVE_IF_INDEXTONAME
+ && defined IPV6_JOIN_ANYCAST
 
 # include <stdio.h>
 # include <unistd.h>
+# include <sys/param.h>
 # include <sys/socket.h>
 # include <arpa/inet.h>
 # include <net/if.h>
 
+#define	multi4addr	"224.0.0.3"
+#define	multi6addr	"ff01::c"
+#define	interface	"127.0.0.1"
+
 int
 main(void)
 {
-	static const char multi4addr[] = "224.0.0.3";
-	static const char multi6addr[] = "ff01::c";
-	static const char interface[] = "127.0.0.1";
-
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct ip_mreq, m4);
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct ipv6_mreq, m6);
 	unsigned int i;
@@ -54,7 +55,7 @@
 	inet_pton(AF_INET, interface, &m4->imr_interface);
 	inet_pton(AF_INET6, multi6addr, &m6->ipv6mr_multiaddr);
 
-	m6->ipv6mr_interface = if_nametoindex("lo");
+	m6->ipv6mr_interface = ifindex_lo();
 	if (!m6->ipv6mr_interface)
 		perror_msg_and_skip("lo");
 
@@ -63,87 +64,91 @@
 		perror_msg_and_skip("socket");
 
 	struct {
-		int level;
-		const char *str_level;
-		int optname;
-		const char *str_optname;
-		void *optval;
-		unsigned int optsize;
-	} short_any[] = {
+		const int level;
+		const char *const str_level;
+		const int name;
+		const char *str_name;
+		const void *const val;
+		unsigned int size;
+		const char *const addr;
+	} opts[] = {
 		{
 			ARG_STR(SOL_IP), ARG_STR(IP_ADD_MEMBERSHIP),
-			m4, sizeof(*m4)
+			m4, sizeof(*m4),
+			"{imr_multiaddr=inet_addr(\"" multi4addr
+			"\"), imr_interface=inet_addr(\"" interface "\")}"
 		},
 		{
 			ARG_STR(SOL_IP), ARG_STR(IP_DROP_MEMBERSHIP),
-			m4, sizeof(*m4)
+			m4, sizeof(*m4),
+			"{imr_multiaddr=inet_addr(\"" multi4addr
+			"\"), imr_interface=inet_addr(\"" interface "\")}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_ADD_MEMBERSHIP),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_DROP_MEMBERSHIP),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_JOIN_ANYCAST),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		},
 		{
 			ARG_STR(SOL_IPV6), ARG_STR(IPV6_LEAVE_ANYCAST),
-			m6, sizeof(*m6)
+			m6, sizeof(*m6),
+			"{inet_pton(AF_INET6, \"" multi6addr
+			"\", &ipv6mr_multiaddr)"
+			", ipv6mr_interface=" IFINDEX_LO_STR "}"
 		}
 	};
 
-	for (i = 0; i < ARRAY_SIZE(short_any); ++i) {
-		rc = setsockopt(0, short_any[i].level, short_any[i].optname,
-				short_any[i].optval, 1);
-		printf("setsockopt(0, %s, %s, \"\\%hho\", 1) = %s\n",
-		       short_any[i].str_level, short_any[i].str_optname,
-		       *(unsigned char *) short_any[i].optval,
-		       sprintrc(rc));
+	for (i = 0; i < ARRAY_SIZE(opts); ++i) {
+		/* optlen < 0, EINVAL */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, -1);
+		printf("setsockopt(0, %s, %s, %p, -1) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, sprintrc(rc));
 
-		rc = setsockopt(0, short_any[i].level, short_any[i].optname,
-				short_any[i].optval + 1, short_any[i].optsize);
+		/* optlen < sizeof(struct), EINVAL */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, opts[i].size - 1);
 		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
-		       short_any[i].str_level, short_any[i].str_optname,
-		       short_any[i].optval + 1, short_any[i].optsize,
-		       sprintrc(rc));
-	}
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val, opts[i].size - 1, sprintrc(rc));
 
-	struct {
-		int optname;
-		const char *str_optname;
-	} long_ip[] = {
-		{ ARG_STR(IP_ADD_MEMBERSHIP) },
-		{ ARG_STR(IP_DROP_MEMBERSHIP) }
-	}, long_ipv6[] = {
-		{ ARG_STR(IPV6_ADD_MEMBERSHIP) },
-		{ ARG_STR(IPV6_DROP_MEMBERSHIP) },
-		{ ARG_STR(IPV6_JOIN_ANYCAST) },
-		{ ARG_STR(IPV6_LEAVE_ANYCAST) }
-	};
+		/* optval EFAULT */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val + 1, opts[i].size);
+		printf("setsockopt(0, %s, %s, %p, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].val + 1, opts[i].size, sprintrc(rc));
 
-	for (i = 0; i < ARRAY_SIZE(long_ip); ++i) {
-		rc = setsockopt(0, SOL_IP, long_ip[i].optname,
-				m4, sizeof(*m4));
-		printf("setsockopt(0, SOL_IP, %s"
-		       ", {imr_multiaddr=inet_addr(\"%s\")"
-		       ", imr_interface=inet_addr(\"%s\")}, %u) = %s\n",
-		       long_ip[i].str_optname, multi4addr,
-		       interface, (unsigned) sizeof(*m4), sprintrc(rc));
-	}
+		/* classic */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, opts[i].size);
+		printf("setsockopt(0, %s, %s, %s, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].addr, opts[i].size, sprintrc(rc));
 
-	for (i = 0; i < ARRAY_SIZE(long_ipv6); ++i) {
-		rc = setsockopt(0, SOL_IPV6, long_ipv6[i].optname,
-				m6, sizeof(*m6));
-		printf("setsockopt(0, SOL_IPV6, %s"
-		       ", {inet_pton(AF_INET6, \"%s\", &ipv6mr_multiaddr)"
-		       ", ipv6mr_interface=if_nametoindex(\"lo\")}"
-		       ", %u) = %s\n",
-		       long_ipv6[i].str_optname, multi6addr,
-		       (unsigned) sizeof(*m6), sprintrc(rc));
+		/* optlen > sizeof(struct), shortened */
+		rc = setsockopt(0, opts[i].level, opts[i].name,
+				opts[i].val, INT_MAX);
+		printf("setsockopt(0, %s, %s, %s, %u) = %s\n",
+		       opts[i].str_level, opts[i].str_name,
+		       opts[i].addr, INT_MAX, sprintrc(rc));
 	}
 
 	puts("+++ exited with 0 +++");
@@ -153,6 +158,6 @@
 #else
 
 SKIP_MAIN_UNDEFINED("IP_ADD_MEMBERSHIP && IPV6_ADD_MEMBERSHIP"
-		    " && IPV6_JOIN_ANYCAST && HAVE_IF_INDEXTONAME")
+		    " && IPV6_JOIN_ANYCAST")
 
 #endif
diff --git a/tests/ipc_msgbuf.c b/tests/ipc_msgbuf.c
index 9d149fa..d108389 100644
--- a/tests/ipc_msgbuf.c
+++ b/tests/ipc_msgbuf.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/is_linux_mips_n64.c b/tests/is_linux_mips_n64.c
new file mode 100644
index 0000000..843203b
--- /dev/null
+++ b/tests/is_linux_mips_n64.c
@@ -0,0 +1,45 @@
+/*
+ * Check whether the kernel supports MIPS n64 syscalls.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef MIPS
+
+int
+main(void)
+{
+	__asm__(".set noreorder; li $a0, 0; li $v0, 5058; syscall");
+	return 77;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("MIPS")
+
+#endif
diff --git a/tests/keyctl.c b/tests/keyctl.c
index 492c62a..2d8b9ec 100644
--- a/tests/keyctl.c
+++ b/tests/keyctl.c
@@ -2,6 +2,7 @@
  * Check decoding of keyctl syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,6 +37,7 @@
 # include <linux/types.h>
 # include <linux/keyctl.h>
 
+# include <assert.h>
 # include <errno.h>
 # include <inttypes.h>
 # include <stdarg.h>
@@ -55,6 +57,15 @@
 };
 # endif
 
+# ifndef HAVE_STRUCT_KEYCTL_KDF_PARAMS
+struct keyctl_kdf_params {
+	char *hashname;
+	char *otherinfo;
+	uint32_t otherinfolen;
+	uint32_t __spare[8];
+};
+# endif
+
 # include "xlat.h"
 # include "xlat/keyctl_commands.h"
 
@@ -76,6 +87,9 @@
 bool nul_terminated_buf = true;
 bool buf_in_arg;
 
+/* From ioctl_dm.c */
+# define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
+
 /*
  * When this is called with positive size, the buffer provided is an "out"
  * argument and rc contains resulting size (globally defined nul_terminated_buf
@@ -97,17 +111,11 @@
 
 	if (!nul_terminated_buf ||
 	    (strnlen(str, limited_size) == limited_size)) {
-		printf("\"");
 		print_quoted_memory(str, limited_size);
 		if (print_size > limit)
-			printf("\"...");
-		else
-			printf("\"");
-	} else {
-		printf("\"");
+			printf("...");
+	} else
 		print_quoted_string(str);
-		printf("\"");
-	}
 }
 
 static void
@@ -121,9 +129,9 @@
 		printf("%s", str);
 	} else {
 		if (size == sizeof(uint64_t))
-			printf(fmt, (uint64_t)arg);
+			printf(fmt, (uint64_t) arg);
 		else if (size == sizeof(uint32_t))
-			printf(fmt, (uint32_t)arg);
+			printf(fmt, (uint32_t) arg);
 		else
 			print_quoted_string_limit((void *) (uintptr_t) arg,
 						  size, rc);
@@ -189,6 +197,85 @@
 }
 
 int
+append_str(char **buf, size_t *left, const char *fmt, ...)
+{
+	int ret;
+	va_list ap;
+
+	va_start(ap, fmt);
+	ret = vsnprintf(*buf, *left, fmt, ap);
+	va_end(ap);
+
+	assert((ret >= 0) && ((unsigned) ret < *left));
+
+	*left -= ret;
+	*buf += ret;
+
+	return ret;
+}
+
+const char *
+kckdfp_to_str(struct keyctl_kdf_params *kdf, bool deref_hash, bool deref_oi,
+	       bool print_spare, const char *hash_str, const char *oi_str)
+{
+	static char buf[4096];
+
+	size_t left = sizeof(buf);
+	char *pos = buf;
+
+	append_str(&pos, &left, "{hashname=");
+
+	if (deref_hash && hash_str) {
+		append_str(&pos, &left, "%s", hash_str);
+	} else if (!kdf->hashname) {
+		append_str(&pos, &left, "NULL");
+	} else if (deref_hash) {
+		append_str(&pos, &left, "\"%.*s\"", limit, kdf->hashname);
+
+		if (strnlen(kdf->hashname, limit + 1) > limit)
+			append_str(&pos, &left, "...");
+	} else {
+		append_str(&pos, &left, "%p", kdf->hashname);
+	}
+
+	append_str(&pos, &left, ", otherinfo=");
+
+	if (deref_oi && oi_str) {
+		append_str(&pos, &left, "%s", oi_str);
+	} else if (!kdf->otherinfo) {
+		append_str(&pos, &left, "NULL");
+	} else if (deref_oi) {
+		append_str(&pos, &left, "\"%.*s\"", limit, kdf->otherinfo);
+
+		if (strnlen(kdf->otherinfo, limit + 1) > limit)
+			append_str(&pos, &left, "...");
+	} else {
+		append_str(&pos, &left, "%p", kdf->otherinfo);
+	}
+
+	append_str(&pos, &left, ", otherinfolen=%u", kdf->otherinfolen);
+
+	if (print_spare) {
+		size_t i;
+
+		append_str(&pos, &left, ", __spare=[");
+
+		for (i = 0; i < ARRAY_SIZE(kdf->__spare); i++) {
+			if  (i)
+				append_str(&pos, &left, ", ");
+
+			append_str(&pos, &left, "%#x", kdf->__spare[i]);
+		}
+
+		append_str(&pos, &left, "]");
+	}
+
+	append_str(&pos, &left, "}");
+
+	return buf;
+}
+
+int
 main(void)
 {
 	enum { PR_LIMIT = 10, IOV_SIZE = 11, IOV_STR_SIZE = 4096 };
@@ -216,6 +303,32 @@
 	static const char *kcdhp_str = "{private=KEY_SPEC_GROUP_KEYRING, "
 		"prime=1234567890, base=-1153374643}";
 
+	/*
+	 * It's bigger than current hash name size limit, but since it's
+	 * implementation-dependent and totally internal, we do not rely
+	 * on it much.
+	 */
+	static const char long_hash_data[] = STR32 STR32 STR32 STR32 "xxx";
+	static const char short_hash_data[] = "hmac(aes)";
+	static const char otherinfo1_data[] = "\1\2 OH HAI THAR\255\0\1";
+	static const char otherinfo2_data[] = "\1\2\n\255\0\1";
+	static const struct keyctl_kdf_params kckdfp_data[] = {
+		[0] = { NULL, NULL, 0, { 0 } },
+		[1] = { NULL /* Changed to unaccessible address in copy */,
+			NULL, 0xbadc0dedU, { [7] = 0xdeadfeedU } },
+		[2] = { NULL /* long_hash_data */,
+			NULL /* Changed to unaccessible address in copy */,
+			0, { 0 } },
+		[3] = { NULL /* unterminated1 */,
+			NULL /* otherinfo_data */, 0, { 1 } },
+		[4] = { NULL /* short_hash_data */,
+			NULL /* otherinfo1_data */, sizeof(otherinfo1_data),
+			{ 0, 0xfacebeef, 0, 0xba5e1ead } },
+		[5] = { NULL /* short_hash_data */,
+			NULL /* otherinfo2_data */, sizeof(otherinfo2_data),
+			{ 0 } },
+	};
+
 	char *bogus_str = tail_memdup(unterminated1, sizeof(unterminated1));
 	char *bogus_desc = tail_memdup(unterminated2, sizeof(unterminated2));
 	char *short_type = tail_memdup(short_type_str, sizeof(short_type_str));
@@ -223,6 +336,15 @@
 	char *long_type = tail_memdup(long_type_str, sizeof(long_type_str));
 	char *long_desc = tail_memdup(long_desc_str, sizeof(long_desc_str));
 	char *kcdhp = tail_memdup(&kcdhp_data, sizeof(kcdhp_data));
+	char *kckdfp_long_hash = tail_memdup(long_hash_data,
+					     sizeof(long_hash_data));
+	char *kckdfp_short_hash = tail_memdup(short_hash_data,
+					      sizeof(short_hash_data));
+	char *kckdfp_otherinfo1 = tail_memdup(otherinfo1_data,
+					      sizeof(otherinfo1_data));
+	char *kckdfp_otherinfo2 = tail_memdup(otherinfo2_data,
+					      sizeof(otherinfo2_data));
+	char *kckdfp_char = tail_alloc(sizeof(kckdfp_data[0]));
 	struct iovec *key_iov = tail_alloc(sizeof(*key_iov) * IOV_SIZE);
 	char *bogus_buf1 = tail_alloc(9);
 	char *bogus_buf2 = tail_alloc(256);
@@ -230,7 +352,7 @@
 	char *key_iov_str2 = tail_alloc(4096);
 	ssize_t ret;
 	ssize_t kis_size = 0;
-	int i;
+	size_t i;
 
 	key_iov[0].iov_base = short_type;
 	key_iov[0].iov_len = sizeof(short_type_str);
@@ -299,40 +421,48 @@
 	do_keyctl((kernel_ulong_t) 0xbadc0dedfacefeedULL,
 		  "0xfacefeed /* KEYCTL_??? */",
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL, kulong_fmt,
+			(kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL,
+			kulong_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee2badc0de6ULL, NULL, kulong_fmt,
+			(kernel_ulong_t) 0xdeadfee2badc0de6ULL, NULL,
+			kulong_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee3badc0de7ULL, NULL, kulong_fmt,
+			(kernel_ulong_t) 0xdeadfee3badc0de7ULL, NULL,
+			kulong_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, kulong_fmt);
+			(kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL,
+			kulong_fmt);
 
 
 	/* GET_KEYRING_ID */
 	do_keyctl(ARG_STR(KEYCTL_GET_KEYRING_ID),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xbadc0dedffffffffLLU, "-1",
-		  NULL, 0UL);
+			(kernel_ulong_t) 0xbadc0dedffffffffLLU, "-1", NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_KEYRING_ID),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), "%d",
-		  sizeof(int), 3141592653U, NULL, "%d",
-		  NULL, 0UL);
+		  sizeof(int), 3141592653U, NULL, "%d", NULL,
+		  0UL);
 
 
 	/* KEYCTL_JOIN_SESSION_KEYRING */
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
-		  sizeof(char *), ARG_STR(NULL), NULL, 0UL);
+		  sizeof(char *), ARG_STR(NULL), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
-		  sizeof(char *), bogus_str, NULL, ptr_fmt, 0UL);
+		  sizeof(char *), bogus_str, NULL, ptr_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
-		  sizeof(char *), ARG_STR("bogus name"), NULL, 0UL);
+		  sizeof(char *), ARG_STR("bogus name"), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
 		  sizeof(char *), "very long keyring name", "\"very long \"...",
-		  NULL, 0UL);
+			NULL,
+		  0UL);
 
 
 	/* KEYCTL_UPDATE */
@@ -342,19 +472,19 @@
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 0, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(char *), bogus_str, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -369,11 +499,14 @@
 
 	/* KEYCTL_REVOKE */
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -383,29 +516,33 @@
 	do_keyctl(ARG_STR(KEYCTL_CHOWN),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(uid_t), ARG_STR(-1), NULL,
-		  sizeof(gid_t), ARG_STR(-1), NULL, 0UL);
+		  sizeof(gid_t), ARG_STR(-1), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CHOWN),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
-		  sizeof(gid_t), 3141592653U, NULL, "%u", 0UL);
+		  sizeof(gid_t), 3141592653U, NULL, "%u",
+		  0UL);
 
 
 	/* KEYCTL_SETPERM */
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
 		  sizeof(uint32_t), 0xffffffffU,
-		  "KEY_POS_VIEW|KEY_POS_READ|KEY_POS_WRITE|"
-		  "KEY_POS_SEARCH|KEY_POS_LINK|KEY_POS_SETATTR|"
-		  "KEY_USR_VIEW|KEY_USR_READ|KEY_USR_WRITE|"
-		  "KEY_USR_SEARCH|KEY_USR_LINK|KEY_USR_SETATTR|"
-		  "KEY_GRP_VIEW|KEY_GRP_READ|KEY_GRP_WRITE|"
-		  "KEY_GRP_SEARCH|KEY_GRP_LINK|KEY_GRP_SETATTR|"
-		  "KEY_OTH_VIEW|KEY_OTH_READ|KEY_OTH_WRITE|"
-		  "KEY_OTH_SEARCH|KEY_OTH_LINK|KEY_OTH_SETATTR|"
-		  "0xc0c0c0c0", NULL, 0UL);
+			"KEY_POS_VIEW|KEY_POS_READ|KEY_POS_WRITE|"
+			"KEY_POS_SEARCH|KEY_POS_LINK|KEY_POS_SETATTR|"
+			"KEY_USR_VIEW|KEY_USR_READ|KEY_USR_WRITE|"
+			"KEY_USR_SEARCH|KEY_USR_LINK|KEY_USR_SETATTR|"
+			"KEY_GRP_VIEW|KEY_GRP_READ|KEY_GRP_WRITE|"
+			"KEY_GRP_SEARCH|KEY_GRP_LINK|KEY_GRP_SETATTR|"
+			"KEY_OTH_VIEW|KEY_OTH_READ|KEY_OTH_WRITE|"
+			"KEY_OTH_SEARCH|KEY_OTH_LINK|KEY_OTH_SETATTR|"
+			"0xc0c0c0c0", NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(uint32_t), 0, NULL, "%#x", 0UL);
+		  sizeof(uint32_t), 0, NULL, "%#x",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(uint32_t), 0xc0c0c0c0, "0xc0c0c0c0 /* KEY_??? */",
@@ -418,38 +555,41 @@
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -4, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
+		  0UL);
 
 
 	/* KEYCTL_CLEAR */
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -458,10 +598,12 @@
 	/* KEYCTL_LINK */
 	do_keyctl(ARG_STR(KEYCTL_LINK),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_LINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_LINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -475,7 +617,8 @@
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -512,6 +655,34 @@
 		  sizeof(long_type_str), long_desc, NULL, NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 
+	/* KEYCTL_RESTRICT_KEYRING */
+
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(char *), ARG_STR(NULL), NULL,
+		  sizeof(char *), ARG_STR(NULL), NULL,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
+		  sizeof(char *), (char *) 0xfffff00dfffff157ULL, NULL, ptr_fmt,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  sizeof(char *), bogus_str, NULL, ptr_fmt,
+		  sizeof(char *), bogus_desc, NULL, ptr_fmt,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
+		  sizeof(short_type_str), short_type, NULL, NULL,
+		  sizeof(short_desc_str), short_desc, NULL, NULL,
+			  NULL);
+	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+		  sizeof(int32_t), 0, NULL, "%d",
+		  sizeof(long_type_str), long_type, NULL, NULL,
+		  sizeof(long_type_str), long_desc, NULL, NULL,
+			  NULL);
+
 	buf_in_arg = false;
 
 
@@ -532,23 +703,23 @@
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -4, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
+		  0UL);
 
 	nul_terminated_buf = true;
 
@@ -559,32 +730,32 @@
 		  sizeof(int32_t), 0, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  sizeof(int32_t), 0, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
 		  sizeof(int32_t), bogus_key1, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(char *), bogus_str, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 32LLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 32LLU, NULL, ksize_fmt,
 		  sizeof(int32_t), bogus_key2, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(short_type_str), short_desc, NULL, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) sizeof(short_type_str) - 1, NULL,
-			  ksize_fmt,
+			(kernel_ulong_t) sizeof(short_type_str) - 1, NULL,
+			ksize_fmt,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  sizeof(long_type_str), long_desc, NULL, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) sizeof(long_type_str), NULL, ksize_fmt,
+			(kernel_ulong_t) sizeof(long_type_str), NULL, ksize_fmt,
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 	buf_in_arg = false;
@@ -594,16 +765,20 @@
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(int32_t), 0, NULL, "%d",
 		  sizeof(uint32_t), 0, NULL, "%u",
-		  sizeof(int32_t), 0, NULL, "%d", 0UL);
+		  sizeof(int32_t), 0, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(uint32_t), 3141592653U, NULL, "%u",
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_NEGATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
@@ -632,24 +807,30 @@
 	/* KEYCTL_SET_TIMEOUT */
 	do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
 		  sizeof(int32_t), 0, NULL, "%d",
-		  sizeof(uint32_t), 0, NULL, "%u", 0UL);
+		  sizeof(uint32_t), 0, NULL, "%u",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(uint32_t), 3141592653U, NULL, "%u", 0UL);
+		  sizeof(uint32_t), 3141592653U, NULL, "%u",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
 		  0UL);
 
 
 	/* KEYCTL_ASSUME_AUTHORITY */
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -659,28 +840,29 @@
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
-		  sizeof(uint32_t), 0xbadc0dedU, NULL, "%u", 0UL);
+		  sizeof(uint32_t), 0xbadc0dedU, NULL, "%u",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
 		  (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -4, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
+		  0UL);
 
 
 	/* KEYCTL_SESSION_TO_PARENT */
@@ -701,14 +883,17 @@
 	do_keyctl(ARG_STR(KEYCTL_REJECT),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadca75facef157LLU, "4207866199", NULL,
+			(kernel_ulong_t) 0xdeadca75facef157LLU, "4207866199",
+			NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
 		  sizeof(int32_t), bogus_key2, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_REJECT),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
+			NULL,
 		  sizeof(uint32_t), ARG_STR(ENODEV), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 
@@ -718,19 +903,19 @@
 		  sizeof(int32_t), 0, NULL, "%d",
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  sizeof(int32_t), 0, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 0xdeadfeedLLU, NULL,
+			ksize_fmt,
 		  sizeof(int32_t), bogus_key1, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
 		  sizeof(char *), key_iov + IOV_SIZE, NULL, ptr_fmt,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 32LLU, NULL, ksize_fmt,
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 32LLU, NULL,
+			ksize_fmt,
 		  sizeof(int32_t), bogus_key2, NULL, "%d");
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -741,18 +926,21 @@
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  sizeof(key_iov), key_iov, key_iov_str2, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) IOV_SIZE, NULL, ksize_fmt,
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) IOV_SIZE, NULL,
+			ksize_fmt,
 		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 
 	/* KEYCTL_INVALIDATE */
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), bogus_key2, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key2, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
@@ -761,10 +949,12 @@
 	/* KEYCTL_GET_PERSISTENT */
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), ARG_STR(-1), NULL,
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL, 0UL);
+		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
-		  sizeof(int32_t), bogus_key1, NULL, "%d", 0UL);
+		  sizeof(int32_t), bogus_key1, NULL, "%d",
+		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
@@ -782,29 +972,86 @@
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(char *), ARG_STR(NULL), ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
-		  0UL);
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(char *), kcdhp + 1, NULL, ptr_fmt,
 		  sizeof(char *), (char *) 0xfffff157ffffdeadULL, NULL, ptr_fmt,
 		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
-		  0UL);
+			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
 		  (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 9, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
 		  (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) 256, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
+		  sizeof(char *), ARG_STR(NULL), ptr_fmt);
 	do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
 		  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
 		  (size_t) -1, (uintptr_t) bogus_buf2, NULL, NULL,
-		  sizeof(kernel_ulong_t),
-		  (kernel_ulong_t) -1, NULL, ksize_fmt, 0UL);
+		  sizeof(kernel_ulong_t), (kernel_ulong_t) -1, NULL, ksize_fmt,
+		  sizeof(char *), kckdfp_char + 1, NULL, ptr_fmt);
+
+	/* KEYCTL_DH_COMPUTE + KDF */
+
+	for (i = 0; i < ARRAY_SIZE(kckdfp_data); i++) {
+		struct keyctl_kdf_params *kckdfp =
+			(struct keyctl_kdf_params *) kckdfp_char;
+		bool deref_hash = true;
+		bool deref_opts = true;
+		bool print_spare = false;
+		const char *hash_str = NULL;
+		const char *oi_str = NULL;
+
+		memcpy(kckdfp, kckdfp_data + i, sizeof(kckdfp_data[i]));
+
+		switch (i) {
+		case 1:
+			deref_hash = false;
+			print_spare = true;
+			kckdfp->hashname =
+				kckdfp_short_hash + sizeof(short_hash_data);
+			break;
+		case 2:
+			deref_opts = false;
+			kckdfp->hashname = kckdfp_long_hash;
+			kckdfp->otherinfo =
+				kckdfp_otherinfo1 + sizeof(otherinfo1_data);
+			break;
+		case 3:
+			deref_opts = false;
+			deref_hash = false;
+			print_spare = true;
+			kckdfp->hashname = bogus_str;
+			kckdfp->otherinfo = kckdfp_otherinfo1;
+			break;
+		case 4:
+			oi_str = "\"\\1\\2 OH HAI \"...";
+			print_spare = true;
+			kckdfp->hashname = kckdfp_short_hash;
+			kckdfp->otherinfo = kckdfp_otherinfo1;
+			break;
+		case 5:
+			oi_str = "\"\\1\\2\\n\\255\\0\\1\\0\"";
+			kckdfp->hashname = kckdfp_short_hash;
+			kckdfp->otherinfo = kckdfp_otherinfo2;
+			break;
+		}
+
+		do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
+			  sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
+			  (size_t) -1, (uintptr_t) bogus_buf2, NULL, NULL,
+			  sizeof(kernel_ulong_t), (kernel_ulong_t) -1, NULL,
+				ksize_fmt,
+			  sizeof(kckdfp), kckdfp_char,
+				kckdfp_to_str(kckdfp, deref_hash, deref_opts,
+					      print_spare, hash_str, oi_str),
+				NULL);
+	}
 
 	nul_terminated_buf = true;
 
diff --git a/tests/ksysent.c b/tests/ksysent.c
index 860e21e..7e25def 100644
--- a/tests/ksysent.c
+++ b/tests/ksysent.c
@@ -34,31 +34,14 @@
 #include <string.h>
 #include <asm/unistd.h>
 
-#define TD 0
-#define TF 0
-#define TI 0
-#define TN 0
-#define TP 0
-#define TS 0
-#define TM 0
-#define TST 0
-#define TLST 0
-#define TFST 0
-#define TSTA 0
-#define TSF 0
-#define TFSF 0
-#define TSFA 0
-#define NF 0
-#define MA 0
-#define SI 0
-#define SE 0
-#define CST 0
-#define SEN(arg) 0, 0
+#include "sysent_shorthand_defs.h"
 
 static const struct_sysent syscallent[] = {
 #include "syscallent.h"
 };
 
+#include "sysent_shorthand_undefs.h"
+
 typedef const char *pstr_t;
 static const pstr_t ksyslist[] = {
 #include "ksysent.h"
diff --git a/tests/mincore.c b/tests/mincore.c
index 0ede687..ae4eb42 100644
--- a/tests/mincore.c
+++ b/tests/mincore.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/mmsg.c b/tests/mmsg.c
index a5cf0e7..e00100a 100644
--- a/tests/mmsg.c
+++ b/tests/mmsg.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2014 Masatake YAMATO <yamato@redhat.com>
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/mmsg_name.c b/tests/mmsg_name.c
index ad5a482..8c54a48 100644
--- a/tests/mmsg_name.c
+++ b/tests/mmsg_name.c
@@ -3,6 +3,7 @@
  * of sendmmsg and recvmmsg syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/msg_control.c b/tests/msg_control.c
index b63f2d0..48b7347 100644
--- a/tests/msg_control.c
+++ b/tests/msg_control.c
@@ -544,11 +544,7 @@
 	cmsg->cmsg_type = cmsg_type;
 
 	struct in_pktinfo *const info = (struct in_pktinfo *) CMSG_DATA(cmsg);
-#ifdef HAVE_IF_INDEXTONAME
-	info->ipi_ifindex = if_nametoindex("lo");
-#else
-	info->ipi_ifindex = 1;
-#endif
+	info->ipi_ifindex = ifindex_lo();
 	info->ipi_spec_dst.s_addr = inet_addr("1.2.3.4");
 	info->ipi_addr.s_addr = inet_addr("5.6.7.8");
 
@@ -563,12 +559,7 @@
 	       ", ipi_addr=inet_addr(\"%s\")}}]"
 	       ", msg_controllen=%u, msg_flags=0}, 0) = %d %s (%m)\n",
 	       (unsigned) cmsg->cmsg_len, cmsg_type_str,
-#ifdef HAVE_IF_INDEXTONAME
-	       "if_nametoindex(\"lo\")",
-#else
-	       "1",
-#endif
-	       "1.2.3.4", "5.6.7.8", len, rc, errno2name());
+	       IFINDEX_LO_STR, "1.2.3.4", "5.6.7.8", len, rc, errno2name());
 }
 
 static void
diff --git a/tests/net-accept-connect.c b/tests/net-accept-connect.c
index 0050eeb..4045e05 100644
--- a/tests/net-accept-connect.c
+++ b/tests/net-accept-connect.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2013-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2013-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/net-icmp_filter.c b/tests/net-icmp_filter.c
index 71e530d..1dd1f21 100644
--- a/tests/net-icmp_filter.c
+++ b/tests/net-icmp_filter.c
@@ -49,8 +49,8 @@
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct icmp_filter, f);
 
 	getsockopt(-1, SOL_RAW, ICMP_FILTER, f, plen);
-	printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, %p, %p) = -1 %s (%m)\n",
-	       f, plen, errno2name());
+	printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, %p, [%d]) = -1 %s (%m)\n",
+	       f, *plen, errno2name());
 
 	setsockopt(-1, SOL_RAW, ICMP_FILTER, efault, sizeof(*f));
 	printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, %p, %u) = -1 %s (%m)\n",
diff --git a/tests/net-sockaddr.c b/tests/net-sockaddr.c
index 1d9bac3..fe933d4 100644
--- a/tests/net-sockaddr.c
+++ b/tests/net-sockaddr.c
@@ -50,11 +50,6 @@
 # include <bluetooth/sco.h>
 #endif
 
-#ifdef HAVE_IF_INDEXTONAME
-/* <linux/if.h> used to conflict with <net/if.h> */
-extern unsigned int if_nametoindex(const char *);
-#endif
-
 static void
 check_un(void)
 {
@@ -186,19 +181,17 @@
 	       ntohs(in6->sin6_port), h_addr,
 	       ntohl(in6->sin6_flowinfo), in6->sin6_scope_id, len, ret);
 
-#ifdef HAVE_IF_INDEXTONAME
-	in6->sin6_scope_id = if_nametoindex("lo");
+	in6->sin6_scope_id = ifindex_lo();
 	if (in6->sin6_scope_id) {
 		ret = connect(-1, (void *) in6, len);
 		printf("connect(-1, {sa_family=AF_INET6, sin6_port=htons(%hu)"
 		       ", inet_pton(AF_INET6, \"%s\", &sin6_addr)"
 		       ", sin6_flowinfo=htonl(%u)"
-		       ", sin6_scope_id=if_nametoindex(\"lo\")}, %u)"
+		       ", sin6_scope_id=%s}, %u)"
 		       " = %d EBADF (%m)\n",
-		       ntohs(in6->sin6_port), h_addr,
-		       ntohl(in6->sin6_flowinfo), len, ret);
+		       ntohs(in6->sin6_port), h_addr, ntohl(in6->sin6_flowinfo),
+		       IFINDEX_LO_STR, len, ret);
 	}
-#endif
 }
 
 static void
@@ -371,19 +364,16 @@
 	       ", sll_pkttype=PACKET_HOST, sll_halen=0}, %u)"
 	       " = %d EBADF (%m)\n", c_ll.sll_ifindex, len, ret);
 
-#ifdef HAVE_IF_INDEXTONAME
-	const int id = if_nametoindex("lo");
-	if (id) {
-		((struct sockaddr_ll *) ll)->sll_ifindex = id;
+	((struct sockaddr_ll *) ll)->sll_ifindex = ifindex_lo();
+	if (((struct sockaddr_ll *) ll)->sll_ifindex) {
 		ret = connect(-1, ll, len);
 		printf("connect(-1, {sa_family=AF_PACKET"
 		       ", sll_protocol=htons(ETH_P_ALL)"
-		       ", sll_ifindex=if_nametoindex(\"lo\")"
+		       ", sll_ifindex=%s"
 		       ", sll_hatype=ARPHRD_ETHER"
 		       ", sll_pkttype=PACKET_HOST, sll_halen=0}, %u)"
-		       " = %d EBADF (%m)\n", len, ret);
+		       " = %d EBADF (%m)\n", IFINDEX_LO_STR, len, ret);
 	}
-#endif
 }
 
 #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
diff --git a/tests/netlink_crypto.c b/tests/netlink_crypto.c
new file mode 100644
index 0000000..deb1644
--- /dev/null
+++ b/tests/netlink_crypto.c
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_CRYPTOUSER_H
+
+# include <stdio.h>
+# include <unistd.h>
+# include <sys/socket.h>
+# include <linux/cryptouser.h>
+# include "test_netlink.h"
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_type = CRYPTO_MSG_NEWALG,
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_NEWALG"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = CRYPTO_MSG_GETALG;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_GETALG"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = CRYPTO_MSG_NEWALG;
+	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_NEWALG"
+	       ", flags=NLM_F_ECHO|NLM_F_REPLACE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = CRYPTO_MSG_DELALG;
+	nlh.nlmsg_flags = NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_DELALG"
+	       ", flags=%#x /* NLM_F_??? */, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, NLM_F_REPLACE,
+	       (unsigned) sizeof(nlh), sprintrc(rc));
+}
+
+static void
+test_crypto_msg_newalg(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	struct crypto_user_alg alg = {
+		.cru_name = "abcd",
+		.cru_driver_name = "efgh",
+		.cru_module_name = "dcba",
+		.cru_type = 0xabcdfabc,
+		.cru_mask = 0xfedabacd,
+		.cru_refcnt = 0xbcacfacd,
+		.cru_flags = 0xefacdbad
+	};
+	TEST_NETLINK_OBJECT_EX(fd, nlh0,
+			       CRYPTO_MSG_NEWALG, NLM_F_REQUEST,
+			       alg, print_quoted_memory,
+			       printf("{cru_name=\"abcd\""
+				      ", cru_driver_name=\"efgh\""
+				      ", cru_module_name=\"dcba\"");
+			       PRINT_FIELD_X(", ", alg, cru_type);
+			       PRINT_FIELD_X(", ", alg, cru_mask);
+			       PRINT_FIELD_U(", ", alg, cru_refcnt);
+			       PRINT_FIELD_X(", ", alg, cru_flags);
+			       printf("}"));
+
+	fill_memory_ex(alg.cru_name, sizeof(alg.cru_name), '0', 10);
+	fill_memory_ex(alg.cru_driver_name, sizeof(alg.cru_driver_name),
+		       'a', 'z' - 'a' + 1);
+	fill_memory_ex(alg.cru_module_name, sizeof(alg.cru_module_name),
+		       'A', 'Z' - 'A' + 1);
+
+	TEST_NETLINK_OBJECT_EX(fd, nlh0,
+			       CRYPTO_MSG_NEWALG, NLM_F_REQUEST,
+			       alg, print_quoted_memory,
+			       printf("{cru_name=");
+			       print_quoted_memory(alg.cru_name,
+				       sizeof(alg.cru_name) - 1);
+			       printf("..., cru_driver_name=");
+			       print_quoted_memory(alg.cru_driver_name,
+				       sizeof(alg.cru_driver_name) - 1);
+			       printf("..., cru_module_name=");
+			       print_quoted_memory(alg.cru_module_name,
+				       sizeof(alg.cru_module_name) - 1);
+			       PRINT_FIELD_X("..., ", alg, cru_type);
+			       PRINT_FIELD_X(", ", alg, cru_mask);
+			       PRINT_FIELD_U(", ", alg, cru_refcnt);
+			       PRINT_FIELD_X(", ", alg, cru_flags);
+			       printf("}"));
+}
+
+static void
+test_crypto_msg_unspec(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* CRYPTO_MSG_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      4, "abcd", 4, printf("\"\\x61\\x62\\x63\\x64\""));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_CRYPTO);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+	test_crypto_msg_newalg(fd);
+	test_crypto_msg_unspec(fd);
+
+	printf("+++ exited with 0 +++\n");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_CRYPTOUSER_H")
+
+#endif
diff --git a/tests/netlink_crypto.gen.test b/tests/netlink_crypto.gen.test
new file mode 100755
index 0000000..b138099
--- /dev/null
+++ b/tests/netlink_crypto.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_crypto +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/netlink_generic.c b/tests/netlink_generic.c
index 4f80c8b..cd9fbea 100644
--- a/tests/netlink_generic.c
+++ b/tests/netlink_generic.c
@@ -63,7 +63,8 @@
 	rc = sendto(fd, &req, sizeof(req), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=nlctrl"
 	       ", flags=NLM_F_REQUEST|0x300, seq=0, pid=0}"
-	       ", \"\\3\\0\\0\\0\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", \"\\x03\\x00\\x00\\x00\"}, %u"
+	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, req.nlh.nlmsg_len,
 	       (unsigned int) sizeof(req), sprintrc(rc));
 }
diff --git a/tests/netlink_inet_diag.c b/tests/netlink_inet_diag.c
index 5f68cb3..8b3d8af 100644
--- a/tests/netlink_inet_diag.c
+++ b/tests/netlink_inet_diag.c
@@ -2,6 +2,7 @@
  * This file is part of inet-yy strace test.
  *
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/netlink_kobject_uevent.c b/tests/netlink_kobject_uevent.c
new file mode 100644
index 0000000..cacab5f
--- /dev/null
+++ b/tests/netlink_kobject_uevent.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <stdio.h>
+#include <sys/socket.h>
+#include "netlink.h"
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	long rc;
+	int fd = create_nl_socket(NETLINK_KOBJECT_UEVENT);
+
+	/* test using data that looks like a zero-length C string */
+	char *const buf = tail_alloc(DEFAULT_STRLEN + 1);
+	buf[0] = '=';
+	fill_memory_ex(buf + 1, DEFAULT_STRLEN, 0, DEFAULT_STRLEN);
+
+	rc = sendto(fd, buf + 1, DEFAULT_STRLEN, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(buf + 1, DEFAULT_STRLEN);
+	printf(", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       DEFAULT_STRLEN, sprintrc(rc));
+
+	rc = sendto(fd, buf, DEFAULT_STRLEN + 1, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(buf, DEFAULT_STRLEN);
+	printf("..., %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       DEFAULT_STRLEN + 1, sprintrc(rc));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/netlink_kobject_uevent.gen.test b/tests/netlink_kobject_uevent.gen.test
new file mode 100755
index 0000000..310a70b
--- /dev/null
+++ b/tests/netlink_kobject_uevent.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_kobject_uevent +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/netlink_netlink_diag.c b/tests/netlink_netlink_diag.c
index d7e83f5..855e404 100644
--- a/tests/netlink_netlink_diag.c
+++ b/tests/netlink_netlink_diag.c
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/netlink_protocol.c b/tests/netlink_protocol.c
index f09dd9a..be1a652 100644
--- a/tests/netlink_protocol.c
+++ b/tests/netlink_protocol.c
@@ -83,13 +83,15 @@
 
 	/* whole message length < sizeof(struct nlmsghdr) */
 	rc = sendto(fd, req->magic, sizeof(req->magic), MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, \"abcd\", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	printf("sendto(%d, \"\\x61\\x62\\x63\\x64\""
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, (unsigned) sizeof(req->magic), sprintrc(rc));
 
 	/* a single message with some data */
 	rc = sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, req->nlh.nlmsg_len, NLM_F_DUMP,
 	       (unsigned) sizeof(*req), sprintrc(rc));
 
@@ -105,7 +107,8 @@
 	req->nlh.nlmsg_len = sizeof(*req) + 8;
 	rc = sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, req->nlh.nlmsg_len, NLM_F_DUMP,
 	       (unsigned) sizeof(*req), sprintrc(rc));
 
@@ -128,8 +131,9 @@
 
 	rc = sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, {{len=%u, type=NLMSG_NOOP"
-	       ", flags=NLM_F_REQUEST|0x%x, seq=0, pid=0}, \"abcd\"}]"
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}]"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
 	       reqs->req2.nlh.nlmsg_len, NLM_F_DUMP,
@@ -139,8 +143,8 @@
 	void *const efault2 = tail_memdup(&reqs->req1, sizeof(reqs->req1));
 	rc = sendto(fd, efault2, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, %p], %u, MSG_DONTWAIT, NULL, 0)"
-	       " = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", %p], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
 	       &((struct reqs *) efault2)->req2, (unsigned) sizeof(*reqs),
 	       sprintrc(rc));
@@ -150,20 +154,20 @@
 		    NULL, 0);
 	errstr = sprintrc(rc);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, \"",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}, ",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP);
-	print_quoted_memory((void *) &reqs->req2.nlh,
-			    sizeof(reqs->req2) - sizeof(req->nlh));
-	printf("\"], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	print_quoted_hex(&reqs->req2.nlh,
+			 sizeof(reqs->req2) - sizeof(req->nlh));
+	printf("], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       (unsigned) (sizeof(*reqs) - sizeof(req->nlh)), errstr);
 
 	/* second nlmsg_len < sizeof(struct nlmsghdr) */
 	reqs->req2.nlh.nlmsg_len = 4;
 	rc = sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=0, pid=0}, \"abcd\"}, {len=%u, type=NLMSG_NOOP"
-	       ", flags=NLM_F_REQUEST|0x%x, seq=0, pid=0}], %u"
-	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x61\\x62\\x63\\x64\"}"
+	       ", {len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
+	       ", seq=0, pid=0}], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
 	       reqs->req2.nlh.nlmsg_len, NLM_F_DUMP,
 	       (unsigned) sizeof(*reqs), sprintrc(rc));
@@ -223,7 +227,8 @@
 
 	rc = sendto(fd, nlh, NLMSG_HDRLEN + 2, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=NLMSG_ERROR, flags=NLM_F_REQUEST"
-	       ", seq=0, pid=0}, \"42\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", seq=0, pid=0}, \"\\x34\\x32\"}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, NLMSG_HDRLEN + 2, NLMSG_HDRLEN + 2, sprintrc(rc));
 
 	/* error message with room for the error code only */
@@ -302,8 +307,8 @@
 	printf("sendto(%d, {{len=%u, type=NLMSG_ERROR, flags=NLM_F_REQUEST"
 	       ", seq=0, pid=0}, {error=-EACCES"
 	       ", msg={{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
-	       ", seq=%u, pid=%u}, \"abcd\"}}}, %u, MSG_DONTWAIT, NULL, 0)"
-	       " = %s\n",
+	       ", seq=%u, pid=%u}, \"\\x61\\x62\\x63\\x64\"}}}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh->nlmsg_len, err->msg.nlmsg_len, NLM_F_DUMP,
 	       err->msg.nlmsg_seq, err->msg.nlmsg_pid,
 	       nlh->nlmsg_len, sprintrc(rc));
@@ -339,8 +344,8 @@
 	memcpy(NLMSG_DATA(nlh), "42", 2);
 
 	rc = sendto(fd, nlh, NLMSG_HDRLEN + 2, MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, {{len=%u, type=NLMSG_DONE, flags=NLM_F_MULTI"
-	       ", seq=0, pid=0}, \"42\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	printf("sendto(%d, {{len=%u, type=NLMSG_DONE, flags=NLM_F_MULTI, seq=0"
+	       ", pid=0}, \"\\x34\\x32\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, NLMSG_HDRLEN + 2, NLMSG_HDRLEN + 2, sprintrc(rc));
 
 	/* NLMSG_DONE message with enough room for an integer payload */
@@ -358,6 +363,45 @@
 	       fd, nlh->nlmsg_len, num, nlh->nlmsg_len, sprintrc(rc));
 }
 
+#if defined NLM_F_CAPPED || defined NLM_F_ACK_TLVS
+static void
+test_ack_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_type = NLMSG_ERROR,
+	};
+
+#ifdef NLM_F_CAPPED
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CAPPED,
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_CAPPED, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+#endif
+
+#ifdef NLM_F_ACK_TLVS
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK_TLVS;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_ACK_TLVS, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+#endif
+
+#if defined NLM_F_CAPPED && defined NLM_F_ACK_TLVS
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CAPPED | NLM_F_ACK_TLVS;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_CAPPED|NLM_F_ACK_TLVS, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+#endif
+}
+#endif
+
 int main(void)
 {
 	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
@@ -373,6 +417,9 @@
 	send_query(fd);
 	test_nlmsgerr(fd);
 	test_nlmsg_done(fd);
+#if defined NLM_F_CAPPED || defined NLM_F_ACK_TLVS
+	test_ack_flags(fd);
+#endif
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests/netlink_route.c b/tests/netlink_route.c
index 54a54b7..6af3b13 100644
--- a/tests/netlink_route.c
+++ b/tests/netlink_route.c
@@ -27,12 +27,61 @@
 
 #include "tests.h"
 #include <stdio.h>
+#include <stdint.h>
 #include <string.h>
 #include <unistd.h>
 #include <sys/socket.h>
-#include "netlink.h"
+#include <netinet/in.h>
+#include "test_netlink.h"
+#ifdef HAVE_STRUCT_DCBMSG
+# include <linux/dcbnl.h>
+#endif
+#ifdef HAVE_LINUX_FIB_RULES_H
+# include <linux/fib_rules.h>
+#endif
+#ifdef HAVE_LINUX_IF_ADDR_H
+# include <linux/if_addr.h>
+#endif
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+# include <linux/if_addrlabel.h>
+#endif
+#include <linux/if_arp.h>
+#include <linux/if_bridge.h>
+#include <linux/ip.h>
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+#ifdef HAVE_STRUCT_NETCONFMSG
+# include <linux/netconf.h>
+#endif
 #include <linux/rtnetlink.h>
 
+#define TEST_NL_ROUTE(fd_, nlh0_, type_, obj_, print_family_, ...)	\
+	do {								\
+		/* family and string */					\
+		TEST_NETLINK((fd_), (nlh0_),				\
+			     type_, NLM_F_REQUEST,			\
+			     sizeof(obj_) - 1,				\
+			     &(obj_), sizeof(obj_) - 1,			\
+			     (print_family_);				\
+			     printf(", ...}"));				\
+									\
+		/* sizeof(obj_) */					\
+		TEST_NETLINK((fd_), (nlh0_),				\
+			     type_, NLM_F_REQUEST,			\
+			     sizeof(obj_), &(obj_), sizeof(obj_),	\
+			     (print_family_);				\
+			      __VA_ARGS__);				\
+									\
+		/* short read of sizeof(obj_) */			\
+		TEST_NETLINK((fd_), (nlh0_),				\
+			     type_, NLM_F_REQUEST,			\
+			     sizeof(obj_), &(obj_), sizeof(obj_) - 1,	\
+			     (print_family_);				\
+			     printf(", %p}",				\
+				    NLMSG_DATA(TEST_NETLINK_nlh) + 1));	\
+	} while (0)
+
 static void
 test_nlmsg_type(const int fd)
 {
@@ -92,6 +141,320 @@
 	       (unsigned) sizeof(nlh), sprintrc(rc));
 }
 
+static void
+test_nlmsg_done(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const int num = 0xabcdefad;
+
+	TEST_NETLINK(fd, nlh0, NLMSG_DONE, NLM_F_REQUEST,
+		     sizeof(num), &num, sizeof(num),
+		     printf("%d", num));
+}
+
+static void
+test_rtnl_unspec(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	/* unspecified family only */
+	uint8_t family = 0;
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(family), &family, sizeof(family),
+		      printf("{family=AF_UNSPEC}"));
+
+	/* unknown family only */
+	family = 0xff;
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(family), &family, sizeof(family),
+		      printf("{family=0xff /* AF_??? */}"));
+
+	/* short read of family */
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(family), &family, sizeof(family) - 1,
+		      printf("%p", NLMSG_DATA(TEST_NETLINK_nlh)));
+
+	/* unspecified family and string */
+	char buf[sizeof(family) + 4];
+	family = 0;
+	memcpy(buf, &family, sizeof(family));
+	memcpy(buf + sizeof(family), "1234", 4);
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(buf), buf, sizeof(buf),
+		      printf("{family=AF_UNSPEC, \"\\x31\\x32\\x33\\x34\"}"));
+
+	/* unknown family and string */
+	family = 0xfd;
+	memcpy(buf, &family, sizeof(family));
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* RTM_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      sizeof(buf), buf, sizeof(buf),
+		      printf("{family=%#x /* AF_??? */"
+			     ", \"\\x31\\x32\\x33\\x34\"}", family));
+}
+
+static void
+test_rtnl_link(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ifinfomsg ifinfo = {
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+		.ifi_change = 0xfabcdeba
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETLINK, ifinfo,
+		      printf("{ifi_family=AF_UNIX"),
+		      printf(", ifi_type=ARPHRD_LOOPBACK"
+			     ", ifi_index=" IFINDEX_LO_STR
+			     ", ifi_flags=IFF_UP");
+		      PRINT_FIELD_X(", ", ifinfo, ifi_change);
+		      printf("}"));
+}
+
+static void
+test_rtnl_addr(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ifaddrmsg msg = {
+		.ifa_family = AF_UNIX,
+		.ifa_prefixlen = 0xde,
+		.ifa_flags = IFA_F_SECONDARY,
+		.ifa_scope = RT_SCOPE_UNIVERSE,
+		.ifa_index = ifindex_lo()
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDR, msg,
+		      printf("{ifa_family=AF_UNIX"),
+		      PRINT_FIELD_U(", ", msg, ifa_prefixlen);
+		      printf(", ifa_flags=IFA_F_SECONDARY"
+			     ", ifa_scope=RT_SCOPE_UNIVERSE"
+			     ", ifa_index=" IFINDEX_LO_STR);
+		      printf("}"));
+}
+
+static void
+test_rtnl_route(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct rtmsg msg = {
+		.rtm_family = AF_UNIX,
+		.rtm_dst_len = 0xaf,
+		.rtm_src_len = 0xda,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_DEFAULT,
+		.rtm_protocol = RTPROT_KERNEL,
+		.rtm_scope = RT_SCOPE_UNIVERSE,
+		.rtm_type = RTN_LOCAL,
+		.rtm_flags = RTM_F_NOTIFY
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETROUTE, msg,
+		      printf("{rtm_family=AF_UNIX"),
+		      PRINT_FIELD_U(", ", msg, rtm_dst_len);
+		      PRINT_FIELD_U(", ", msg, rtm_src_len);
+		      printf(", rtm_tos=IPTOS_LOWDELAY"
+			     ", rtm_table=RT_TABLE_DEFAULT"
+			     ", rtm_protocol=RTPROT_KERNEL"
+			     ", rtm_scope=RT_SCOPE_UNIVERSE"
+			     ", rtm_type=RTN_LOCAL"
+			     ", rtm_flags=RTM_F_NOTIFY}"));
+}
+
+#ifdef HAVE_LINUX_FIB_RULES_H
+static void
+test_rtnl_rule(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	struct rtmsg msg = {
+		.rtm_family = AF_UNIX,
+		.rtm_dst_len = 0xaf,
+		.rtm_src_len = 0xda,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_UNSPEC,
+		.rtm_type = FR_ACT_TO_TBL,
+		.rtm_flags = FIB_RULE_INVERT
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETRULE, msg,
+		      printf("{family=AF_UNIX"),
+		      printf(", dst_len=%u, src_len=%u"
+			     ", tos=IPTOS_LOWDELAY"
+			     ", table=RT_TABLE_UNSPEC"
+			     ", action=FR_ACT_TO_TBL"
+			     ", flags=FIB_RULE_INVERT}",
+			     msg.rtm_dst_len,
+			     msg.rtm_src_len));
+}
+#endif
+
+static void
+test_rtnl_neigh(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ndmsg msg = {
+		.ndm_family = AF_UNIX,
+		.ndm_ifindex = ifindex_lo(),
+		.ndm_state = NUD_PERMANENT,
+		.ndm_flags = NTF_PROXY,
+		.ndm_type = RTN_UNSPEC
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETNEIGH, msg,
+		      printf("{ndm_family=AF_UNIX"),
+		      printf(", ndm_ifindex=" IFINDEX_LO_STR
+			     ", ndm_state=NUD_PERMANENT"
+			     ", ndm_flags=NTF_PROXY"
+			     ", ndm_type=RTN_UNSPEC}"));
+}
+
+static void
+test_rtnl_neightbl(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct ndtmsg msg = {
+		.ndtm_family = AF_NETLINK
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETNEIGHTBL, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{ndtm_family=AF_NETLINK}"));
+}
+
+static void
+test_rtnl_tc(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct tcmsg msg = {
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo(),
+		.tcm_handle = 0xfadcdafb,
+		.tcm_parent = 0xafbcadab,
+		.tcm_info = 0xbcaedafa
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETQDISC, msg,
+		      printf("{tcm_family=AF_UNIX"),
+		      printf(", tcm_ifindex=" IFINDEX_LO_STR);
+		      PRINT_FIELD_U(", ", msg, tcm_handle);
+		      PRINT_FIELD_U(", ", msg, tcm_parent);
+		      PRINT_FIELD_U(", ", msg, tcm_info);
+		      printf("}"));
+}
+
+static void
+test_rtnl_tca(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	struct tcamsg msg = {
+		.tca_family = AF_INET
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETACTION, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{tca_family=AF_INET}"));
+}
+
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+static void
+test_rtnl_addrlabel(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct ifaddrlblmsg msg = {
+		.ifal_family = AF_UNIX,
+		.ifal_prefixlen = 0xaf,
+		.ifal_flags = 0xbd,
+		.ifal_index = ifindex_lo(),
+		.ifal_seq = 0xfadcdafb
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDRLABEL, msg,
+		      printf("{ifal_family=AF_UNIX"),
+		      PRINT_FIELD_U(", ", msg, ifal_prefixlen);
+		      PRINT_FIELD_U(", ", msg, ifal_flags);
+		      printf(", ifal_index=" IFINDEX_LO_STR);
+		      PRINT_FIELD_U(", ", msg, ifal_seq);
+		      printf("}"));
+}
+#endif
+
+#ifdef HAVE_STRUCT_DCBMSG
+static void
+test_rtnl_dcb(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct dcbmsg msg = {
+		.dcb_family = AF_UNIX,
+		.cmd = DCB_CMD_UNDEFINED
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETDCB, msg,
+		      printf("{dcb_family=AF_UNIX"),
+		      printf(", cmd=DCB_CMD_UNDEFINED}"));
+}
+#endif
+
+#ifdef HAVE_STRUCT_NETCONFMSG
+static void
+test_rtnl_netconf(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct netconfmsg msg = {
+		.ncm_family = AF_INET
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETNETCONF, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{ncm_family=AF_INET}"));
+}
+#endif
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+static void
+test_rtnl_mdb(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	const struct br_port_msg msg = {
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	};
+
+	TEST_NL_ROUTE(fd, nlh0, RTM_GETMDB, msg,
+		      printf("{family=AF_UNIX"),
+		      printf(", ifindex=" IFINDEX_LO_STR "}"));
+}
+#endif
+
+#ifdef RTM_NEWNSID
+static void
+test_rtnl_nsid(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct rtgenmsg msg = {
+		.rtgen_family = AF_UNIX
+	};
+
+	TEST_NETLINK(fd, nlh0,
+		     RTM_GETNSID, NLM_F_REQUEST,
+		     sizeof(msg), &msg, sizeof(msg),
+		     printf("{rtgen_family=AF_UNIX}"));
+}
+#endif
+
 int main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
@@ -100,6 +463,33 @@
 
 	test_nlmsg_type(fd);
 	test_nlmsg_flags(fd);
+	test_nlmsg_done(fd);
+	test_rtnl_unspec(fd);
+	test_rtnl_link(fd);
+	test_rtnl_addr(fd);
+	test_rtnl_route(fd);
+#ifdef HAVE_LINUX_FIB_RULES_H
+	test_rtnl_rule(fd);
+#endif
+	test_rtnl_neigh(fd);
+	test_rtnl_neightbl(fd);
+	test_rtnl_tc(fd);
+	test_rtnl_tca(fd);
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+	test_rtnl_addrlabel(fd);
+#endif
+#ifdef HAVE_STRUCT_DCBMSG
+	test_rtnl_dcb(fd);
+#endif
+#ifdef HAVE_STRUCT_NETCONFMSG
+	test_rtnl_netconf(fd);
+#endif
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+	test_rtnl_mdb(fd);
+#endif
+#ifdef RTM_NEWNSID
+	test_rtnl_nsid(fd);
+#endif
 
 	printf("+++ exited with 0 +++\n");
 
diff --git a/tests/netlink_selinux.c b/tests/netlink_selinux.c
index 6494fda..2d76822 100644
--- a/tests/netlink_selinux.c
+++ b/tests/netlink_selinux.c
@@ -30,7 +30,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/socket.h>
-#include "netlink.h"
+#include "test_netlink.h"
 #include <linux/selinux_netlink.h>
 
 static void
@@ -50,6 +50,46 @@
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 }
 
+static void
+test_selnl_msg_unspec(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	TEST_NETLINK_(fd, nlh0,
+		      0xffff, "0xffff /* SELNL_MSG_??? */",
+		      NLM_F_REQUEST, "NLM_F_REQUEST",
+		      4, "1234", 4,
+		      printf("\"\\x31\\x32\\x33\\x34\""));
+}
+
+static void
+test_selnl_msg_setenforce(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	static const struct selnl_msg_setenforce msg = {
+		.val = 0xfbdcdfab
+	};
+	TEST_NETLINK_OBJECT(fd, nlh0,
+			    SELNL_MSG_SETENFORCE, NLM_F_REQUEST, msg,
+			    PRINT_FIELD_D("{", msg, val);
+			    printf("}"));
+}
+
+static void
+test_selnl_msg_policyload(const int fd)
+{
+	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+
+	static const struct selnl_msg_policyload msg = {
+		.seqno = 0xabdcfabc
+	};
+	TEST_NETLINK_OBJECT(fd, nlh0,
+			    SELNL_MSG_POLICYLOAD, NLM_F_REQUEST, msg,
+			    PRINT_FIELD_U("{", msg, seqno);
+			    printf("}"));
+}
+
 int main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
@@ -57,6 +97,9 @@
 	int fd = create_nl_socket(NETLINK_SELINUX);
 
 	test_nlmsg_type(fd);
+	test_selnl_msg_unspec(fd);
+	test_selnl_msg_setenforce(fd);
+	test_selnl_msg_policyload(fd);
 
 	printf("+++ exited with 0 +++\n");
 
diff --git a/tests/netlink_sock_diag-v.sh b/tests/netlink_sock_diag-v.sh
new file mode 100755
index 0000000..0471ae3
--- /dev/null
+++ b/tests/netlink_sock_diag-v.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Check verbose decoding of NETLINK_SOCK_DIAG protocol
+#
+# Copyright (c) 2017 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+run_prog ../netlink_netlink_diag
+run_strace_match_diff -v -e trace=sendto
diff --git a/tests/netlink_sock_diag.c b/tests/netlink_sock_diag.c
index b8d0190..c2ebf12 100644
--- a/tests/netlink_sock_diag.c
+++ b/tests/netlink_sock_diag.c
@@ -35,7 +35,7 @@
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <netinet/tcp.h>
-#include "netlink.h"
+#include "test_netlink.h"
 #include <linux/if_ether.h>
 #include <linux/inet_diag.h>
 #include <linux/netlink_diag.h>
@@ -48,6 +48,48 @@
 
 #define SMC_ACTIVE 1
 
+#define TEST_SOCK_DIAG(fd_, nlh0_,					\
+		       family_, type_, flags_,				\
+		       obj_, print_family_, ...)			\
+									\
+	do {								\
+		/* family only */					\
+		uint8_t family = (family_);				\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(family), &family, sizeof(family),	\
+			      printf("{family=%s}", #family_));		\
+									\
+		/* family and string */					\
+		char buf[sizeof(family) + 4];				\
+		memcpy(buf, &family, sizeof(family));			\
+		memcpy(buf + sizeof(family), "1234", 4);		\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(buf), buf, sizeof(buf),		\
+			      (print_family_);				\
+			      printf(", ...}"));			\
+									\
+		/* sizeof(obj_) */					\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(obj_), &(obj_), sizeof(obj_),	\
+			      (print_family_);				\
+			      __VA_ARGS__);				\
+									\
+		/* short read of sizeof(obj_) */			\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      type_, #type_,				\
+			      flags_, #flags_,				\
+			      sizeof(obj_), &(obj_), sizeof(obj_) - 1,	\
+			      (print_family_);				\
+			      printf(", %p}",				\
+				     NLMSG_DATA(TEST_NETLINK_nlh) + 1));\
+	} while (0)
+
 static void
 test_nlmsg_type(const int fd)
 {
@@ -85,259 +127,103 @@
 static void
 test_odd_family_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
 
 	/* unspecified family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	uint8_t family = 0;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=AF_UNSPEC}"));
 
 	/* unknown family only */
-	*family = 0xff;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=0xff /* AF_??? */}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	family = 0xff;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=%#x /* AF_??? */}", family));
 
 	/* short read of family */
-	memmove(nlh0, nlh, NLMSG_HDRLEN);
-	nlh = nlh0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, %p}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_DATA(nlh),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(family), &family, sizeof(family) - 1,
+		     printf("%p", NLMSG_DATA(TEST_NETLINK_nlh)));
 
 	/* unspecified family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	char buf[sizeof(family) + 4];
+	family = 0;
+	memcpy(buf, &family, sizeof(family));
+	memcpy(buf + sizeof(family), "1234", 4);
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=AF_UNSPEC, \"\\x31\\x32\\x33\\x34\"}"));
 
 	/* unknown family and string */
-	*family = 0xfd;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {family=0xfd /* AF_??? */, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	family = 0xfd;
+	memcpy(buf, &family, sizeof(family));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY,
+		     NLM_F_REQUEST,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=%#x /* AF_??? */"
+			    ", \"\\x31\\x32\\x33\\x34\"}", family));
 }
 
 static void
 test_odd_family_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
 
 	/* unspecified family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	uint8_t family = 0;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=AF_UNSPEC}"));
 
 	/* unknown family only */
-	*family = 0xff;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=0xff /* AF_??? */}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	family = 0xff;
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(family), &family, sizeof(family),
+		     printf("{family=%#x /* AF_??? */}", family));
 
 	/* short read of family */
-	memmove(nlh0, nlh, NLMSG_HDRLEN);
-	nlh = nlh0;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, %p}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_DATA(nlh),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(family), &family, sizeof(family) - 1,
+		     printf("%p", NLMSG_DATA(TEST_NETLINK_nlh)));
 
 	/* unspecified family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = 0;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=AF_UNSPEC, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	char buf[sizeof(family) + 4];
+	family = 0;
+	memcpy(buf, &family, sizeof(family));
+	memcpy(buf + sizeof(family), "1234", 4);
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=AF_UNSPEC, \"\\x31\\x32\\x33\\x34\"}"));
 
 	/* unknown family and string */
-	*family = 0xfb;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {family=0xfb /* AF_??? */, \"1234\"}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
+	family = 0xfd;
+	memcpy(buf, &family, sizeof(family));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
+		     sizeof(buf), buf, sizeof(buf),
+		     printf("{family=%#x /* AF_??? */"
+			    ", \"\\x31\\x32\\x33\\x34\"}", family));
 }
 
 static void
 test_unix_diag_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct unix_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_UNIX}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_UNIX, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* unix_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	req = NLMSG_DATA(nlh);
-	*req = (struct unix_diag_req) {
+	static const struct unix_diag_req req = {
 		.sdiag_family = AF_UNIX,
 		.sdiag_protocol = 253,
 		.udiag_states = 1 << TCP_ESTABLISHED | 1 << TCP_LISTEN,
@@ -345,316 +231,75 @@
 		.udiag_show = UDIAG_SHOW_NAME,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_UNIX, sdiag_protocol=%u"
-	       ", udiag_states=1<<TCP_ESTABLISHED|1<<TCP_LISTEN, udiag_ino=%u"
-	       ", udiag_show=UDIAG_SHOW_NAME, udiag_cookie=[%u, %u]}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       253, 0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of unix_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {sdiag_family=AF_UNIX, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_UNIX"),
+		       PRINT_FIELD_U(", ", req, sdiag_protocol);
+		       printf(", udiag_states=1<<TCP_ESTABLISHED|1<<TCP_LISTEN");
+		       PRINT_FIELD_U(", ", req, udiag_ino);
+		       printf(", udiag_show=UDIAG_SHOW_NAME");
+		       PRINT_FIELD_COOKIE(", ", req, udiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_unix_diag_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct unix_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_UNIX}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_UNIX;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {udiag_family=AF_UNIX, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* unix_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct unix_diag_msg) {
+	static const struct unix_diag_msg msg = {
 		.udiag_family = AF_UNIX,
 		.udiag_type = SOCK_STREAM,
 		.udiag_state = TCP_FIN_WAIT1,
 		.udiag_ino = 0xfacefeed,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {udiag_family=AF_UNIX, udiag_type=SOCK_STREAM"
-	       ", udiag_state=TCP_FIN_WAIT1"
-	       ", udiag_ino=%u, udiag_cookie=[%u, %u]}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of unix_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{udiag_family=AF_UNIX"),
+		       printf(", udiag_type=SOCK_STREAM"
+			      ", udiag_state=TCP_FIN_WAIT1");
+		       PRINT_FIELD_U(", ", msg, udiag_ino);
+		       PRINT_FIELD_COOKIE(", ", msg, udiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_netlink_diag_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct netlink_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_NETLINK}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* netlink_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	req = NLMSG_DATA(nlh);
-	*req = (struct netlink_diag_req) {
+	struct netlink_diag_req req = {
 		.sdiag_family = AF_NETLINK,
 		.sdiag_protocol = NDIAG_PROTO_ALL,
 		.ndiag_ino = 0xfacefeed,
 		.ndiag_show = NDIAG_SHOW_MEMINFO,
 		.ndiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_NETLINK"),
+		       printf(", sdiag_protocol=NDIAG_PROTO_ALL");
+		       PRINT_FIELD_U(", ", req, ndiag_ino);
+		       printf(", ndiag_show=NDIAG_SHOW_MEMINFO");
+		       PRINT_FIELD_COOKIE(", ", req, ndiag_cookie);
+		       printf("}"));
 
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, sdiag_protocol=NDIAG_PROTO_ALL"
-	       ", ndiag_ino=%u, ndiag_show=NDIAG_SHOW_MEMINFO"
-	       ", ndiag_cookie=[%u, %u]}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	req->sdiag_protocol = NETLINK_ROUTE;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, sdiag_protocol=NETLINK_ROUTE"
-	       ", ndiag_ino=%u, ndiag_show=NDIAG_SHOW_MEMINFO"
-	       ", ndiag_cookie=[%u, %u]}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of netlink_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_NETLINK, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	req.sdiag_protocol = NETLINK_ROUTE;
+	req.ndiag_show = NDIAG_SHOW_GROUPS;
+	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_NETLINK"),
+		       printf(", sdiag_protocol=NETLINK_ROUTE");
+		       PRINT_FIELD_U(", ", req, ndiag_ino);
+		       printf(", ndiag_show=NDIAG_SHOW_GROUPS");
+		       PRINT_FIELD_COOKIE(", ", req, ndiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_netlink_diag_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct netlink_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_NETLINK}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_NETLINK;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {ndiag_family=AF_NETLINK, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* netlink_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct netlink_diag_msg) {
+	static const struct netlink_diag_msg msg = {
 		.ndiag_family = AF_NETLINK,
 		.ndiag_type = SOCK_RAW,
 		.ndiag_protocol = NETLINK_ROUTE,
@@ -665,233 +310,60 @@
 		.ndiag_ino = 0xdaeefacd,
 		.ndiag_cookie = { 0xbadc0ded, 0xdeadbeef }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {ndiag_family=AF_NETLINK"
-	       ", ndiag_type=SOCK_RAW, ndiag_protocol=NETLINK_ROUTE"
-	       ", ndiag_state=NETLINK_CONNECTED, ndiag_portid=%u"
-	       ", ndiag_dst_portid=%u, ndiag_dst_group=%u, ndiag_ino=%u"
-	       ", ndiag_cookie=[%u, %u]}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xbadc0ded, 0xdeadbeef, 0xfacefeed,
-	       0xdaeefacd, 0xbadc0ded, 0xdeadbeef,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of netlink_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {ndiag_family=AF_NETLINK, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{ndiag_family=AF_NETLINK"),
+		       printf(", ndiag_type=SOCK_RAW"
+			      ", ndiag_protocol=NETLINK_ROUTE"
+			      ", ndiag_state=NETLINK_CONNECTED");
+		       PRINT_FIELD_U(", ", msg, ndiag_portid);
+		       PRINT_FIELD_U(", ", msg, ndiag_dst_portid);
+		       PRINT_FIELD_U(", ", msg, ndiag_dst_group);
+		       PRINT_FIELD_U(", ", msg, ndiag_ino);
+		       PRINT_FIELD_COOKIE(", ", msg, ndiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_packet_diag_req(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct packet_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_PACKET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_PACKET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* packet_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-	req = NLMSG_DATA(nlh);
-	*req = (struct packet_diag_req) {
+	static const struct packet_diag_req req = {
 		.sdiag_family = AF_PACKET,
 		.sdiag_protocol = ETH_P_LOOP,
 		.pdiag_ino = 0xfacefeed,
 		.pdiag_show = PACKET_SHOW_INFO,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_PACKET, sdiag_protocol=ETH_P_LOOP"
-	       ", pdiag_ino=%u, pdiag_show=PACKET_SHOW_INFO"
-	       ", pdiag_cookie=[%u, %u]}}, %u"
-	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of packet_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_PACKET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_PACKET"),
+		       printf(", sdiag_protocol=ETH_P_LOOP");
+		       PRINT_FIELD_U(", ", req, pdiag_ino);
+		       printf(", pdiag_show=PACKET_SHOW_INFO");
+		       PRINT_FIELD_COOKIE(", ", req, pdiag_cookie);
+		       printf("}"));
 }
 
 static void
 test_packet_diag_msg(const int fd)
 {
-	struct nlmsghdr *nlh;
-	struct packet_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_PACKET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	family = NLMSG_DATA(nlh);
-	*family = AF_PACKET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {pdiag_family=AF_PACKET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* packet_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct packet_diag_msg) {
+	static const struct packet_diag_msg msg = {
 		.pdiag_family = AF_PACKET,
 		.pdiag_type = SOCK_STREAM,
 		.pdiag_num = 0xbadc,
 		.pdiag_ino = 0xfacefeed,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {pdiag_family=AF_PACKET, pdiag_type=SOCK_STREAM"
-	       ", pdiag_num=%u, pdiag_ino=%u, pdiag_cookie=[%u, %u]}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xbadc, 0xfacefeed, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of packet_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {pdiag_family=AF_PACKET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{pdiag_family=AF_PACKET"),
+		       printf(", pdiag_type=SOCK_STREAM");
+		       PRINT_FIELD_U(", ", msg, pdiag_num);
+		       PRINT_FIELD_U(", ", msg, pdiag_ino);
+		       PRINT_FIELD_COOKIE(", ", msg, pdiag_cookie);
+		       printf("}"));
 }
 
 static void
@@ -899,21 +371,8 @@
 {
 	const char address[] = "12.34.56.78";
 	const char address6[] = "12:34:56:78:90:ab:cd:ef";
-	struct nlmsghdr *nlh;
-	struct inet_diag_req_v2 *req;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	nlh = nlh0 - sizeof(*req);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct inet_diag_req_v2) {
+	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
 		.sdiag_protocol = IPPROTO_TCP,
@@ -921,245 +380,107 @@
 		.id = {
 			.idiag_sport = 0xfacd,
 			.idiag_dport = 0xdead,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST,
+		     sizeof(req), &req, sizeof(req),
+		     printf("{sdiag_family=AF_INET"),
+		     printf(", sdiag_protocol=IPPROTO_TCP"
+			    ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+			    ", idiag_states=1<<TCP_CLOSE"
+			    ", id={idiag_sport=htons(%u)"
+			    ", idiag_dport=htons(%u)"
+			    ", idiag_src=inet_addr(\"%s\")"
+			    ", idiag_dst=inet_addr(\"%s\")",
+			    ntohs(req.id.idiag_sport),
+			    ntohs(req.id.idiag_dport),
+			    address, address);
+		     printf(", idiag_if=" IFINDEX_LO_STR);
+		     PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		     printf("}}"));
 
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, sdiag_protocol=IPPROTO_TCP"
-	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
-	       ", idiag_states=1<<TCP_CLOSE, id={idiag_sport=htons(%u)"
-	       ", idiag_dport=htons(%u), inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst), idiag_if=%u"
-	       ", idiag_cookie=[%u, %u]}}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       ntohs(0xfacd), ntohs(0xdead), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	req.sdiag_family = AF_INET6;
+	if (!inet_pton(AF_INET6, address6, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET6, address6, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	req->sdiag_family = AF_INET6;
-	if (!inet_pton(AF_INET6, address6, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET6, address6, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET6, sdiag_protocol=IPPROTO_TCP"
-	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
-	       ", idiag_states=1<<TCP_CLOSE, id={idiag_sport=htons(%u)"
-	       ", idiag_dport=htons(%u), inet_pton(AF_INET6, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET6, \"%s\", &idiag_dst), idiag_if=%u"
-	       ", idiag_cookie=[%u, %u]}}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       ntohs(0xfacd), ntohs(0xdead), address6, address6,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_NETLINK(fd, nlh0,
+		     SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST,
+		     sizeof(req), &req, sizeof(req),
+		     printf("{sdiag_family=AF_INET6"),
+		     printf(", sdiag_protocol=IPPROTO_TCP"
+			    ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+			    ", idiag_states=1<<TCP_CLOSE"
+			    ", id={idiag_sport=htons(%u)"
+			    ", idiag_dport=htons(%u)"
+			    ", inet_pton(AF_INET6, \"%s\", &idiag_src)"
+			    ", inet_pton(AF_INET6, \"%s\", &idiag_dst)",
+			    ntohs(req.id.idiag_sport),
+			    ntohs(req.id.idiag_dport),
+			    address6, address6);
+		     printf(", idiag_if=" IFINDEX_LO_STR);
+		     PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		     printf("}}"));
 }
 
 static void
 test_inet_diag_req(const int fd)
 {
 	const char address[] = "12.34.56.78";
-	struct nlmsghdr *nlh;
-	struct inet_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = TCPDIAG_GETSOCK,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_INET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - (sizeof(*family) + 4);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = TCPDIAG_GETSOCK,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* inet_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = TCPDIAG_GETSOCK,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct inet_diag_req) {
+	struct inet_diag_req req = {
 		.idiag_family = AF_INET,
-		.idiag_ext = 1 << (INET_DIAG_TOS - 1),
 		.idiag_src_len = 0xde,
 		.idiag_dst_len = 0xba,
+		.idiag_ext = 1 << (INET_DIAG_TOS - 1),
 		.id = {
 			.idiag_sport = 0xdead,
 			.idiag_dport = 0xadcd,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 		.idiag_states = 1 << TCP_LAST_ACK,
 		.idiag_dbs = 0xfacefeed,
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, idiag_src_len=%u"
-	       ", idiag_dst_len=%u, idiag_ext=1<<(INET_DIAG_TOS-1)"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}"
-	       ", idiag_states=1<<TCP_LAST_ACK, idiag_dbs=%u}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       0xde, 0xba, ntohs(0xdead), ntohs(0xadcd), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded, 0xfacefeed,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of inet_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=TCPDIAG_GETSOCK"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_INET,
+		       TCPDIAG_GETSOCK, NLM_F_REQUEST, req,
+		       printf("{idiag_family=AF_INET"),
+		       PRINT_FIELD_U(", ", req, idiag_src_len);
+		       PRINT_FIELD_U(", ", req, idiag_dst_len);
+		       printf(", idiag_ext=1<<(INET_DIAG_TOS-1)");
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(req.id.idiag_sport),
+			      ntohs(req.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		       printf("}, idiag_states=1<<TCP_LAST_ACK");
+		       PRINT_FIELD_U(", ", req, idiag_dbs);
+		       printf("}"));
 }
 
 static void
 test_inet_diag_req_v2(const int fd)
 {
 	const char address[] = "87.65.43.21";
-	struct nlmsghdr *nlh;
-	struct inet_diag_req_v2 *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_INET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* inet_diag_req_v2 */
-	nlh = nlh0 - sizeof(*req);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct inet_diag_req_v2) {
+	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
 		.sdiag_protocol = IPPROTO_TCP,
@@ -1167,116 +488,39 @@
 		.id = {
 			.idiag_sport = 0xfacd,
 			.idiag_dport = 0xdead,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, sdiag_protocol=IPPROTO_TCP"
-	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
-	       ", idiag_states=1<<TCP_CLOSE, id={idiag_sport=htons(%u)"
-	       ", idiag_dport=htons(%u), inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst), idiag_if=%u"
-	       ", idiag_cookie=[%u, %u]}}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       ntohs(0xfacd), ntohs(0xdead), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of inet_diag_req_v2 */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {sdiag_family=AF_INET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_INET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{sdiag_family=AF_INET"),
+		       printf(", sdiag_protocol=IPPROTO_TCP"
+			      ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+			      ", idiag_states=1<<TCP_CLOSE"
+			      ", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(req.id.idiag_sport),
+			      ntohs(req.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		       printf("}}"));
 }
 
 static void
 test_inet_diag_msg(const int fd)
 {
 	const char address[] = "11.22.33.44";
-	struct nlmsghdr *nlh;
-	struct inet_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_INET}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_INET;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* inet_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct inet_diag_msg) {
+	struct inet_diag_msg msg = {
 		.idiag_family = AF_INET,
 		.idiag_state = TCP_LISTEN,
 		.idiag_timer = 0xfa,
@@ -1284,7 +528,7 @@
 		.id = {
 			.idiag_sport = 0xfacf,
 			.idiag_dport = 0xdead,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 		.idiag_expires = 0xfacefeed,
@@ -1294,47 +538,31 @@
 		.idiag_inode = 0xbadc0ded,
 	};
 
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, idiag_state=TCP_LISTEN"
-	       ", idiag_timer=%u, idiag_retrans=%u"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}"
-	       ", idiag_expires=%u, idiag_rqueue=%u, idiag_wqueue=%u"
-	       ", idiag_uid=%u, idiag_inode=%u}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xfa, 0xde, ntohs(0xfacf), ntohs(0xdead),
-	       address, address, 0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       0xfacefeed, 0xdeadbeef, 0xadcdfafc, 0xdecefaeb, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of inet_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {idiag_family=AF_INET, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_INET,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{idiag_family=AF_INET"),
+		       printf(", idiag_state=TCP_LISTEN");
+		       PRINT_FIELD_U(", ", msg, idiag_timer);
+		       PRINT_FIELD_U(", ", msg, idiag_retrans);
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(msg.id.idiag_sport),
+			      ntohs(msg.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", msg.id, idiag_cookie);
+		       PRINT_FIELD_U("}, ", msg, idiag_expires);
+		       PRINT_FIELD_U(", ", msg, idiag_rqueue);
+		       PRINT_FIELD_U(", ", msg, idiag_wqueue);
+		       PRINT_FIELD_U(", ", msg, idiag_uid);
+		       PRINT_FIELD_U(", ", msg, idiag_inode);
+		       printf("}"));
 }
 
 #ifdef AF_SMC
@@ -1342,183 +570,44 @@
 test_smc_diag_req(const int fd)
 {
 	const char address[] = "43.21.56.78";
-	struct nlmsghdr *nlh;
-	struct smc_diag_req *req;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_SMC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* smc_diag_req */
-	nlh = nlh0 - sizeof(*req);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*req),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_REQUEST
-	);
-
-	req = NLMSG_DATA(nlh);
-	*req = (struct smc_diag_req) {
+	struct smc_diag_req req = {
 		.diag_family = AF_SMC,
 		.diag_ext = 1 << (SMC_DIAG_CONNINFO - 1),
 		.id = {
 			.idiag_sport = 0xdead,
 			.idiag_dport = 0xadcd,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded },
 		},
 	};
 
-	if (!inet_pton(AF_INET, address, &req->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &req->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {diag_family=AF_SMC"
-	       ", diag_ext=1<<(SMC_DIAG_CONNINFO-1)"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       htons(0xdead), htons(0xadcd), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
-
-	/* short read of smc_diag_req */
-	nlh = nlh0 - (sizeof(*req) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*req),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_SMC,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
+		       printf("{diag_family=AF_SMC"),
+		       printf(", diag_ext=1<<(SMC_DIAG_CONNINFO-1)");
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(req.id.idiag_sport),
+			      ntohs(req.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", req.id, idiag_cookie);
+		       printf("}}"));
 }
 
 static void
 test_smc_diag_msg(const int fd)
 {
 	const char address[] = "34.87.12.90";
-	struct nlmsghdr *nlh;
-	struct smc_diag_msg *msg;
-	uint8_t *family;
 	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
-
-	/* family only */
-	nlh = nlh0 - sizeof(*family);
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {family=AF_SMC}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family),
-	       sprintrc(rc));
-
-	/* family and string */
-	nlh = nlh0 - sizeof(*family) - 4;
-	/* beware of unaligned access to nlh members */
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*family) + 4,
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	family = NLMSG_DATA(nlh);
-	*family = AF_SMC;
-	memcpy(family + 1, "1234", 4);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*family) + 4, MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, ...}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*family) + 4,
-	       sprintrc(rc));
-
-	/* smc_diag_msg */
-	nlh = nlh0 - sizeof(*msg);
-	SET_STRUCT(struct nlmsghdr, nlh,
-		.nlmsg_len = NLMSG_HDRLEN + sizeof(*msg),
-		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-		.nlmsg_flags = NLM_F_DUMP
-	);
-
-	msg = NLMSG_DATA(nlh);
-	*msg = (struct smc_diag_msg) {
+	struct smc_diag_msg msg = {
 		.diag_family = AF_SMC,
 		.diag_state = SMC_ACTIVE,
 		.diag_fallback = 0xde,
@@ -1526,51 +615,35 @@
 		.id = {
 			.idiag_sport = 0xdead,
 			.idiag_dport = 0xadcd,
-			.idiag_if = 0xadcdfafc,
+			.idiag_if = ifindex_lo(),
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded },
 		},
 		.diag_uid = 0xadcdfafc,
 		.diag_inode = 0xbadc0ded,
 	};
 
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_src))
-		perror_msg_and_skip("sendto");
-	if (!inet_pton(AF_INET, address, &msg->id.idiag_dst))
-		perror_msg_and_skip("sendto");
+	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
+	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
 
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {diag_family=AF_SMC"
-	       ", diag_state=SMC_ACTIVE, diag_fallback=%u, diag_shutdown=%u"
-	       ", id={idiag_sport=htons(%u), idiag_dport=htons(%u)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=%u, idiag_cookie=[%u, %u]}"
-	       ", diag_uid=%u, diag_inode=%u}}, %u"
-	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       0xde, 0xba, htons(0xdead), htons(0xadcd), address, address,
-	       0xadcdfafc, 0xdeadbeef, 0xbadc0ded, 0xadcdfafc, 0xbadc0ded,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
-
-	/* short read of smc_diag_msg */
-	nlh = nlh0 - (sizeof(*msg) - 1);
-	/* beware of unaligned access to nlh members */
-	memmove(nlh, nlh0 - sizeof(*msg), NLMSG_HDRLEN + sizeof(*msg) - 1);
-
-	rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*msg), MSG_DONTWAIT,
-		    NULL, 0);
-	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
-	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
-	       ", {diag_family=AF_SMC, %p}}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       NLMSG_DATA(nlh) + 1,
-	       NLMSG_HDRLEN + (unsigned int) sizeof(*msg),
-	       sprintrc(rc));
+	TEST_SOCK_DIAG(fd, nlh0, AF_SMC,
+		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
+		       printf("{diag_family=AF_SMC"),
+		       printf(", diag_state=SMC_ACTIVE");
+		       PRINT_FIELD_U(", ", msg, diag_fallback);
+		       PRINT_FIELD_U(", ", msg, diag_shutdown);
+		       printf(", id={idiag_sport=htons(%u)"
+			      ", idiag_dport=htons(%u)"
+			      ", idiag_src=inet_addr(\"%s\")"
+			      ", idiag_dst=inet_addr(\"%s\")",
+			      ntohs(msg.id.idiag_sport),
+			      ntohs(msg.id.idiag_dport),
+			      address, address);
+		       printf(", idiag_if=" IFINDEX_LO_STR);
+		       PRINT_FIELD_COOKIE(", ", msg.id, idiag_cookie);
+		       PRINT_FIELD_U("}, ", msg, diag_uid);
+		       PRINT_FIELD_U(", ", msg, diag_inode);
+		       printf("}"));
 }
 #endif
 
diff --git a/tests/netlink_unix_diag.c b/tests/netlink_unix_diag.c
index 119cc9e..e150923 100644
--- a/tests/netlink_unix_diag.c
+++ b/tests/netlink_unix_diag.c
@@ -2,6 +2,7 @@
  * This file is part of net-yy-unix strace test.
  *
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/nlattr.c b/tests/nlattr.c
index 7361ece..41923c0 100644
--- a/tests/nlattr.c
+++ b/tests/nlattr.c
@@ -74,7 +74,7 @@
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
 	       ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1"
-	       ", udiag_ino=0, udiag_cookie=[0, 0]}, \"12\"}, %u"
+	       ", udiag_ino=0, udiag_cookie=[0, 0]}, \"\\x31\\x32\"}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, msg_len, sprintrc(rc));
 
@@ -133,7 +133,8 @@
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
 	       ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1"
 	       ", udiag_ino=0, udiag_cookie=[0, 0]}, {{nla_len=%u"
-	       ", nla_type=%#x /* UNIX_DIAG_??? */}, \"1234\"}}"
+	       ", nla_type=%#x /* UNIX_DIAG_??? */}"
+	       ", \"\\x31\\x32\\x33\\x34\"}}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, nla->nla_len, UNIX_DIAG_SHUTDOWN + 1,
 	       msg_len, sprintrc(rc));
@@ -143,29 +144,29 @@
 	msg = tail_memdup(&c_msg, msg_len);
 	memcpy(&msg->nlh.nlmsg_len, &msg_len, sizeof(msg_len));
 	nla = NLMSG_ATTR(msg, sizeof(msg->udm));
-	*nla = (struct nlattr) {
+	SET_STRUCT(struct nlattr, nla,
 		.nla_len = NLA_HDRLEN,
 		.nla_type = UNIX_DIAG_NAME
-	};
+	);
 	memcpy(nla + 1, "12", 2);
 	rc = sendto(fd, msg, msg_len, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
 	       ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1"
 	       ", udiag_ino=0, udiag_cookie=[0, 0]}, [{nla_len=%u"
-	       ", nla_type=UNIX_DIAG_NAME}, \"12\"]}, %u"
+	       ", nla_type=UNIX_DIAG_NAME}, \"\\x31\\x32\"]}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, msg_len, nla->nla_len, msg_len, sprintrc(rc));
+	       fd, msg_len, NLA_HDRLEN, msg_len, sprintrc(rc));
 
 	/* print one struct nlattr and short read of second struct nlattr */
 	msg_len = NLMSG_SPACE(sizeof(msg->udm)) + NLA_HDRLEN * 2;
 	msg = tail_memdup(&c_msg, msg_len - 1);
 	memcpy(&msg->nlh.nlmsg_len, &msg_len, sizeof(msg_len));
 	nla = NLMSG_ATTR(msg, sizeof(msg->udm));
-	*nla = (struct nlattr) {
+	SET_STRUCT(struct nlattr, nla,
 		.nla_len = NLA_HDRLEN,
 		.nla_type = UNIX_DIAG_NAME
-	};
+	);
 	rc = sendto(fd, msg, msg_len, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX"
@@ -173,7 +174,7 @@
 	       ", udiag_ino=0, udiag_cookie=[0, 0]}, [{nla_len=%u"
 	       ", nla_type=UNIX_DIAG_NAME}, %p]}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, msg_len, nla->nla_len, nla + 1, msg_len, sprintrc(rc));
+	       fd, msg_len, NLA_HDRLEN, nla + 1, msg_len, sprintrc(rc));
 
 	/* print two struct nlattr */
 	msg_len = NLMSG_SPACE(sizeof(msg->udm)) + NLA_HDRLEN * 2;
@@ -209,18 +210,22 @@
 	       ", nla_type=UNIX_DIAG_NAME}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, nla->nla_len, msg_len, sprintrc(rc));
 
-	/* abbreviated output */
+	/* unrecognized attribute data, abbreviated output */
 #define ABBREV_LEN (DEFAULT_STRLEN + 1)
-	msg_len = NLA_HDRLEN * ABBREV_LEN + NLMSG_SPACE(sizeof(msg->udm));
-	msg = tail_memdup(&c_msg, msg_len);
-	memcpy(&msg->nlh.nlmsg_len, &msg_len, sizeof(msg_len));
+	msg_len = NLMSG_SPACE(sizeof(msg->udm)) + NLA_HDRLEN * ABBREV_LEN * 2;
+	msg = tail_alloc(msg_len);
+	memcpy(msg, &c_msg, sizeof(c_msg));
+	msg->nlh.nlmsg_len = msg_len;
 	unsigned int i;
 	nla = NLMSG_ATTR(msg, sizeof(msg->udm));
-	for (i = 0; i < ABBREV_LEN; ++i)
-		nla[i] = (struct nlattr) {
-			.nla_len = NLA_HDRLEN,
+	for (i = 0; i < ABBREV_LEN; ++i) {
+		nla[i * 2] = (struct nlattr) {
+			.nla_len = NLA_HDRLEN * 2 - 1,
 			.nla_type = UNIX_DIAG_SHUTDOWN + 1 + i
 		};
+		fill_memory_ex(&nla[i * 2 + 1], NLA_HDRLEN,
+			       '0' + i, '~' - '0' - i);
+	}
 
 	rc = sendto(fd, msg, msg_len, MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"
@@ -232,8 +237,10 @@
 	for (i = 0; i < DEFAULT_STRLEN; ++i) {
 		if (i)
 			printf(", ");
-		printf("{nla_len=%u, nla_type=%#x /* UNIX_DIAG_??? */}",
+		printf("{{nla_len=%u, nla_type=%#x /* UNIX_DIAG_??? */}, ",
 		       nla->nla_len, UNIX_DIAG_SHUTDOWN + 1 + i);
+		print_quoted_hex(&nla[i * 2 + 1], NLA_HDRLEN - 1);
+		printf("}");
 	}
 	printf(", ...]}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       msg_len, sprintrc(rc));
diff --git a/tests/nlattr_br_port_msg.c b/tests/nlattr_br_port_msg.c
new file mode 100644
index 0000000..a2a4792
--- /dev/null
+++ b/tests/nlattr_br_port_msg.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+
+# include <stdio.h>
+# include <netinet/in.h>
+# include "test_nlattr.h"
+# include <linux/if_bridge.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_br_port_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETMDB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct br_port_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct br_port_msg, msg,
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	);
+}
+
+static void
+print_br_port_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETMDB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", ifindex=" IFINDEX_LO_STR "}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct br_port_msg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* MDBA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_br_port_msg, print_br_port_msg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_BR_PORT_MSG")
+
+#endif
diff --git a/tests/nlattr_br_port_msg.gen.test b/tests/nlattr_br_port_msg.gen.test
new file mode 100755
index 0000000..f843797
--- /dev/null
+++ b/tests/nlattr_br_port_msg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_br_port_msg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_crypto_user_alg.c b/tests/nlattr_crypto_user_alg.c
new file mode 100644
index 0000000..2482b33
--- /dev/null
+++ b/tests/nlattr_crypto_user_alg.c
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_CRYPTOUSER_H
+
+# include <stdio.h>
+# include <stdint.h>
+# include "test_nlattr.h"
+# include <linux/cryptouser.h>
+
+# define CRYPTOCFGA_REPORT_LARVAL 2
+
+static void
+init_crypto_user_alg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = CRYPTO_MSG_GETALG,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct crypto_user_alg *const alg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct crypto_user_alg, alg,
+		.cru_name = "abcd",
+		.cru_driver_name = "efgh",
+		.cru_module_name = "ijkl",
+	);
+}
+
+static void
+print_crypto_user_alg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=CRYPTO_MSG_GETALG"
+	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
+	       ", {cru_name=\"abcd\", cru_driver_name=\"efgh\""
+	       ", cru_module_name=\"ijkl\", cru_type=0"
+	       ", cru_mask=0, cru_refcnt=0, cru_flags=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_CRYPTO);
+	const unsigned int hdrlen = sizeof(struct crypto_user_alg);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	char *const str = tail_alloc(DEFAULT_STRLEN);
+	fill_memory_ex(str, DEFAULT_STRLEN, '0', 10);
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_crypto_user_alg, print_crypto_user_alg,
+		    CRYPTOCFGA_REPORT_LARVAL,
+		    DEFAULT_STRLEN, str, DEFAULT_STRLEN,
+		    printf("{type=\"%.*s\"...}", DEFAULT_STRLEN, str));
+	str[DEFAULT_STRLEN - 1] = '\0';
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_crypto_user_alg, print_crypto_user_alg,
+		    CRYPTOCFGA_REPORT_LARVAL,
+		    DEFAULT_STRLEN, str, DEFAULT_STRLEN,
+		    printf("{type=\"%s\"}", str));
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_HASH
+	static const struct crypto_report_hash rhash = {
+		.type = "efgh",
+		.blocksize = 0xabcdefdc,
+		.digestsize = 0xfebcdacd
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_HASH,
+			      pattern, rhash, print_quoted_memory,
+			      printf("{type=\"efgh\"");
+			      PRINT_FIELD_U(", ", rhash, blocksize);
+			      PRINT_FIELD_U(", ", rhash, digestsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_BLKCIPHER
+	static const struct crypto_report_blkcipher rblkcipher = {
+		.type = "abcd",
+		.geniv = "efgh",
+		.blocksize = 0xabcdefac,
+		.min_keysize = 0xfeadbcda,
+		.max_keysize = 0xbdacdeac,
+		.ivsize = 0xefacbdac
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_BLKCIPHER,
+			      pattern, rblkcipher, print_quoted_memory,
+			      printf("{type=\"abcd\", geniv=\"efgh\"");
+			      PRINT_FIELD_U(", ", rblkcipher, blocksize);
+			      PRINT_FIELD_U(", ", rblkcipher, min_keysize);
+			      PRINT_FIELD_U(", ", rblkcipher, max_keysize);
+			      PRINT_FIELD_U(", ", rblkcipher, ivsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_AEAD
+	static const struct crypto_report_aead raead = {
+		.type = "abcd",
+		.geniv = "efgh",
+		.blocksize = 0xbaefdbac,
+		.maxauthsize = 0xfdbdbcda,
+		.ivsize = 0xacbefdac
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_AEAD,
+			      pattern, raead, print_quoted_memory,
+			      printf("{type=\"abcd\", geniv=\"efgh\"");
+			      PRINT_FIELD_U(", ", raead, blocksize);
+			      PRINT_FIELD_U(", ", raead, maxauthsize);
+			      PRINT_FIELD_U(", ", raead, ivsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_RNG
+	static const struct crypto_report_rng rrng = {
+		.type = "abcd",
+		.seedsize = 0xabcdefac
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_RNG,
+			      pattern, rrng, print_quoted_memory,
+			      printf("{type=\"abcd\"");
+			      PRINT_FIELD_U(", ", rrng, seedsize);
+			      printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_CRYPTO_REPORT_CIPHER
+	static const struct crypto_report_cipher rcipher = {
+		.type = "abcd",
+		.blocksize = 0xabcdefac,
+		.min_keysize = 0xfeadbcda,
+		.max_keysize = 0xbdacdeac,
+	};
+	TEST_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+			      init_crypto_user_alg, print_crypto_user_alg,
+			      CRYPTOCFGA_REPORT_CIPHER,
+			      pattern, rcipher, print_quoted_memory,
+			      printf("{type=\"abcd\"");
+			      PRINT_FIELD_U(", ", rcipher, blocksize);
+			      PRINT_FIELD_U(", ", rcipher, min_keysize);
+			      PRINT_FIELD_U(", ", rcipher, max_keysize);
+			      printf("}"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_CRYPTOUSER_H");
+
+#endif
diff --git a/tests/nlattr_crypto_user_alg.gen.test b/tests/nlattr_crypto_user_alg.gen.test
new file mode 100755
index 0000000..81d866e
--- /dev/null
+++ b/tests/nlattr_crypto_user_alg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_crypto_user_alg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_dcbmsg.c b/tests/nlattr_dcbmsg.c
new file mode 100644
index 0000000..cd63bb6
--- /dev/null
+++ b/tests/nlattr_dcbmsg.c
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_DCBMSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/dcbnl.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_dcbmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETDCB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct dcbmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct dcbmsg, msg,
+		.dcb_family = AF_UNIX,
+		.cmd = DCB_CMD_UNDEFINED
+	);
+}
+
+static void
+print_dcbmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETDCB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {dcb_family=AF_UNIX"
+	       ", cmd=DCB_CMD_UNDEFINED}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct dcbmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* DCB_ATTR_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_dcbmsg, print_dcbmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_DCBMSG")
+
+#endif
diff --git a/tests/nlattr_dcbmsg.gen.test b/tests/nlattr_dcbmsg.gen.test
new file mode 100755
index 0000000..d78bfcf
--- /dev/null
+++ b/tests/nlattr_dcbmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_dcbmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_fib_rule_hdr.c b/tests/nlattr_fib_rule_hdr.c
new file mode 100644
index 0000000..394ab10
--- /dev/null
+++ b/tests/nlattr_fib_rule_hdr.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_FIB_RULES_H
+
+# include <stdio.h>
+# include <inttypes.h>
+# include "test_nlattr.h"
+# include <linux/fib_rules.h>
+# include <linux/ip.h>
+# include <linux/rtnetlink.h>
+
+#define FRA_TUN_ID 12
+#define FRA_TABLE 15
+#define FRA_UID_RANGE 20
+
+static void
+init_rtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETRULE,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct rtmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct rtmsg, msg,
+		.rtm_family = AF_UNIX,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_UNSPEC,
+		.rtm_type = FR_ACT_TO_TBL,
+		.rtm_flags = FIB_RULE_INVERT
+	);
+}
+
+static void
+print_rtmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETRULE, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", dst_len=0, src_len=0"
+	       ", tos=IPTOS_LOWDELAY"
+	       ", table=RT_TABLE_UNSPEC"
+	       ", action=FR_ACT_TO_TBL"
+	       ", flags=FIB_RULE_INVERT}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct rtmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* FRA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_rtmsg, print_rtmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    FRA_DST, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	const uint32_t table_id = RT_TABLE_DEFAULT;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_TABLE, pattern, table_id,
+			   printf("RT_TABLE_DEFAULT"));
+
+#ifdef HAVE_STRUCT_FIB_RULE_UID_RANGE
+	static const struct fib_rule_uid_range range = {
+		.start = 0xabcdedad,
+		.end = 0xbcdeadba
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_UID_RANGE, pattern, range,
+			   PRINT_FIELD_U("{", range, start);
+			   PRINT_FIELD_U(", ", range, end);
+			   printf("}"));
+#endif
+#if defined HAVE_BE64TOH || defined be64toh
+	const uint64_t tun_id = 0xabcdcdbeedabadef;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_TUN_ID, pattern, tun_id,
+			   printf("htobe64(%" PRIu64 ")", be64toh(tun_id)));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_FIB_RULES_H")
+
+#endif
diff --git a/tests/nlattr_fib_rule_hdr.gen.test b/tests/nlattr_fib_rule_hdr.gen.test
new file mode 100755
index 0000000..cbdad4d
--- /dev/null
+++ b/tests/nlattr_fib_rule_hdr.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_fib_rule_hdr +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ifaddrlblmsg.c b/tests/nlattr_ifaddrlblmsg.c
new file mode 100644
index 0000000..6003634
--- /dev/null
+++ b/tests/nlattr_ifaddrlblmsg.c
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_IFADDRLBLMSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/if_addrlabel.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_ifaddrlblmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETADDRLABEL,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifaddrlblmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifaddrlblmsg, msg,
+		.ifal_family = AF_UNIX,
+		.ifal_index = ifindex_lo()
+	);
+}
+
+static void
+print_ifaddrlblmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETADDRLABEL, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifal_family=AF_UNIX"
+	       ", ifal_prefixlen=0, ifal_flags=0"
+	       ", ifal_index=" IFINDEX_LO_STR
+	       ", ifal_seq=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifaddrlblmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* IFAL_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ifaddrlblmsg, print_ifaddrlblmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifaddrlblmsg, print_ifaddrlblmsg,
+		    IFAL_ADDRESS, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_IFADDRLBLMSG")
+
+#endif
diff --git a/tests/nlattr_ifaddrlblmsg.gen.test b/tests/nlattr_ifaddrlblmsg.gen.test
new file mode 100755
index 0000000..0c41dbe
--- /dev/null
+++ b/tests/nlattr_ifaddrlblmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrlblmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ifaddrmsg.c b/tests/nlattr_ifaddrmsg.c
new file mode 100644
index 0000000..93fbef1
--- /dev/null
+++ b/tests/nlattr_ifaddrmsg.c
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <arpa/inet.h>
+#include "test_nlattr.h"
+#ifdef HAVE_LINUX_IF_ADDR_H
+# include <linux/if_addr.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define IFA_FLAGS 8
+
+#define SET_IFA_FAMILY(af)		\
+	do {				\
+		ifa_family = af;	\
+		ifa_family_str = #af;	\
+	}				\
+	while (0)
+
+uint8_t ifa_family;
+const char *ifa_family_str;
+
+static void
+init_ifaddrmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETADDR,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifaddrmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifaddrmsg, msg,
+		.ifa_family = ifa_family,
+		.ifa_flags = IFA_F_SECONDARY,
+		.ifa_scope = RT_SCOPE_UNIVERSE,
+		.ifa_index = ifindex_lo()
+	);
+}
+
+static void
+print_ifaddrmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETADDR, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifa_family=%s"
+	       ", ifa_prefixlen=0"
+	       ", ifa_flags=IFA_F_SECONDARY"
+	       ", ifa_scope=RT_SCOPE_UNIVERSE"
+	       ", ifa_index=" IFINDEX_LO_STR "}",
+	       msg_len, ifa_family_str);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifaddrmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	SET_IFA_FAMILY(AF_UNSPEC);
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* IFA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ifaddrmsg, print_ifaddrmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifaddrmsg, print_ifaddrmsg,
+		    IFA_ADDRESS, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	SET_IFA_FAMILY(AF_INET);
+	static const char address4[] = "12.34.56.78";
+	struct in_addr a4;
+
+	if (!inet_pton(AF_INET, address4, &a4))
+		perror_msg_and_skip("inet_pton");
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_ADDRESS, pattern, a4,
+			   printf("%s", address4));
+
+	SET_IFA_FAMILY(AF_INET6);
+	static const char address6[] = "12:34:56:78:90:ab:cd:ef";
+	struct in6_addr a6;
+
+	if (!inet_pton(AF_INET6, address6, &a6))
+		perror_msg_and_skip("inet_pton");
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_ADDRESS, pattern, a6,
+			   printf("%s", address6));
+
+	static const struct ifa_cacheinfo ci = {
+		.ifa_prefered = 0xabcdefac,
+		.ifa_valid = 0xbcdadbca,
+		.cstamp = 0xcdabedba,
+		.tstamp = 0xdebabdac
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_CACHEINFO, pattern, ci,
+			   PRINT_FIELD_U("{", ci, ifa_prefered);
+			   PRINT_FIELD_U(", ", ci, ifa_valid);
+			   PRINT_FIELD_U(", ", ci, cstamp);
+			   PRINT_FIELD_U(", ", ci, tstamp);
+			   printf("}"));
+
+	const uint32_t ifa_flags = IFA_F_SECONDARY | IFA_F_PERMANENT;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifaddrmsg, print_ifaddrmsg,
+			   IFA_FLAGS, pattern, ifa_flags,
+			   printf("IFA_F_SECONDARY|IFA_F_PERMANENT"));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_ifaddrmsg.gen.test b/tests/nlattr_ifaddrmsg.gen.test
new file mode 100755
index 0000000..d659e00
--- /dev/null
+++ b/tests/nlattr_ifaddrmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ifinfomsg.c b/tests/nlattr_ifinfomsg.c
new file mode 100644
index 0000000..1fff52c
--- /dev/null
+++ b/tests/nlattr_ifinfomsg.c
@@ -0,0 +1,348 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <stddef.h>
+#include "test_nlattr.h"
+
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#ifndef IFLA_LINKINFO
+# define IFLA_LINKINFO 18
+#endif
+#ifndef IFLA_VF_PORTS
+# define IFLA_VF_PORTS 24
+#endif
+#define IFLA_LINK_NETNSID 37
+
+#ifndef IFLA_INFO_KIND
+# define IFLA_INFO_KIND 1
+#endif
+
+#ifndef IFLA_VF_PORT
+# define IFLA_VF_PORT 1
+#endif
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* IFLA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ifinfomsg, print_ifinfomsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	const int32_t netnsid = 0xacbdabda;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_LINK_NETNSID, pattern, netnsid,
+			   printf("%d", netnsid));
+
+	static const struct rtnl_link_stats st = {
+		.rx_packets = 0xabcdefac,
+		.tx_packets = 0xbcdacdab,
+		.rx_bytes = 0xcdbafaab,
+		.tx_bytes = 0xdafabadb,
+		.rx_errors = 0xeabcdaeb,
+		.tx_errors = 0xfefabeab,
+		.rx_dropped = 0xadbafafb,
+		.tx_dropped = 0xbdffabda,
+		.multicast = 0xcdabdfea,
+		.collisions = 0xefadbaeb,
+		.rx_length_errors = 0xfabffabd,
+		.rx_over_errors = 0xafbafabc,
+		.rx_crc_errors = 0xbfdabdad,
+		.rx_frame_errors = 0xcfdabfad,
+		.rx_fifo_errors = 0xddfdebad,
+		.rx_missed_errors = 0xefabdcba,
+		.tx_aborted_errors = 0xefdadbfa,
+		.tx_carrier_errors = 0xfaefbada,
+		.tx_fifo_errors = 0xaebdffab,
+		.tx_heartbeat_errors = 0xbadebaaf,
+		.tx_window_errors = 0xcdafbada,
+		.rx_compressed = 0xdeffadbd,
+		.tx_compressed = 0xefdadfab
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_STATS, pattern, st,
+			   PRINT_FIELD_U("{", st, rx_packets);
+			   PRINT_FIELD_U(", ", st, tx_packets);
+			   PRINT_FIELD_U(", ", st, rx_bytes);
+			   PRINT_FIELD_U(", ", st, tx_bytes);
+			   PRINT_FIELD_U(", ", st, rx_errors);
+			   PRINT_FIELD_U(", ", st, tx_errors);
+			   PRINT_FIELD_U(", ", st, rx_dropped);
+			   PRINT_FIELD_U(", ", st, tx_dropped);
+			   PRINT_FIELD_U(", ", st, multicast);
+			   PRINT_FIELD_U(", ", st, collisions);
+			   PRINT_FIELD_U(", ", st, rx_length_errors);
+			   PRINT_FIELD_U(", ", st, rx_over_errors);
+			   PRINT_FIELD_U(", ", st, rx_crc_errors);
+			   PRINT_FIELD_U(", ", st, rx_frame_errors);
+			   PRINT_FIELD_U(", ", st, rx_fifo_errors);
+			   PRINT_FIELD_U(", ", st, rx_missed_errors);
+			   PRINT_FIELD_U(", ", st, tx_aborted_errors);
+			   PRINT_FIELD_U(", ", st, tx_carrier_errors);
+			   PRINT_FIELD_U(", ", st, tx_fifo_errors);
+			   PRINT_FIELD_U(", ", st, tx_heartbeat_errors);
+			   PRINT_FIELD_U(", ", st, tx_window_errors);
+			   PRINT_FIELD_U(", ", st, rx_compressed);
+			   PRINT_FIELD_U(", ", st, tx_compressed);
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER
+			   PRINT_FIELD_U(", ", st, rx_nohandler);
+#endif
+			   printf("}"));
+
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER
+	const unsigned int sizeof_stats =
+		offsetofend(struct rtnl_link_stats, tx_compressed);
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_STATS, sizeof_stats, &st, sizeof_stats,
+		    PRINT_FIELD_U("{", st, rx_packets);
+		    PRINT_FIELD_U(", ", st, tx_packets);
+		    PRINT_FIELD_U(", ", st, rx_bytes);
+		    PRINT_FIELD_U(", ", st, tx_bytes);
+		    PRINT_FIELD_U(", ", st, rx_errors);
+		    PRINT_FIELD_U(", ", st, tx_errors);
+		    PRINT_FIELD_U(", ", st, rx_dropped);
+		    PRINT_FIELD_U(", ", st, tx_dropped);
+		    PRINT_FIELD_U(", ", st, multicast);
+		    PRINT_FIELD_U(", ", st, collisions);
+		    PRINT_FIELD_U(", ", st, rx_length_errors);
+		    PRINT_FIELD_U(", ", st, rx_over_errors);
+		    PRINT_FIELD_U(", ", st, rx_crc_errors);
+		    PRINT_FIELD_U(", ", st, rx_frame_errors);
+		    PRINT_FIELD_U(", ", st, rx_fifo_errors);
+		    PRINT_FIELD_U(", ", st, rx_missed_errors);
+		    PRINT_FIELD_U(", ", st, tx_aborted_errors);
+		    PRINT_FIELD_U(", ", st, tx_carrier_errors);
+		    PRINT_FIELD_U(", ", st, tx_fifo_errors);
+		    PRINT_FIELD_U(", ", st, tx_heartbeat_errors);
+		    PRINT_FIELD_U(", ", st, tx_window_errors);
+		    PRINT_FIELD_U(", ", st, rx_compressed);
+		    PRINT_FIELD_U(", ", st, tx_compressed);
+		    printf("}"));
+#endif /* HAVE_STRUCT_RTNL_LINK_STATS_RX_NOHANDLER */
+
+	static const struct rtnl_link_ifmap map = {
+		.mem_start = 0xadcbefedefbcdedb,
+		.mem_end = 0xefcbeabdecdcdefa,
+		.base_addr = 0xaddbeabdfaacdbae,
+		.irq = 0xefaf,
+		.dma = 0xab,
+		.port = 0xcd
+	};
+	const unsigned int sizeof_ifmap =
+		offsetofend(struct rtnl_link_ifmap, port);
+	const unsigned int plen = sizeof_ifmap - 1 > DEFAULT_STRLEN
+				  ? DEFAULT_STRLEN
+				  : (int) sizeof_ifmap - 1;
+	/* len < sizeof_ifmap */
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_MAP, plen, pattern, plen,
+		    print_quoted_hex(pattern, plen));
+
+	/* short read of sizeof_ifmap */
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_MAP, sizeof_ifmap, &map, sizeof_ifmap - 1,
+		    printf("%p", RTA_DATA(TEST_NLATTR_nla)));
+
+	/* sizeof_ifmap */
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_MAP, sizeof_ifmap, &map, sizeof_ifmap,
+		    PRINT_FIELD_X("{", map, mem_start);
+		    PRINT_FIELD_X(", ", map, mem_end);
+		    PRINT_FIELD_X(", ", map, base_addr);
+		    PRINT_FIELD_U(", ", map, irq);
+		    PRINT_FIELD_U(", ", map, dma);
+		    PRINT_FIELD_U(", ", map, port);
+		    printf("}"));
+
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64
+	static const struct rtnl_link_stats64 st64 = {
+		.rx_packets = 0xadcbefedefbcdedb,
+		.tx_packets = 0xbdabdedabdcdeabd,
+		.rx_bytes = 0xcdbaefbaeadfabec,
+		.tx_bytes = 0xdbaedbafabbeacdb,
+		.rx_errors = 0xefabfdaefabaefab,
+		.tx_errors = 0xfaebfabfabbaeabf,
+		.rx_dropped = 0xacdbaedbadbabeba,
+		.tx_dropped = 0xbcdeffebdabeadbe,
+		.multicast = 0xeeffbaeabaeffabe,
+		.collisions = 0xffbaefcefbafacef,
+		.rx_length_errors = 0xaabbdeabceffdecb,
+		.rx_over_errors = 0xbbdcdadebadeaeed,
+		.rx_crc_errors= 0xccdeabecefaedbef,
+		.rx_frame_errors = 0xddbedaedebcedaef,
+		.rx_fifo_errors = 0xeffbadefafdaeaab,
+		.rx_missed_errors = 0xfefaebccceadeecd,
+		.tx_aborted_errors = 0xabcdadefcdadef,
+		.tx_carrier_errors = 0xbccdafaeeaaefe,
+		.tx_fifo_errors = 0xcddefdbedeadce,
+		.tx_heartbeat_errors = 0xedaededdadcdea,
+		.tx_window_errors = 0xfdacdeaccedcda,
+		.rx_compressed = 0xacdbbcacdbccef,
+		.tx_compressed = 0xbcdadefcdedfea
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_STATS64, pattern, st64,
+			   PRINT_FIELD_U("{", st64, rx_packets);
+			   PRINT_FIELD_U(", ", st64, tx_packets);
+			   PRINT_FIELD_U(", ", st64, rx_bytes);
+			   PRINT_FIELD_U(", ", st64, tx_bytes);
+			   PRINT_FIELD_U(", ", st64, rx_errors);
+			   PRINT_FIELD_U(", ", st64, tx_errors);
+			   PRINT_FIELD_U(", ", st64, rx_dropped);
+			   PRINT_FIELD_U(", ", st64, tx_dropped);
+			   PRINT_FIELD_U(", ", st64, multicast);
+			   PRINT_FIELD_U(", ", st64, collisions);
+			   PRINT_FIELD_U(", ", st64, rx_length_errors);
+			   PRINT_FIELD_U(", ", st64, rx_over_errors);
+			   PRINT_FIELD_U(", ", st64, rx_crc_errors);
+			   PRINT_FIELD_U(", ", st64, rx_frame_errors);
+			   PRINT_FIELD_U(", ", st64, rx_fifo_errors);
+			   PRINT_FIELD_U(", ", st64, rx_missed_errors);
+			   PRINT_FIELD_U(", ", st64, tx_aborted_errors);
+			   PRINT_FIELD_U(", ", st64, tx_carrier_errors);
+			   PRINT_FIELD_U(", ", st64, tx_fifo_errors);
+			   PRINT_FIELD_U(", ", st64, tx_heartbeat_errors);
+			   PRINT_FIELD_U(", ", st64, tx_window_errors);
+			   PRINT_FIELD_U(", ", st64, rx_compressed);
+			   PRINT_FIELD_U(", ", st64, tx_compressed);
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER
+			   PRINT_FIELD_U(", ", st64, rx_nohandler);
+#endif
+			   printf("}"));
+
+#ifdef HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER
+	const unsigned int sizeof_stats64 =
+		offsetofend(struct rtnl_link_stats64, tx_compressed);
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_STATS64, sizeof_stats64, &st64, sizeof_stats64,
+		    PRINT_FIELD_U("{", st64, rx_packets);
+		    PRINT_FIELD_U(", ", st64, tx_packets);
+		    PRINT_FIELD_U(", ", st64, rx_bytes);
+		    PRINT_FIELD_U(", ", st64, tx_bytes);
+		    PRINT_FIELD_U(", ", st64, rx_errors);
+		    PRINT_FIELD_U(", ", st64, tx_errors);
+		    PRINT_FIELD_U(", ", st64, rx_dropped);
+		    PRINT_FIELD_U(", ", st64, tx_dropped);
+		    PRINT_FIELD_U(", ", st64, multicast);
+		    PRINT_FIELD_U(", ", st64, collisions);
+		    PRINT_FIELD_U(", ", st64, rx_length_errors);
+		    PRINT_FIELD_U(", ", st64, rx_over_errors);
+		    PRINT_FIELD_U(", ", st64, rx_crc_errors);
+		    PRINT_FIELD_U(", ", st64, rx_frame_errors);
+		    PRINT_FIELD_U(", ", st64, rx_fifo_errors);
+		    PRINT_FIELD_U(", ", st64, rx_missed_errors);
+		    PRINT_FIELD_U(", ", st64, tx_aborted_errors);
+		    PRINT_FIELD_U(", ", st64, tx_carrier_errors);
+		    PRINT_FIELD_U(", ", st64, tx_fifo_errors);
+		    PRINT_FIELD_U(", ", st64, tx_heartbeat_errors);
+		    PRINT_FIELD_U(", ", st64, tx_window_errors);
+		    PRINT_FIELD_U(", ", st64, rx_compressed);
+		    PRINT_FIELD_U(", ", st64, tx_compressed);
+		    printf("}"));
+#endif /* HAVE_STRUCT_RTNL_LINK_STATS64_RX_NOHANDLER */
+#endif /* HAVE_STRUCT_RTNL_LINK_STATS64 */
+
+	struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = IFLA_INFO_KIND,
+	};
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_LINKINFO, sizeof(nla), &nla, sizeof(nla),
+		    printf("{nla_len=%u, nla_type=IFLA_INFO_KIND}",
+			   nla.nla_len));
+
+	nla.nla_type = IFLA_VF_PORT;
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ifinfomsg, print_ifinfomsg,
+		    IFLA_VF_PORTS, sizeof(nla), &nla, sizeof(nla),
+		    printf("{nla_len=%u, nla_type=IFLA_VF_PORT}",
+			   nla.nla_len));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_ifinfomsg.gen.test b/tests/nlattr_ifinfomsg.gen.test
new file mode 100755
index 0000000..618df14
--- /dev/null
+++ b/tests/nlattr_ifinfomsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifinfomsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ifla_brport.c b/tests/nlattr_ifla_brport.c
new file mode 100644
index 0000000..ae7c9da
--- /dev/null
+++ b/tests/nlattr_ifla_brport.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <inttypes.h>
+#include "test_nlattr.h"
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define IFLA_BRPORT_PRIORITY 2
+#define IFLA_BRPORT_MESSAGE_AGE_TIMER 21
+
+const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = IFLA_PROTINFO
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}"
+	       ", {{nla_len=%u, nla_type=IFLA_PROTINFO}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const uint16_t u16 = 0xabcd;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_BRPORT_PRIORITY, pattern, u16,
+				  printf("%u", u16));
+
+	const uint64_t u64 = 0xabcdedeeefeafeab;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_BRPORT_MESSAGE_AGE_TIMER, pattern, u64,
+				  printf("%" PRIu64, u64));
+
+#ifdef HAVE_STRUCT_IFLA_BRIDGE_ID
+	static const struct ifla_bridge_id id = {
+		.prio = { 0xab, 0xcd },
+		.addr = { 0xab, 0xcd, 0xef, 0xac, 0xbc, 0xcd }
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_BRPORT_ROOT_ID, pattern, id,
+				  printf("{prio=[%u, %u]"
+					 ", addr=%02x:%02x:%02x:%02x:%02x:%02x}",
+					 id.prio[0], id.prio[1],
+					 id.addr[0], id.addr[1], id.addr[2],
+					 id.addr[3], id.addr[4], id.addr[5]));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_ifla_brport.gen.test b/tests/nlattr_ifla_brport.gen.test
new file mode 100755
index 0000000..48bfed4
--- /dev/null
+++ b/tests/nlattr_ifla_brport.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_brport +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ifla_port.c b/tests/nlattr_ifla_port.c
new file mode 100644
index 0000000..61e90fe
--- /dev/null
+++ b/tests/nlattr_ifla_port.c
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#ifndef IFLA_PORT_SELF
+# define IFLA_PORT_SELF 25
+#endif
+#ifndef IFLA_PORT_VF
+# define IFLA_PORT_VF 1
+#endif
+
+const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = IFLA_PORT_SELF
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}"
+	       ", {{nla_len=%u, nla_type=IFLA_PORT_SELF}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const uint32_t num = 0xabacdbcd;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_PORT_VF, pattern, num,
+				  printf("%u", num));
+
+#ifdef HAVE_STRUCT_IFLA_PORT_VSI
+	static const struct ifla_port_vsi vsi = {
+		.vsi_mgr_id = 0xab,
+		.vsi_type_id = "abc",
+		.vsi_type_version = 0xef
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_PORT_VSI_TYPE, pattern, vsi,
+				  PRINT_FIELD_U("{", vsi, vsi_mgr_id);
+				  printf(", vsi_type_id=\"\\x61\\x62\\x63\"");
+				  PRINT_FIELD_U(", ", vsi, vsi_type_version);
+				  printf("}"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_ifla_port.gen.test b/tests/nlattr_ifla_port.gen.test
new file mode 100755
index 0000000..605bf04
--- /dev/null
+++ b/tests/nlattr_ifla_port.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_port +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ifla_xdp.c b/tests/nlattr_ifla_xdp.c
new file mode 100644
index 0000000..cca5219
--- /dev/null
+++ b/tests/nlattr_ifla_xdp.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#ifdef HAVE_LINUX_IF_LINK_H
+# include <linux/if_link.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#ifndef IFLA_XDP
+# define IFLA_XDP 43
+#endif
+#ifndef IFLA_XDP_FD
+# define IFLA_XDP_FD 1
+#endif
+
+const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETLINK,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ifinfomsg, msg,
+		.ifi_family = AF_UNIX,
+		.ifi_type = ARPHRD_LOOPBACK,
+		.ifi_index = ifindex_lo(),
+		.ifi_flags = IFF_UP,
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = IFLA_XDP
+	);
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+	       ", ifi_type=ARPHRD_LOOPBACK"
+	       ", ifi_index=" IFINDEX_LO_STR
+	       ", ifi_flags=IFF_UP, ifi_change=0}"
+	       ", {{nla_len=%u, nla_type=IFLA_XDP}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const int32_t num = 0xabacdbcd;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_XDP_FD, pattern, num,
+				  printf("%d", num));
+
+#ifdef XDP_FLAGS_UPDATE_IF_NOEXIST
+	const uint32_t flags = XDP_FLAGS_UPDATE_IF_NOEXIST;
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_XDP_FLAGS, pattern, flags,
+				  printf("XDP_FLAGS_UPDATE_IF_NOEXIST"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_ifla_xdp.gen.test b/tests/nlattr_ifla_xdp.gen.test
new file mode 100755
index 0000000..a30e843
--- /dev/null
+++ b/tests/nlattr_ifla_xdp.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_xdp +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_inet_diag_msg.c b/tests/nlattr_inet_diag_msg.c
index d9d564c..5666d74 100644
--- a/tests/nlattr_inet_diag_msg.c
+++ b/tests/nlattr_inet_diag_msg.c
@@ -39,12 +39,6 @@
 
 static const char address[] = "10.11.12.13";
 
-#ifdef HAVE_IF_INDEXTONAME
-# define IFINDEX_LO	(if_nametoindex("lo"))
-#else
-# define IFINDEX_LO	1
-#endif
-
 static void
 init_inet_diag_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
 {
@@ -58,7 +52,7 @@
 	SET_STRUCT(struct inet_diag_msg, msg,
 		.idiag_family = AF_INET,
 		.idiag_state = TCP_LISTEN,
-		.id.idiag_if = IFINDEX_LO
+		.id.idiag_if = ifindex_lo()
 	);
 
 	if (!inet_pton(AF_INET, address, msg->id.idiag_src) ||
@@ -73,9 +67,10 @@
 	       ", flags=NLM_F_DUMP, seq=0, pid=0}, {idiag_family=AF_INET"
 	       ", idiag_state=TCP_LISTEN, idiag_timer=0, idiag_retrans=0"
 	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_src)"
-	       ", inet_pton(AF_INET, \"%s\", &idiag_dst)"
-	       ", idiag_if=if_nametoindex(\"lo\"), idiag_cookie=[0, 0]}"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=" IFINDEX_LO_STR
+	       ", idiag_cookie=[0, 0]}"
 	       ", idiag_expires=0, idiag_rqueue=0, idiag_wqueue=0"
 	       ", idiag_uid=0, idiag_inode=0}",
 	       msg_len, address, address);
@@ -169,6 +164,18 @@
 			  init_inet_diag_msg, print_inet_diag_msg,
 			  INET_DIAG_SKMEMINFO, pattern, mem, print_uint);
 
+	static uint32_t bigmem[SK_MEMINFO_VARS + 1];
+	memcpy(bigmem, pattern, sizeof(bigmem));
+
+	TEST_NLATTR(fd, nlh0, hdrlen, init_inet_diag_msg, print_inet_diag_msg,
+		    INET_DIAG_SKMEMINFO, sizeof(bigmem), bigmem, sizeof(bigmem),
+		    size_t i;
+		    for (i = 0; i < SK_MEMINFO_VARS; ++i) {
+			printf(i ? ", " : "[");
+			print_uint(&bigmem[i]);
+		    }
+		    printf(", ...]"));
+
 	static const uint32_t mark = 0xabdfadca;
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
diff --git a/tests/nlattr_inet_diag_req_compat.c b/tests/nlattr_inet_diag_req_compat.c
new file mode 100644
index 0000000..b0b2171
--- /dev/null
+++ b/tests/nlattr_inet_diag_req_compat.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <net/if.h>
+#include <netinet/tcp.h>
+#include "test_nlattr.h"
+#include <linux/inet_diag.h>
+#include <linux/rtnetlink.h>
+#include <linux/sock_diag.h>
+
+static const char address[] = "10.11.12.13";
+
+static void
+init_inet_diag_req(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = TCPDIAG_GETSOCK,
+		.nlmsg_flags = NLM_F_REQUEST
+	);
+
+	struct inet_diag_req *const req = NLMSG_DATA(nlh);
+	SET_STRUCT(struct inet_diag_req, req,
+		.idiag_family = AF_INET,
+		.idiag_ext = 1 << (INET_DIAG_TOS - 1),
+		.idiag_states = 1 << TCP_LAST_ACK,
+		.id.idiag_if = ifindex_lo()
+	);
+
+	if (!inet_pton(AF_INET, address, req->id.idiag_src) ||
+	    !inet_pton(AF_INET, address, req->id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
+}
+
+static void
+print_inet_diag_req(const unsigned int msg_len)
+{
+	printf("{len=%u, type=TCPDIAG_GETSOCK, flags=NLM_F_REQUEST"
+	       ", seq=0, pid=0}, {idiag_family=AF_INET"
+	       ", idiag_src_len=0, idiag_dst_len=0"
+	       ", idiag_ext=1<<(INET_DIAG_TOS-1)"
+	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=" IFINDEX_LO_STR
+	       ", idiag_cookie=[0, 0]}"
+	       ", idiag_states=1<<TCP_LAST_ACK, idiag_dbs=0}",
+	       msg_len, address, address);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct inet_diag_req);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* INET_DIAG_REQ_??? */",
+		INET_DIAG_REQ_BYTECODE + 1);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_inet_diag_req, print_inet_diag_req,
+		     INET_DIAG_REQ_BYTECODE + 1, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_inet_diag_req_compat.gen.test b/tests/nlattr_inet_diag_req_compat.gen.test
new file mode 100755
index 0000000..bf8b65c
--- /dev/null
+++ b/tests/nlattr_inet_diag_req_compat.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_compat +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_inet_diag_req_v2.c b/tests/nlattr_inet_diag_req_v2.c
new file mode 100644
index 0000000..1e09abe
--- /dev/null
+++ b/tests/nlattr_inet_diag_req_v2.c
@@ -0,0 +1,424 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <net/if.h>
+#include <netinet/tcp.h>
+#include "test_nlattr.h"
+#include <linux/inet_diag.h>
+#include <linux/rtnetlink.h>
+#include <linux/sock_diag.h>
+
+static const char address[] = "10.11.12.13";
+static const unsigned int hdrlen = sizeof(struct inet_diag_req_v2);
+static void *nlh0;
+static char pattern[4096];
+
+static void
+init_inet_diag_req_v2(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
+		.nlmsg_flags = NLM_F_REQUEST
+	);
+
+	struct inet_diag_req_v2 *const req = NLMSG_DATA(nlh);
+	SET_STRUCT(struct inet_diag_req_v2, req,
+		.sdiag_family = AF_INET,
+		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
+		.sdiag_protocol = IPPROTO_TCP,
+		.idiag_states = 1 << TCP_CLOSE,
+		.id.idiag_if = ifindex_lo()
+	);
+
+	if (!inet_pton(AF_INET, address, req->id.idiag_src) ||
+	    !inet_pton(AF_INET, address, req->id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
+}
+
+static void
+print_inet_diag_req_v2(const unsigned int msg_len)
+{
+	printf("{len=%u, type=SOCK_DIAG_BY_FAMILY"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", {sdiag_family=AF_INET, sdiag_protocol=IPPROTO_TCP"
+	       ", idiag_ext=1<<(INET_DIAG_CONG-1)"
+	       ", idiag_states=1<<TCP_CLOSE"
+	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=" IFINDEX_LO_STR
+	       ", idiag_cookie=[0, 0]}}",
+	       msg_len, address, address);
+}
+
+static void
+test_inet_diag_bc_op(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+		.yes = 0xaf,
+		.no = 0xafcd
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_inet_diag_req_v2, print_inet_diag_req_v2,
+			   INET_DIAG_REQ_BYTECODE, pattern, op,
+			   printf("{code=INET_DIAG_BC_S_COND");
+			   PRINT_FIELD_U(", ", op, yes);
+			   PRINT_FIELD_U(", ", op, no);
+			   printf("}"));
+}
+
+static void
+print_inet_diag_bc_op(const char *const code)
+{
+	printf("{{code=%s, yes=0, no=0}, ", code);
+}
+
+static void
+test_inet_diag_bc_s_cond(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+	};
+	static const struct inet_diag_hostcond cond = {
+		.family = AF_UNSPEC,
+		.prefix_len = 0xad,
+		.port = 0xadfa
+	};
+	char buf[sizeof(op) + sizeof(cond)];
+	memcpy(buf, &op, sizeof(op));
+
+	const unsigned int plen = sizeof(cond) - 1 > DEFAULT_STRLEN ?
+		sizeof(op) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	memcpy(buf + sizeof(op), &pattern, sizeof(cond));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_quoted_hex(buf + sizeof(op), plen - sizeof(op));
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op)));
+
+	memcpy(buf + sizeof(op), &cond, sizeof(cond));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    printf("{family=AF_UNSPEC");
+		    PRINT_FIELD_U(", ", cond, prefix_len);
+		    PRINT_FIELD_U(", ", cond, port);
+		    printf("}}"));
+}
+
+static void
+print_inet_diag_hostcond(const char *const family)
+{
+	printf("{family=%s, prefix_len=0, port=0, ", family);
+}
+
+static void
+test_in_addr(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+	};
+	static const struct inet_diag_hostcond cond = {
+		.family = AF_INET,
+	};
+	struct in_addr addr;
+	if (!inet_pton(AF_INET, address, &addr))
+		perror_msg_and_skip("inet_pton");
+
+	char buf[sizeof(op) + sizeof(cond) + sizeof(addr)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), &cond, sizeof(cond));
+
+	const unsigned int plen = sizeof(addr) - 1 > DEFAULT_STRLEN ?
+		sizeof(cond) + sizeof(cond) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	memcpy(buf + sizeof(op) + sizeof(cond), &pattern, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET");
+		    printf("addr=");
+		    print_quoted_hex(pattern, plen - sizeof(op) - sizeof(cond));
+		    printf("}}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET");
+		    printf("addr=%p}}",
+			   RTA_DATA(TEST_NLATTR_nla)
+			   + sizeof(op) + sizeof(cond)));
+
+	memcpy(buf + sizeof(op) + sizeof(cond), &addr, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET");
+		    printf("addr=inet_addr(\"%s\")}}", address));
+}
+
+static void
+test_in6_addr(const int fd)
+{
+	const char address6[] = "12:34:56:78:90:ab:cd:ef";
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_S_COND,
+	};
+	static const struct inet_diag_hostcond cond = {
+		.family = AF_INET6,
+	};
+	struct in6_addr addr;
+	if (!inet_pton(AF_INET6, address6, &addr))
+		perror_msg_and_skip("inet_pton");
+
+	char buf[sizeof(op) + sizeof(cond) + sizeof(addr)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), &cond, sizeof(cond));
+
+	const unsigned int plen = sizeof(addr) - 1 > DEFAULT_STRLEN ?
+		sizeof(cond) + sizeof(cond) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	memcpy(buf + sizeof(op) + sizeof(cond), &pattern, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET6");
+		    printf("addr=");
+		    print_quoted_hex(pattern, plen - sizeof(op) - sizeof(cond));
+		    printf("}}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET6");
+		    printf("addr=%p}}",
+			   RTA_DATA(TEST_NLATTR_nla)
+			   + sizeof(op) + sizeof(cond)));
+
+	memcpy(buf + sizeof(op) + sizeof(cond), &addr, sizeof(addr));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_COND");
+		    print_inet_diag_hostcond("AF_INET6");
+		    printf("inet_pton(AF_INET6, \"%s\", &addr)}}", address6));
+}
+
+static void
+test_inet_diag_bc_dev_cond(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_DEV_COND,
+	};
+	const uint32_t ifindex = ifindex_lo();
+	char buf[sizeof(op) + sizeof(ifindex)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), pattern, sizeof(ifindex));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf) - 1, buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_DEV_COND");
+		    print_quoted_hex(pattern, sizeof(ifindex) - 1);
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_DEV_COND");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op)));
+
+	memcpy(buf + sizeof(op), &ifindex, sizeof(ifindex));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_DEV_COND");
+		    printf(IFINDEX_LO_STR "}"));
+}
+
+static void
+test_inet_diag_bc_s_le(const int fd)
+{
+	static const struct inet_diag_bc_op op[] = {
+		{
+			.code = INET_DIAG_BC_S_LE,
+		},
+		{
+			.code = INET_DIAG_BC_DEV_COND,
+			.yes = 0xaf,
+			.no = 0xafcd
+		}
+	};
+
+	char buf[sizeof(op)];
+	memcpy(buf, op, sizeof(op[0]));
+	memcpy(buf + sizeof(op[0]), pattern, sizeof(op[1]));
+
+	const unsigned int plen = sizeof(op[1]) - 1 > DEFAULT_STRLEN ?
+		sizeof(op[0]) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_LE");
+		    print_quoted_hex(buf + sizeof(op[0]), plen - sizeof(op[0]));
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_LE");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op[0])));
+
+	memcpy(buf + sizeof(op[0]), &op[1], sizeof(op[1]));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_S_LE");
+		    printf("{code=INET_DIAG_BC_DEV_COND");
+		    PRINT_FIELD_U(", ", op[1], yes);
+		    PRINT_FIELD_U(", ", op[1], no);
+		    printf("}}"));
+};
+
+static void
+test_inet_diag_bc_mark_cond(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_MARK_COND,
+	};
+	static const struct inet_diag_markcond markcond = {
+		.mark = 0xafbcafcd,
+		.mask = 0xbafaacda
+	};
+	char buf[sizeof(op) + sizeof(markcond)];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), pattern, sizeof(markcond));
+
+	const unsigned int plen = sizeof(markcond) - 1 > DEFAULT_STRLEN ?
+		sizeof(markcond) + DEFAULT_STRLEN : sizeof(buf) - 1;
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    plen, buf, plen,
+		    print_inet_diag_bc_op("INET_DIAG_BC_MARK_COND");
+		    print_quoted_hex(buf + sizeof(op), plen - sizeof(op));
+		    printf("}"));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf) - 1,
+		    print_inet_diag_bc_op("INET_DIAG_BC_MARK_COND");
+		    printf("%p}", RTA_DATA(TEST_NLATTR_nla) + sizeof(op)));
+
+	memcpy(buf + sizeof(op), &markcond, sizeof(markcond));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_MARK_COND");
+		    PRINT_FIELD_U("{", markcond, mark);
+		    PRINT_FIELD_U(", ", markcond, mask);
+		    printf("}}"));
+}
+
+static void
+test_inet_diag_bc_nop(const int fd)
+{
+	static const struct inet_diag_bc_op op = {
+		.code = INET_DIAG_BC_AUTO,
+	};
+	char buf[sizeof(op) + 4];
+	memcpy(buf, &op, sizeof(op));
+	memcpy(buf + sizeof(op), pattern, 4);
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_inet_diag_req_v2, print_inet_diag_req_v2,
+		    INET_DIAG_REQ_BYTECODE,
+		    sizeof(buf), buf, sizeof(buf),
+		    print_inet_diag_bc_op("INET_DIAG_BC_AUTO");
+		    print_quoted_hex(buf + sizeof(op),
+				     sizeof(buf) - sizeof(op));
+		    printf("}"));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	test_inet_diag_bc_op(fd);
+	test_inet_diag_bc_s_cond(fd);
+	test_in_addr(fd);
+	test_in6_addr(fd);
+	test_inet_diag_bc_dev_cond(fd);
+	test_inet_diag_bc_s_le(fd);
+	test_inet_diag_bc_mark_cond(fd);
+	test_inet_diag_bc_nop(fd);
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
diff --git a/tests/nlattr_inet_diag_req_v2.gen.test b/tests/nlattr_inet_diag_req_v2.gen.test
new file mode 100755
index 0000000..0260bc4
--- /dev/null
+++ b/tests/nlattr_inet_diag_req_v2.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_v2 +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ndmsg.c b/tests/nlattr_ndmsg.c
new file mode 100644
index 0000000..8538a82
--- /dev/null
+++ b/tests/nlattr_ndmsg.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "test_nlattr.h"
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define NDA_PORT 6
+
+static void
+init_ndmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNEIGH,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ndmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ndmsg, msg,
+		.ndm_family = AF_UNIX,
+		.ndm_ifindex = ifindex_lo(),
+		.ndm_state = NUD_PERMANENT,
+		.ndm_flags = NTF_PROXY,
+		.ndm_type = RTN_UNSPEC
+	);
+}
+
+static void
+print_ndmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNEIGH, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ndm_family=AF_UNIX"
+	       ", ndm_ifindex=" IFINDEX_LO_STR
+	       ", ndm_state=NUD_PERMANENT"
+	       ", ndm_flags=NTF_PROXY"
+	       ", ndm_type=RTN_UNSPEC}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ndmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NDA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ndmsg, print_ndmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_ndmsg, print_ndmsg,
+		    NDA_DST, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	static const struct nda_cacheinfo ci = {
+		.ndm_confirmed = 0xabcdedad,
+		.ndm_used = 0xbcdaedad,
+		.ndm_updated = 0xcdbadeda,
+		.ndm_refcnt = 0xdeadbeda
+	};
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndmsg, print_ndmsg,
+			   NDA_CACHEINFO, pattern, ci,
+			   PRINT_FIELD_U("{", ci, ndm_confirmed);
+			   PRINT_FIELD_U(", ", ci, ndm_used);
+			   PRINT_FIELD_U(", ", ci, ndm_updated);
+			   PRINT_FIELD_U(", ", ci, ndm_refcnt);
+			   printf("}"));
+
+	const uint16_t port = 0xabcd;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndmsg, print_ndmsg,
+			   NDA_PORT, pattern, port,
+			   printf("htons(%u)", ntohs(port)));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_ndmsg.gen.test b/tests/nlattr_ndmsg.gen.test
new file mode 100755
index 0000000..06b8f1a
--- /dev/null
+++ b/tests/nlattr_ndmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ndtmsg.c b/tests/nlattr_ndtmsg.c
new file mode 100644
index 0000000..d3f1bdb
--- /dev/null
+++ b/tests/nlattr_ndtmsg.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#ifdef HAVE_LINUX_NEIGHBOUR_H
+# include <linux/neighbour.h>
+#endif
+#include <linux/rtnetlink.h>
+
+#define NDTA_PARMS 6
+#define NDTPA_IFINDEX 1
+
+static void
+init_ndtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNEIGHTBL,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct ndtmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct ndtmsg, msg,
+		.ndtm_family = AF_NETLINK
+	);
+}
+
+static void
+print_ndtmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNEIGHTBL, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ndtm_family=AF_NETLINK}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ndtmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NDTA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_ndtmsg, print_ndtmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+#ifdef HAVE_STRUCT_NDT_CONFIG
+	static const struct ndt_config ndtc = {
+		.ndtc_key_len = 0xabcd,
+		.ndtc_entry_size = 0xbcda,
+		.ndtc_entries = 0xcdabedad,
+		.ndtc_last_flush = 0xdebaedba,
+		.ndtc_last_rand = 0xedadedab,
+		.ndtc_hash_rnd = 0xfeadedaf,
+		.ndtc_hash_mask = 0xadbcdead,
+		.ndtc_hash_chain_gc = 0xbdaedacd,
+		.ndtc_proxy_qlen = 0xcdeaedab
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndtmsg, print_ndtmsg,
+			   NDTA_CONFIG, pattern, ndtc,
+			   PRINT_FIELD_U("{", ndtc, ndtc_key_len);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_entry_size);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_entries);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_last_flush);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_last_rand);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_hash_rnd);
+			   PRINT_FIELD_0X(", ", ndtc, ndtc_hash_mask);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_hash_chain_gc);
+			   PRINT_FIELD_U(", ", ndtc, ndtc_proxy_qlen);
+			   printf("}"));
+#endif /* HAVE_STRUCT_NDT_CONFIG */
+
+	static const struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = NDTPA_IFINDEX
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndtmsg, print_ndtmsg,
+			   NDTA_PARMS, pattern, nla,
+			   PRINT_FIELD_U("{", nla, nla_len);
+			   printf(", nla_type=NDTPA_IFINDEX}"));
+
+#ifdef HAVE_STRUCT_NDT_STATS
+	static const struct ndt_stats ndtst = {
+		.ndts_allocs		= 0xabcdedabedadedfa,
+		.ndts_destroys		= 0xbcdefabefacdbaad,
+		.ndts_hash_grows	= 0xcdbadefacdcbaede,
+		.ndts_res_failed	= 0xdedbaecfdbcadcfe,
+		.ndts_lookups		= 0xedfafdedbdadedec,
+		.ndts_hits		= 0xfebdeadebcddeade,
+		.ndts_rcv_probes_mcast	= 0xadebfeadecddeafe,
+		.ndts_rcv_probes_ucast	= 0xbcdefeacdadecdfe,
+		.ndts_periodic_gc_runs	= 0xedffeadedeffbecc,
+		.ndts_forced_gc_runs	= 0xfeefefeabedeedcd,
+#ifdef HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS
+		.ndts_table_fulls	= 0xadebfefaecdfeade
+#endif /* HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS */
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ndtmsg, print_ndtmsg,
+			   NDTA_STATS, pattern, ndtst,
+			   PRINT_FIELD_U("{", ndtst, ndts_allocs);
+			   PRINT_FIELD_U(", ", ndtst, ndts_destroys);
+			   PRINT_FIELD_U(", ", ndtst, ndts_hash_grows);
+			   PRINT_FIELD_U(", ", ndtst, ndts_res_failed);
+			   PRINT_FIELD_U(", ", ndtst, ndts_lookups);
+			   PRINT_FIELD_U(", ", ndtst, ndts_hits);
+			   PRINT_FIELD_U(", ", ndtst, ndts_rcv_probes_mcast);
+			   PRINT_FIELD_U(", ", ndtst, ndts_rcv_probes_ucast);
+			   PRINT_FIELD_U(", ", ndtst, ndts_periodic_gc_runs);
+			   PRINT_FIELD_U(", ", ndtst, ndts_forced_gc_runs);
+#ifdef HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS
+			   PRINT_FIELD_U(", ", ndtst, ndts_table_fulls);
+#endif /* HAVE_STRUCT_NDT_STATS_NDTS_TABLE_FULLS */
+			   printf("}"));
+#endif /* HAVE_STRUCT_NDT_STATS */
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_ndtmsg.gen.test b/tests/nlattr_ndtmsg.gen.test
new file mode 100755
index 0000000..d75ad57
--- /dev/null
+++ b/tests/nlattr_ndtmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndtmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_netconfmsg.c b/tests/nlattr_netconfmsg.c
new file mode 100644
index 0000000..6866adc
--- /dev/null
+++ b/tests/nlattr_netconfmsg.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_NETCONFMSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/netconf.h>
+# include <linux/rtnetlink.h>
+
+static void
+init_netconfmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNETCONF,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct netconfmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct netconfmsg, msg,
+		.ncm_family = AF_INET
+	);
+}
+
+static void
+print_netconfmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNETCONF, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {ncm_family=AF_INET}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct netconfmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NETCONFA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_netconfmsg, print_netconfmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_NETCONFMSG")
+
+#endif
diff --git a/tests/nlattr_netconfmsg.gen.test b/tests/nlattr_netconfmsg.gen.test
new file mode 100755
index 0000000..9a061cb
--- /dev/null
+++ b/tests/nlattr_netconfmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_netconfmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_nlmsgerr.c b/tests/nlattr_nlmsgerr.c
new file mode 100644
index 0000000..837283c
--- /dev/null
+++ b/tests/nlattr_nlmsgerr.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <stdio.h>
+#include <stdint.h>
+#include "test_nlattr.h"
+
+#define NLMSGERR_ATTR_COOKIE 3
+
+static void
+init_nlmsgerr(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = NLMSG_ERROR,
+		.nlmsg_flags = NLM_F_REQUEST | NLM_F_CAPPED
+	);
+
+	struct nlmsgerr *const err = NLMSG_DATA(nlh);
+	SET_STRUCT(struct nlmsgerr, err,
+		.error = -13,
+		.msg = {
+			.nlmsg_len = NLMSG_HDRLEN + 4,
+			.nlmsg_type = NLMSG_NOOP,
+			.nlmsg_flags = NLM_F_REQUEST,
+		}
+	);
+}
+
+static void
+print_nlmsgerr(const unsigned int msg_len)
+{
+	printf("{len=%u, type=NLMSG_ERROR"
+	       ", flags=NLM_F_REQUEST|NLM_F_CAPPED"
+	       ", seq=0, pid=0}, {error=-EACCES"
+	       ", msg={len=%u, type=NLMSG_NOOP"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}",
+	       msg_len, NLMSG_HDRLEN + 4);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct nlmsgerr);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static const uint8_t cookie[] = { 0xab, 0xfe };
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_nlmsgerr, print_nlmsgerr,
+		    NLMSGERR_ATTR_COOKIE,
+		    sizeof(cookie), cookie, sizeof(cookie),
+		    printf("[%u, %u]", cookie[0], cookie[1]);
+		    printf("}"));
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
diff --git a/tests/nlattr_nlmsgerr.gen.test b/tests/nlattr_nlmsgerr.gen.test
new file mode 100755
index 0000000..23df500
--- /dev/null
+++ b/tests/nlattr_nlmsgerr.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_nlmsgerr +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_packet_diag_msg.c b/tests/nlattr_packet_diag_msg.c
new file mode 100644
index 0000000..4211e20
--- /dev/null
+++ b/tests/nlattr_packet_diag_msg.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <net/if.h>
+#include "test_nlattr.h"
+#include <sys/socket.h>
+#include <linux/filter.h>
+#include <linux/packet_diag.h>
+#include <linux/rtnetlink.h>
+#include <linux/sock_diag.h>
+
+static void
+init_packet_diag_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct packet_diag_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct packet_diag_msg, msg,
+		.pdiag_family = AF_PACKET,
+		.pdiag_type = SOCK_STREAM
+	);
+}
+
+static void
+print_packet_diag_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=SOCK_DIAG_BY_FAMILY"
+	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
+	       ", {pdiag_family=AF_PACKET"
+	       ", pdiag_type=SOCK_STREAM, pdiag_num=0"
+	       ", pdiag_ino=0, pdiag_cookie=[0, 0]}",
+	       msg_len);
+}
+
+static void
+print_packet_diag_mclist(const struct packet_diag_mclist *const dml)
+{
+	printf("{pdmc_index=" IFINDEX_LO_STR);
+	PRINT_FIELD_U(", ", *dml, pdmc_count);
+	PRINT_FIELD_U(", ", *dml, pdmc_type);
+	PRINT_FIELD_U(", ", *dml, pdmc_alen);
+	printf(", pdmc_addr=");
+	print_quoted_hex(dml->pdmc_addr, dml->pdmc_alen);
+	printf("}");
+}
+
+static const struct sock_filter filter[] = {
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF+SKF_AD_PKTTYPE),
+	BPF_STMT(BPF_RET|BPF_K, 0x2a)
+};
+
+static void
+print_sock_filter(const struct sock_filter *const f)
+{
+	if (f == filter)
+		printf("BPF_STMT(BPF_LD|BPF_B|BPF_ABS"
+		       ", SKF_AD_OFF+SKF_AD_PKTTYPE)");
+	else
+		printf("BPF_STMT(BPF_RET|BPF_K, 0x2a)");
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct packet_diag_msg);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	static const struct packet_diag_info pinfo = {
+		.pdi_index = 0xabcddafa,
+		.pdi_version = 0xbabcdafb,
+		.pdi_reserve = 0xcfaacdaf,
+		.pdi_copy_thresh = 0xdabacdaf,
+		.pdi_tstamp = 0xeafbaadf,
+		.pdi_flags = PDI_RUNNING
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_packet_diag_msg, print_packet_diag_msg,
+			   PACKET_DIAG_INFO, pattern, pinfo,
+			   PRINT_FIELD_U("{", pinfo, pdi_index);
+			   PRINT_FIELD_U(", ", pinfo, pdi_version);
+			   PRINT_FIELD_U(", ", pinfo, pdi_reserve);
+			   PRINT_FIELD_U(", ", pinfo, pdi_copy_thresh);
+			   PRINT_FIELD_U(", ", pinfo, pdi_tstamp);
+			   printf(", pdi_flags=PDI_RUNNING}"));
+
+	const struct packet_diag_mclist dml[] = {
+		{
+			.pdmc_index = ifindex_lo(),
+			.pdmc_count = 0xabcdaefc,
+			.pdmc_type = 0xcdaf,
+			.pdmc_alen = 4,
+			.pdmc_addr = "1234"
+		},
+		{
+			.pdmc_index = ifindex_lo(),
+			.pdmc_count = 0xdaefeafc,
+			.pdmc_type = 0xadef,
+			.pdmc_alen = 4,
+			.pdmc_addr = "5678"
+		}
+	};
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_packet_diag_msg, print_packet_diag_msg,
+			  PACKET_DIAG_MCLIST, pattern, dml,
+			  print_packet_diag_mclist);
+
+	static const struct packet_diag_ring pdr = {
+		.pdr_block_size = 0xabcdafed,
+		.pdr_block_nr = 0xbcadefae,
+		.pdr_frame_size = 0xcabdfeac,
+		.pdr_frame_nr = 0xdeaeadef,
+		.pdr_retire_tmo = 0xedbafeac,
+		.pdr_sizeof_priv = 0xfeadeacd,
+		.pdr_features = 0xadebadea
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_packet_diag_msg, print_packet_diag_msg,
+			   PACKET_DIAG_RX_RING, pattern, pdr,
+			   PRINT_FIELD_U("{", pdr, pdr_block_size);
+			   PRINT_FIELD_U(", ", pdr, pdr_block_nr);
+			   PRINT_FIELD_U(", ", pdr, pdr_frame_size);
+			   PRINT_FIELD_U(", ", pdr, pdr_frame_nr);
+			   PRINT_FIELD_U(", ", pdr, pdr_retire_tmo);
+			   PRINT_FIELD_U(", ", pdr, pdr_sizeof_priv);
+			   PRINT_FIELD_U(", ", pdr, pdr_features);
+			   printf("}"));
+
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_packet_diag_msg, print_packet_diag_msg,
+			  PACKET_DIAG_FILTER, pattern, filter,
+			  print_sock_filter);
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
diff --git a/tests/nlattr_packet_diag_msg.gen.test b/tests/nlattr_packet_diag_msg.gen.test
new file mode 100755
index 0000000..6af8749
--- /dev/null
+++ b/tests/nlattr_packet_diag_msg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_packet_diag_msg +netlink_sock_diag-v.sh); do not edit.
+. "${srcdir=.}/netlink_sock_diag-v.sh"
diff --git a/tests/nlattr_rtgenmsg.c b/tests/nlattr_rtgenmsg.c
new file mode 100644
index 0000000..ceb061d
--- /dev/null
+++ b/tests/nlattr_rtgenmsg.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "netlink.h"
+#include <linux/rtnetlink.h>
+
+#ifdef RTM_GETNSID
+
+# include "test_nlattr.h"
+
+static void
+init_rtgenmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETNSID,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct rtgenmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct rtgenmsg, msg,
+		.rtgen_family = AF_UNIX
+	);
+}
+
+static void
+print_rtgenmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETNSID, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {rtgen_family=AF_UNIX}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct rtgenmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* NETNSA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_rtgenmsg, print_rtgenmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("RTM_GETNSID")
+
+#endif
diff --git a/tests/nlattr_rtgenmsg.gen.test b/tests/nlattr_rtgenmsg.gen.test
new file mode 100755
index 0000000..0ff6d13
--- /dev/null
+++ b/tests/nlattr_rtgenmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtgenmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_rtmsg.c b/tests/nlattr_rtmsg.c
new file mode 100644
index 0000000..5f29f0c
--- /dev/null
+++ b/tests/nlattr_rtmsg.c
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "test_nlattr.h"
+#include <linux/ip.h>
+#include <linux/rtnetlink.h>
+
+#define RTA_ENCAP_TYPE 21
+#define LWTUNNEL_ENCAP_NONE 0
+
+static void
+init_rtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETROUTE,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct rtmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct rtmsg, msg,
+		.rtm_family = AF_UNIX,
+		.rtm_tos = IPTOS_LOWDELAY,
+		.rtm_table = RT_TABLE_DEFAULT,
+		.rtm_protocol = RTPROT_KERNEL,
+		.rtm_scope = RT_SCOPE_UNIVERSE,
+		.rtm_type = RTN_LOCAL,
+		.rtm_flags = RTM_F_NOTIFY
+	);
+}
+
+static void
+print_rtmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETROUTE, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {rtm_family=AF_UNIX"
+	       ", rtm_dst_len=0, rtm_src_len=0"
+	       ", rtm_tos=IPTOS_LOWDELAY"
+	       ", rtm_table=RT_TABLE_DEFAULT"
+	       ", rtm_protocol=RTPROT_KERNEL"
+	       ", rtm_scope=RT_SCOPE_UNIVERSE"
+	       ", rtm_type=RTN_LOCAL"
+	       ", rtm_flags=RTM_F_NOTIFY}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct rtmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* RTA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_rtmsg, print_rtmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    RTA_DST, 4, pattern, 4,
+		    print_quoted_hex(pattern, 4));
+
+	const uint32_t ifindex = ifindex_lo();
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_OIF, pattern, ifindex,
+			   printf(IFINDEX_LO_STR));
+
+	const uint32_t rt_class_id = RT_TABLE_DEFAULT;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_TABLE, pattern, rt_class_id,
+			   printf("RT_TABLE_DEFAULT"));
+
+	struct nlattr nla = {
+		.nla_type = RTAX_LOCK,
+		.nla_len = sizeof(nla)
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_METRICS, pattern, nla,
+			   printf("{nla_len=%u, nla_type=RTAX_LOCK}",
+				  nla.nla_len));
+	struct rtnexthop nh = {
+		.rtnh_len = sizeof(nh) - 1,
+		.rtnh_flags = RTNH_F_DEAD,
+		.rtnh_hops = 0xab,
+		.rtnh_ifindex = ifindex_lo()
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_MULTIPATH, pattern, nh,
+			   printf("{rtnh_len=%u, rtnh_flags=RTNH_F_DEAD"
+				  ", rtnh_hops=%u"
+				  ", rtnh_ifindex=" IFINDEX_LO_STR "}",
+				  nh.rtnh_len, nh.rtnh_hops));
+
+	char buf[RTNH_ALIGN(sizeof(nh)) + sizeof(nla)];
+	nh.rtnh_len = sizeof(buf);
+	nla.nla_type = RTA_DST;
+	memcpy(buf, &nh, sizeof(nh));
+	memcpy(buf + RTNH_ALIGN(sizeof(nh)), &nla, sizeof(nla));
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    RTA_MULTIPATH, sizeof(buf), buf, sizeof(buf),
+		    printf("{rtnh_len=%u, rtnh_flags=RTNH_F_DEAD"
+			   ", rtnh_hops=%u, rtnh_ifindex=" IFINDEX_LO_STR "}"
+			   ", {nla_len=%u, nla_type=RTA_DST}",
+			   nh.rtnh_len, nh.rtnh_hops, nla.nla_len));
+
+	static const struct rta_cacheinfo ci = {
+		.rta_clntref = 0xabcdefab,
+		.rta_lastuse = 0xbdadaedc,
+		.rta_expires = 0xcdadebad,
+		.rta_error = 0xdaedadeb,
+		.rta_used = 0xedfabdad,
+		.rta_id = 0xfeadbcda,
+		.rta_ts = 0xacdbaded,
+		.rta_tsage = 0xbadeadef
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_CACHEINFO, pattern, ci,
+			   PRINT_FIELD_U("{", ci, rta_clntref);
+			   PRINT_FIELD_U(", ", ci, rta_lastuse);
+			   PRINT_FIELD_U(", ", ci, rta_expires);
+			   PRINT_FIELD_U(", ", ci, rta_error);
+			   PRINT_FIELD_U(", ", ci, rta_used);
+			   PRINT_FIELD_X(", ", ci, rta_id);
+			   PRINT_FIELD_U(", ", ci, rta_ts);
+			   PRINT_FIELD_U(", ", ci, rta_tsage);
+			   printf("}"));
+
+#ifdef HAVE_STRUCT_RTA_MFC_STATS
+	static const struct rta_mfc_stats mfcs = {
+		.mfcs_packets = 0xadcdedfdadefadcd,
+		.mfcs_bytes = 0xbaedadedcdedadbd,
+		.mfcs_wrong_if = 0xcddeabeedaedabfa
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_MFC_STATS, pattern, mfcs,
+			   PRINT_FIELD_U("{", mfcs, mfcs_packets);
+			   PRINT_FIELD_U(", ", mfcs, mfcs_bytes);
+			   PRINT_FIELD_U(", ", mfcs, mfcs_wrong_if);
+			   printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_RTVIA
+	static const struct rtvia via = {
+		.rtvia_family = AF_INET
+	};
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_VIA, pattern, via,
+			   printf("{rtvia_family=AF_INET}"));
+
+	static const char address4[] = "12.34.56.78";
+	struct in_addr a4 = {
+		.s_addr = inet_addr(address4)
+	};
+	char rtviabuf[sizeof(via) + sizeof(a4)];
+	memcpy(rtviabuf, &via, sizeof(via));
+	memcpy(rtviabuf + sizeof(via), &a4, sizeof(a4));
+
+	TEST_NLATTR(fd, nlh0, hdrlen,
+		    init_rtmsg, print_rtmsg,
+		    RTA_VIA, sizeof(rtviabuf), rtviabuf, sizeof(rtviabuf),
+		    printf("{rtvia_family=AF_INET"
+			   ", rtvia_addr=inet_addr(\"%s\")}", address4));
+#endif
+
+	const uint16_t encap_type = LWTUNNEL_ENCAP_NONE;
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   RTA_ENCAP_TYPE, pattern, encap_type,
+			   printf("LWTUNNEL_ENCAP_NONE"));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_rtmsg.gen.test b/tests/nlattr_rtmsg.gen.test
new file mode 100755
index 0000000..5525143
--- /dev/null
+++ b/tests/nlattr_rtmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_smc_diag_msg.c b/tests/nlattr_smc_diag_msg.c
new file mode 100644
index 0000000..a06ad62
--- /dev/null
+++ b/tests/nlattr_smc_diag_msg.c
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <sys/socket.h>
+
+#ifdef AF_SMC
+
+# include <stdio.h>
+# include <string.h>
+# include <stdint.h>
+# include <arpa/inet.h>
+# include "test_nlattr.h"
+# include <linux/rtnetlink.h>
+# include <linux/smc_diag.h>
+# include <linux/sock_diag.h>
+
+# ifndef SMC_CLNT
+#  define SMC_CLNT 0
+# endif
+# ifndef SMC_ACTIVE
+#  define SMC_ACTIVE 1
+# endif
+
+static const char address[] = "12.34.56.78";
+
+static void
+init_smc_diag_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = SOCK_DIAG_BY_FAMILY,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct smc_diag_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct smc_diag_msg, msg,
+		.diag_family = AF_SMC,
+		.diag_state = SMC_ACTIVE
+	);
+
+	if (!inet_pton(AF_INET, address, msg->id.idiag_src) ||
+	    !inet_pton(AF_INET, address, msg->id.idiag_dst))
+		perror_msg_and_skip("inet_pton");
+}
+
+static void
+print_smc_diag_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=SOCK_DIAG_BY_FAMILY"
+	       ", flags=NLM_F_DUMP, seq=0, pid=0}"
+	       ", {diag_family=AF_SMC, diag_state=SMC_ACTIVE"
+	       ", diag_fallback=0, diag_shutdown=0"
+	       ", id={idiag_sport=htons(0), idiag_dport=htons(0)"
+	       ", idiag_src=inet_addr(\"%s\")"
+	       ", idiag_dst=inet_addr(\"%s\")"
+	       ", idiag_if=0, idiag_cookie=[0, 0]}"
+	       ", diag_uid=0, diag_inode=0}",
+	       msg_len, address, address);
+}
+
+#define PRINT_FIELD_SMC_DIAG_CURSOR(prefix_, where_, field_)		\
+	do {								\
+		printf("%s%s=", (prefix_), #field_);			\
+		PRINT_FIELD_U("{", (where_).field_, reserved);		\
+		PRINT_FIELD_U(", ", (where_).field_, wrap);		\
+		PRINT_FIELD_U(", ", (where_).field_, count);		\
+		printf("}");						\
+	} while (0)
+
+int main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct smc_diag_msg);
+	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	static const struct smc_diag_conninfo cinfo = {
+		.token = 0xabcdefac,
+		.sndbuf_size = 0xbcdaefad,
+		.rmbe_size = 0xcdbaefab,
+		.peer_rmbe_size = 0xdbcdedaf,
+		.rx_prod = {
+			.reserved = 0xabc1,
+			.wrap = 0xbca1,
+			.count = 0xcdedbad1
+		},
+		.rx_cons = {
+			.reserved = 0xabc2,
+			.wrap = 0xbca2,
+			.count = 0xcdedbad2
+		},
+		.tx_prod = {
+			.reserved = 0xabc3,
+			.wrap = 0xbca3,
+			.count = 0xcdedbad3
+		},
+		.tx_cons = {
+			.reserved = 0xabc4,
+			.wrap = 0xbca4,
+			.count = 0xcdedbad4
+		},
+		.rx_prod_flags = 0xff,
+		.rx_conn_state_flags = 0xff,
+		.tx_prod_flags = 0xff,
+		.tx_conn_state_flags = 0xff,
+		.tx_prep = {
+			.reserved = 0xabc5,
+			.wrap = 0xbca5,
+			.count = 0xcdedbad5
+		},
+		.tx_sent = {
+			.reserved = 0xabc6,
+			.wrap = 0xbca6,
+			.count = 0xcdedbad6
+		},
+		.tx_fin = {
+			.reserved = 0xabc7,
+			.wrap = 0xbca7,
+			.count = 0xcdedbad7
+		}
+	};
+
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_smc_diag_msg, print_smc_diag_msg,
+			   SMC_DIAG_CONNINFO, pattern, cinfo,
+			   PRINT_FIELD_U("{", cinfo, token);
+			   PRINT_FIELD_U(", ", cinfo, sndbuf_size);
+			   PRINT_FIELD_U(", ", cinfo, rmbe_size);
+			   PRINT_FIELD_U(", ", cinfo, peer_rmbe_size);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, rx_prod);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, rx_cons);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_prod);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_cons);
+			   printf(", rx_prod_flags=0xff");
+			   printf(", rx_conn_state_flags=0xff");
+			   printf(", tx_prod_flags=0xff");
+			   printf(", tx_conn_state_flags=0xff");
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_prep);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_sent);
+			   PRINT_FIELD_SMC_DIAG_CURSOR(", ", cinfo, tx_fin);
+			   printf("}"));
+
+	static const struct smc_diag_lgrinfo linfo = {
+		.lnk[0] = {
+			.link_id = 0xaf,
+			.ibport = 0xfa,
+			.ibname = "123",
+			.gid = "456",
+			.peer_gid = "789"
+		},
+		.role = SMC_CLNT
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_smc_diag_msg, print_smc_diag_msg,
+			   SMC_DIAG_LGRINFO, pattern, linfo,
+			   PRINT_FIELD_U("{lnk[0]={", linfo.lnk[0], link_id);
+			   printf(", ibname=\"%s\"", linfo.lnk[0].ibname);
+			   PRINT_FIELD_U(", ", linfo.lnk[0], ibport);
+			   printf(", gid=\"%s\"", linfo.lnk[0].gid);
+			   printf(", peer_gid=\"%s\"}", linfo.lnk[0].peer_gid);
+			   printf(", role=SMC_CLNT}"));
+
+	printf("+++ exited with 0 +++\n");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("AF_SMC")
+
+#endif
diff --git a/tests/nlattr_smc_diag_msg.gen.test b/tests/nlattr_smc_diag_msg.gen.test
new file mode 100755
index 0000000..3e6407e
--- /dev/null
+++ b/tests/nlattr_smc_diag_msg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_smc_diag_msg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_tcamsg.c b/tests/nlattr_tcamsg.c
new file mode 100644
index 0000000..7f61153
--- /dev/null
+++ b/tests/nlattr_tcamsg.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/rtnetlink.h>
+
+static void
+init_tcamsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETACTION,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcamsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcamsg, msg,
+		.tca_family = AF_INET
+	);
+}
+
+static void
+print_tcamsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETACTION, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tca_family=AF_INET}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct tcamsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* TCA_ACT_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_tcamsg, print_tcamsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_tcamsg.gen.test b/tests/nlattr_tcamsg.gen.test
new file mode 100755
index 0000000..7c30207
--- /dev/null
+++ b/tests/nlattr_tcamsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcamsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_tcmsg.c b/tests/nlattr_tcmsg.c
new file mode 100644
index 0000000..00b7ae4
--- /dev/null
+++ b/tests/nlattr_tcmsg.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/rtnetlink.h>
+
+static void
+init_tcmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETQDISC,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcmsg, msg,
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo()
+	);
+
+}
+
+static void
+print_tcmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETQDISC, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tcm_family=AF_UNIX"
+	       ", tcm_ifindex=" IFINDEX_LO_STR
+	       ", tcm_handle=0, tcm_parent=0, tcm_info=0}",
+	       msg_len);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct tcmsg);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* TCA_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0, hdrlen,
+		     init_tcmsg, print_tcmsg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_tcmsg.gen.test b/tests/nlattr_tcmsg.gen.test
new file mode 100755
index 0000000..f5bf7a9
--- /dev/null
+++ b/tests/nlattr_tcmsg.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcmsg +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nsyscalls.c b/tests/nsyscalls.c
index d6b989c..29f444a 100644
--- a/tests/nsyscalls.c
+++ b/tests/nsyscalls.c
@@ -35,31 +35,14 @@
 #include <unistd.h>
 #include <asm/unistd.h>
 
-#define TD 0
-#define TF 0
-#define TI 0
-#define TN 0
-#define TP 0
-#define TS 0
-#define TM 0
-#define TST 0
-#define TLST 0
-#define TFST 0
-#define TSTA 0
-#define TSF 0
-#define TFSF 0
-#define TSFA 0
-#define NF 0
-#define MA 0
-#define SI 0
-#define SE 0
-#define CST 0
-#define SEN(arg) 0, 0
+#include "sysent_shorthand_defs.h"
 
 static const struct_sysent syscallent[] = {
 #include "syscallent.h"
 };
 
+#include "sysent_shorthand_undefs.h"
+
 #if defined __X32_SYSCALL_BIT && defined __NR_read \
  && (__X32_SYSCALL_BIT & __NR_read) != 0
 # define SYSCALL_BIT __X32_SYSCALL_BIT
diff --git a/tests/options-syntax.test b/tests/options-syntax.test
index 7cfc579..b4d9be7 100755
--- a/tests/options-syntax.test
+++ b/tests/options-syntax.test
@@ -28,57 +28,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-. "${srcdir=.}/init.sh"
-
-check_exit_status_and_stderr()
-{
-	$STRACE "$@" 2> "$LOG" &&
-		dump_log_and_fail_with \
-			"strace $* failed to handle the error properly"
-	match_diff "$LOG" "$EXP" ||
-		dump_log_and_fail_with \
-			"strace $* failed to print expected diagnostics"
-}
-
-check_exit_status_and_stderr_using_grep()
-{
-	$STRACE "$@" 2> "$LOG" &&
-		dump_log_and_fail_with \
-			"strace $* failed to handle the error properly"
-	match_grep "$LOG" "$EXP" ||
-		dump_log_and_fail_with \
-			"strace $* failed to print expected diagnostics"
-}
-
-strace_exp="${STRACE##* }"
-
-check_e()
-{
-	local pattern="$1"; shift
-	cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-__EOF__
-	check_exit_status_and_stderr "$@"
-}
-
-check_e_using_grep()
-{
-	local pattern="$1"; shift
-	cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-__EOF__
-	check_exit_status_and_stderr_using_grep "$@"
-}
-
-check_h()
-{
-	local pattern="$1"; shift
-	cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-Try '$strace_exp -h' for more information.
-__EOF__
-	check_exit_status_and_stderr "$@"
-}
+. "${srcdir=.}/syntax.sh"
 
 check_e "Invalid process id: '0'" -p 0
 check_e "Invalid process id: '-42'" -p -42
diff --git a/tests/poll.c b/tests/poll.c
index af66e53..2bf8c1a 100644
--- a/tests/poll.c
+++ b/tests/poll.c
@@ -2,6 +2,7 @@
  * This file is part of poll strace test.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/prctl-seccomp-filter-v.c b/tests/prctl-seccomp-filter-v.c
index 69316fb..cfd5d3d 100644
--- a/tests/prctl-seccomp-filter-v.c
+++ b/tests/prctl-seccomp-filter-v.c
@@ -2,6 +2,7 @@
  * Check verbose decoding of prctl PR_SET_SECCOMP SECCOMP_MODE_FILTER.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,9 +41,7 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-#endif
+#include <linux/filter.h>
 
 #if defined HAVE_PRCTL \
  && defined PR_SET_NO_NEW_PRIVS \
diff --git a/tests/preadv-pwritev.c b/tests/preadv-pwritev.c
index ddbd47f..44ed23a 100644
--- a/tests/preadv-pwritev.c
+++ b/tests/preadv-pwritev.c
@@ -2,6 +2,7 @@
  * Check decoding of preadv and pwritev syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/print_quoted_string.c b/tests/print_quoted_string.c
index 732fe3d..2894e49 100644
--- a/tests/print_quoted_string.c
+++ b/tests/print_quoted_string.c
@@ -16,11 +16,24 @@
 }
 
 void
-print_quoted_memory(const char *instr, const size_t len)
+print_quoted_cstring(const char *instr, const size_t size)
+{
+	const size_t len = strnlen(instr, size);
+	if (len < size) {
+		print_quoted_memory(instr, len);
+	} else {
+		print_quoted_memory(instr, size - 1);
+		printf("...");
+	}
+}
+
+void
+print_quoted_memory(const void *const instr, const size_t len)
 {
 	const unsigned char *str = (const unsigned char *) instr;
 	size_t i;
 
+	putchar('"');
 	for (i = 0; i < len; ++i) {
 		const int c = str[i];
 		switch (c) {
@@ -72,4 +85,17 @@
 		}
 	}
 
+	putchar('"');
+}
+
+void
+print_quoted_hex(const void *const instr, const size_t len)
+{
+	const unsigned char *str = instr;
+	size_t i;
+
+	printf("\"");
+	for (i = 0; i < len; i++)
+		printf("\\x%02x", str[i]);
+	printf("\"");
 }
diff --git a/tests/printpath-umovestr-legacy.test b/tests/printpath-umovestr-legacy.test
new file mode 100755
index 0000000..15f57ed
--- /dev/null
+++ b/tests/printpath-umovestr-legacy.test
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# Force legacy printpath/umovestr using process_vm_readv fault injection.
+#
+# Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+> "$LOG" || fail_ "failed to write $LOG"
+fault_args='-qq -esignal=none -etrace=process_vm_readv -efault=process_vm_readv'
+args='../printpath-umovestr-peekdata'
+
+$STRACE -o "$LOG" $fault_args $args > /dev/null || {
+	rc=$?
+	if [ $rc -eq 77 ]; then
+		skip_ "$fault_args $args exited with code 77"
+	else
+		fail_ "$fault_args $args failed with code $rc"
+	fi
+}
+
+> "$LOG" || fail_ "failed to write $LOG"
+args="-a11 -e signal=none -e trace=chdir $args skip-process_vm_readv-check"
+
+$STRACE -o /dev/null $fault_args \
+	$STRACE -o "$LOG" $args > "$EXP" ||
+	dump_log_and_fail_with "$STRACE $args failed with code $?"
+
+match_diff "$LOG" "$EXP"
diff --git a/tests/printpath-umovestr-peekdata.c b/tests/printpath-umovestr-peekdata.c
new file mode 100644
index 0000000..82f1035
--- /dev/null
+++ b/tests/printpath-umovestr-peekdata.c
@@ -0,0 +1,47 @@
+/*
+ * Test PTRACE_PEEKDATA-based printpath/umovestr.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac < 2 && test_process_vm_readv())
+		error_msg_and_skip("process_vm_readv is available");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printpath(sizeof(long) * 4);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/printpath-umovestr-peekdata.gen.test b/tests/printpath-umovestr-peekdata.gen.test
new file mode 100755
index 0000000..6fe65ee
--- /dev/null
+++ b/tests/printpath-umovestr-peekdata.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printpath-umovestr-peekdata -a11 -e signal=none -e trace=chdir); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e signal=none -e trace=chdir
diff --git a/tests/printpath-umovestr-undumpable.c b/tests/printpath-umovestr-undumpable.c
new file mode 100644
index 0000000..fba8f24
--- /dev/null
+++ b/tests/printpath-umovestr-undumpable.c
@@ -0,0 +1,71 @@
+/*
+ * Force legacy printpath/umovestr using PR_SET_DUMPABLE.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_PRCTL
+# include <sys/prctl.h>
+#endif
+
+#if defined HAVE_PRCTL && defined PR_SET_DUMPABLE
+
+# include <stdio.h>
+# include <unistd.h>
+
+# include "test_ucopy.h"
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	/*
+	 * Clearing dumpable flag disallows process_vm_readv.
+	 * If the kernel does not contain commit
+	 * 84d77d3f06e7e8dea057d10e8ec77ad71f721be3, then
+	 * PTRACE_PEEKDATA remains allowed.
+	 */
+	if (prctl(PR_SET_DUMPABLE, 0))
+		perror_msg_and_skip("PR_SET_DUMPABLE 0");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printpath(sizeof(long) * 4);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_SET_DUMPABLE")
+
+#endif
diff --git a/tests/printpath-umovestr-undumpable.gen.test b/tests/printpath-umovestr-undumpable.gen.test
new file mode 100755
index 0000000..cca6442
--- /dev/null
+++ b/tests/printpath-umovestr-undumpable.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printpath-umovestr-undumpable -a11 -e signal=none -e trace=chdir); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e signal=none -e trace=chdir
diff --git a/tests/printpath-umovestr.c b/tests/printpath-umovestr.c
new file mode 100644
index 0000000..a7251e5
--- /dev/null
+++ b/tests/printpath-umovestr.c
@@ -0,0 +1,45 @@
+/*
+ * Test regular printpath/umovestr.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+#include <sys/param.h>
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	test_printpath(PATH_MAX);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/printpath-umovestr.gen.test b/tests/printpath-umovestr.gen.test
new file mode 100755
index 0000000..c827a7d
--- /dev/null
+++ b/tests/printpath-umovestr.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printpath-umovestr -a11 -e signal=none -e trace=chdir); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e signal=none -e trace=chdir
diff --git a/tests/printstr.c b/tests/printstr.c
index 8e22681..030c1e4 100644
--- a/tests/printstr.c
+++ b/tests/printstr.c
@@ -2,6 +2,7 @@
  * Check decoding of non-NUL-terminated strings when len == -1.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/printstrn-umoven-legacy.test b/tests/printstrn-umoven-legacy.test
new file mode 100755
index 0000000..3b2aa26
--- /dev/null
+++ b/tests/printstrn-umoven-legacy.test
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# Force legacy printstrn/umoven using process_vm_readv fault injection.
+#
+# Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+> "$LOG" || fail_ "failed to write $LOG"
+fault_args='-qq -esignal=none -etrace=process_vm_readv -efault=process_vm_readv'
+args='../printstrn-umoven-peekdata'
+
+$STRACE -o "$LOG" $fault_args $args > /dev/null || {
+	rc=$?
+	if [ $rc -eq 77 ]; then
+		skip_ "$fault_args $args exited with code 77"
+	else
+		fail_ "$fault_args $args failed with code $rc"
+	fi
+}
+
+> "$LOG" || fail_ "failed to write $LOG"
+args="-e signal=none -e trace=add_key $args skip-process_vm_readv-check"
+
+$STRACE -o /dev/null $fault_args \
+	$STRACE -o "$LOG" $args > "$EXP" ||
+	dump_log_and_fail_with "$STRACE $args failed with code $?"
+
+match_diff "$LOG" "$EXP"
diff --git a/tests/printstrn-umoven-peekdata.c b/tests/printstrn-umoven-peekdata.c
new file mode 100644
index 0000000..92a6e6a
--- /dev/null
+++ b/tests/printstrn-umoven-peekdata.c
@@ -0,0 +1,47 @@
+/*
+ * Test PTRACE_PEEKDATA-based printstrn/umoven.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac < 2 && test_process_vm_readv())
+		error_msg_and_skip("process_vm_readv is available");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printstrn(DEFAULT_STRLEN);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/printstrn-umoven-peekdata.gen.test b/tests/printstrn-umoven-peekdata.gen.test
new file mode 100755
index 0000000..61f648a
--- /dev/null
+++ b/tests/printstrn-umoven-peekdata.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printstrn-umoven-peekdata -e signal=none -e trace=add_key); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e signal=none -e trace=add_key
diff --git a/tests/printstrn-umoven-undumpable.c b/tests/printstrn-umoven-undumpable.c
new file mode 100644
index 0000000..b23e220
--- /dev/null
+++ b/tests/printstrn-umoven-undumpable.c
@@ -0,0 +1,71 @@
+/*
+ * Force legacy printpath/umovestr using PR_SET_DUMPABLE.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_PRCTL
+# include <sys/prctl.h>
+#endif
+
+#if defined HAVE_PRCTL && defined PR_SET_DUMPABLE
+
+# include <stdio.h>
+# include <unistd.h>
+
+# include "test_ucopy.h"
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	/*
+	 * Clearing dumpable flag disallows process_vm_readv.
+	 * If the kernel does not contain commit
+	 * 84d77d3f06e7e8dea057d10e8ec77ad71f721be3, then
+	 * PTRACE_PEEKDATA remains allowed.
+	 */
+	if (prctl(PR_SET_DUMPABLE, 0))
+		perror_msg_and_skip("PR_SET_DUMPABLE 0");
+
+	if (!test_ptrace_peekdata())
+		perror_msg_and_skip("PTRACE_PEEKDATA");
+
+	test_printstrn(DEFAULT_STRLEN);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_SET_DUMPABLE")
+
+#endif
diff --git a/tests/printstrn-umoven-undumpable.gen.test b/tests/printstrn-umoven-undumpable.gen.test
new file mode 100755
index 0000000..1dee526
--- /dev/null
+++ b/tests/printstrn-umoven-undumpable.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printstrn-umoven-undumpable -e signal=none -e trace=add_key); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e signal=none -e trace=add_key
diff --git a/tests/printstrn-umoven.c b/tests/printstrn-umoven.c
new file mode 100644
index 0000000..d63f7c5
--- /dev/null
+++ b/tests/printstrn-umoven.c
@@ -0,0 +1,44 @@
+/*
+ * Test regular printstrn/umoven.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(void)
+{
+	if (!test_process_vm_readv())
+		perror_msg_and_skip("process_vm_readv");
+
+	test_printstrn(4096);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/printstrn-umoven.gen.test b/tests/printstrn-umoven.gen.test
new file mode 100755
index 0000000..4187238
--- /dev/null
+++ b/tests/printstrn-umoven.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (printstrn-umoven -s4096 -e signal=none -e trace=add_key); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -s4096 -e signal=none -e trace=add_key
diff --git a/tests/process_vm_readv_writev.c b/tests/process_vm_readv_writev.c
index c0f9c31..5ee801b 100644
--- a/tests/process_vm_readv_writev.c
+++ b/tests/process_vm_readv_writev.c
@@ -2,6 +2,7 @@
  * Check decoding of process_vm_readv/process_vm_writev syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/pure_executables.am b/tests/pure_executables.am
index 8563488..9dc532a 100644
--- a/tests/pure_executables.am
+++ b/tests/pure_executables.am
@@ -10,6 +10,7 @@
   aio \
   alarm \
   bpf \
+  bpf-v \
   brk \
   btrfs \
   caps \
@@ -50,6 +51,7 @@
   fcntl \
   fcntl64 \
   fdatasync \
+  fflush \
   file_handle \
   file_ioctl \
   finit_module \
@@ -93,6 +95,7 @@
   getuid \
   getuid32 \
   getxxid \
+  group_req \
   inet-cmsg \
   init_module \
   inotify \
@@ -167,7 +170,9 @@
   net-yy-netlink \
   net-yy-unix \
   netlink_audit \
+  netlink_crypto \
   netlink_generic \
+  netlink_kobject_uevent \
   netlink_netfilter \
   netlink_protocol \
   netlink_route \
@@ -176,8 +181,30 @@
   netlink_xfrm \
   newfstatat \
   nlattr \
+  nlattr_crypto_user_alg \
+  nlattr_br_port_msg \
+  nlattr_dcbmsg \
+  nlattr_fib_rule_hdr \
+  nlattr_ifaddrlblmsg \
+  nlattr_ifaddrmsg \
+  nlattr_ifinfomsg \
+  nlattr_ifla_brport \
+  nlattr_ifla_port \
+  nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
+  nlattr_inet_diag_req_compat \
+  nlattr_inet_diag_req_v2 \
+  nlattr_ndmsg \
+  nlattr_ndtmsg \
+  nlattr_netconfmsg \
   nlattr_netlink_diag_msg \
+  nlattr_nlmsgerr \
+  nlattr_packet_diag_msg \
+  nlattr_rtgenmsg \
+  nlattr_rtmsg \
+  nlattr_smc_diag_msg \
+  nlattr_tcamsg \
+  nlattr_tcmsg \
   nlattr_unix_diag_msg \
   old_mmap \
   oldfstat \
@@ -209,7 +236,13 @@
   preadv \
   preadv-pwritev \
   preadv2-pwritev2 \
+  printpath-umovestr \
+  printpath-umovestr-peekdata \
+  printpath-umovestr-undumpable \
   printstr \
+  printstrn-umoven \
+  printstrn-umoven-peekdata \
+  printstrn-umoven-undumpable \
   prlimit64 \
   process_vm_readv \
   process_vm_writev \
@@ -288,6 +321,9 @@
   sigprocmask \
   sigreturn \
   sigsuspend \
+  so_linger \
+  so_peercred \
+  sock_filter-v \
   socketcall \
   splice \
   stat \
diff --git a/tests/pure_executables.list b/tests/pure_executables.list
index 033208e..dade57b 100755
--- a/tests/pure_executables.list
+++ b/tests/pure_executables.list
@@ -9,6 +9,7 @@
 aio
 alarm
 bpf
+bpf-v
 brk
 btrfs
 caps
@@ -49,6 +50,7 @@
 fcntl
 fcntl64
 fdatasync
+fflush
 file_handle
 file_ioctl
 finit_module
@@ -92,6 +94,7 @@
 getuid
 getuid32
 getxxid
+group_req
 inet-cmsg
 init_module
 inotify
@@ -166,7 +169,9 @@
 net-yy-netlink
 net-yy-unix
 netlink_audit
+netlink_crypto
 netlink_generic
+netlink_kobject_uevent
 netlink_netfilter
 netlink_protocol
 netlink_route
@@ -175,8 +180,30 @@
 netlink_xfrm
 newfstatat
 nlattr
+nlattr_crypto_user_alg
+nlattr_br_port_msg
+nlattr_dcbmsg
+nlattr_fib_rule_hdr
+nlattr_ifaddrlblmsg
+nlattr_ifaddrmsg
+nlattr_ifinfomsg
+nlattr_ifla_brport
+nlattr_ifla_port
+nlattr_ifla_xdp
 nlattr_inet_diag_msg
+nlattr_inet_diag_req_compat
+nlattr_inet_diag_req_v2
+nlattr_ndmsg
+nlattr_ndtmsg
+nlattr_netconfmsg
 nlattr_netlink_diag_msg
+nlattr_nlmsgerr
+nlattr_packet_diag_msg
+nlattr_rtgenmsg
+nlattr_rtmsg
+nlattr_smc_diag_msg
+nlattr_tcamsg
+nlattr_tcmsg
 nlattr_unix_diag_msg
 old_mmap
 oldfstat
@@ -208,7 +235,13 @@
 preadv
 preadv-pwritev
 preadv2-pwritev2
+printpath-umovestr
+printpath-umovestr-peekdata
+printpath-umovestr-undumpable
 printstr
+printstrn-umoven
+printstrn-umoven-peekdata
+printstrn-umoven-undumpable
 prlimit64
 process_vm_readv
 process_vm_writev
@@ -287,6 +320,9 @@
 sigprocmask
 sigreturn
 sigsuspend
+so_linger
+so_peercred
+sock_filter-v
 socketcall
 splice
 stat
diff --git a/tests/qual_inject-syntax.test b/tests/qual_inject-syntax.test
index a9e44d7..7aa6180 100755
--- a/tests/qual_inject-syntax.test
+++ b/tests/qual_inject-syntax.test
@@ -103,6 +103,8 @@
 	   chdir:retval=-1 \
 	   chdir:signal=0 \
 	   chdir:signal=129 \
+	   chdir:signal=1:signal=2 \
+	   chdir:signal=1:retval=0:signal=2 \
 	   chdir:retval=0:retval=1 \
 	   chdir:error=1:error=2 \
 	   chdir:retval=0:error=1 \
diff --git a/tests/quotactl.h b/tests/quotactl.h
index d3cf53b..352f927 100644
--- a/tests/quotactl.h
+++ b/tests/quotactl.h
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/readv.c b/tests/readv.c
index 93f0760..8430ca5 100644
--- a/tests/readv.c
+++ b/tests/readv.c
@@ -2,6 +2,7 @@
  * Check decoding of readv and writev syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/recvmsg.c b/tests/recvmsg.c
index 2d55d55..d2a67d4 100644
--- a/tests/recvmsg.c
+++ b/tests/recvmsg.c
@@ -2,6 +2,7 @@
  * Check decoding of recvmsg and sendmsg syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/request_key.c b/tests/request_key.c
index 03c7a42..866fe76 100644
--- a/tests/request_key.c
+++ b/tests/request_key.c
@@ -2,6 +2,7 @@
  * Check decoding of request_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/rt_sigaction.awk b/tests/rt_sigaction.awk
index 9c3a9ed..9fb3ed5 100644
--- a/tests/rt_sigaction.awk
+++ b/tests/rt_sigaction.awk
@@ -2,6 +2,7 @@
 #
 # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
 # Copyright (c) 2016 Elvira Khabirova <lineprinter0@gmail.com>
+# Copyright (c) 2016-2017 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
diff --git a/tests/rt_sigaction.c b/tests/rt_sigaction.c
index 1c034ff..9c367b2 100644
--- a/tests/rt_sigaction.c
+++ b/tests/rt_sigaction.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/run.sh b/tests/run.sh
index 02d9912..d1b796c 100755
--- a/tests/run.sh
+++ b/tests/run.sh
@@ -5,7 +5,7 @@
 $STRACE -V > /dev/null ||
 	framework_failure_ "$STRACE is not available"
 
-TIMEOUT="timeout -s 9 $TIMEOUT_DURATION"
+TIMEOUT="timeout -k 5 -s XCPU $TIMEOUT_DURATION"
 $TIMEOUT true > /dev/null 2>&1 ||
 	TIMEOUT=
 
diff --git a/tests/scno_tampering.sh b/tests/scno_tampering.sh
index 094175e..282f2f3 100755
--- a/tests/scno_tampering.sh
+++ b/tests/scno_tampering.sh
@@ -51,9 +51,16 @@
 	mips)
 		# Only the native ABI is supported by the kernel properly, see
 		# https://sourceforge.net/p/strace/mailman/message/35587571/
+		msg_prefix="mips $MIPS_ABI scno tampering does not work"
 		uname_m="$(uname -m)"
 		case "$MIPS_ABI:$uname_m" in
-			o32:mips|n64:mips64) ;;
-			*) skip_ "$MIPS_ABI scno tampering does not work on $uname_m yet" ;;
+			n64:mips64) ;;
+			o32:mips)
+				# is it really mips32?
+				if ../is_linux_mips_n64; then
+					skip_ "$msg_prefix on mips n64 yet"
+				fi
+				;;
+			*) skip_ "$msg_prefix on $uname_m yet" ;;
 		esac ;;
 esac
diff --git a/tests/seccomp-filter-v.c b/tests/seccomp-filter-v.c
index f65be7d..e419c6c 100644
--- a/tests/seccomp-filter-v.c
+++ b/tests/seccomp-filter-v.c
@@ -42,9 +42,7 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-#endif
+#include <linux/filter.h>
 
 #if defined __NR_seccomp \
  && defined PR_SET_NO_NEW_PRIVS \
@@ -91,10 +89,6 @@
 	SOCK_FILTER_KILL_PROCESS
 };
 
-#ifndef BPF_MAXINSNS
-# define BPF_MAXINSNS 4096
-#endif
-
 int
 main(void)
 {
diff --git a/tests/seccomp-filter.c b/tests/seccomp-filter.c
index e2bea06..6e00982 100644
--- a/tests/seccomp-filter.c
+++ b/tests/seccomp-filter.c
@@ -37,9 +37,7 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifdef HAVE_LINUX_FILTER_H
-# include <linux/filter.h>
-#endif
+#include <linux/filter.h>
 
 #if defined __NR_seccomp && defined SECCOMP_SET_MODE_FILTER
 
diff --git a/tests/sigaction.c b/tests/sigaction.c
index 7b46944..58ddda9 100644
--- a/tests/sigaction.c
+++ b/tests/sigaction.c
@@ -85,20 +85,26 @@
 }
 
 #if defined SPARC || defined SPARC64
-static const kernel_ulong_t signo =
-	(kernel_ulong_t) 0xbadc0ded00000000ULL | (unsigned int) -SIGUSR1;
+/*
+ * See arch/sparc/kernel/sys_sparc_32.c:sys_sparc_sigaction
+ * and arch/sparc/kernel/sys_sparc32.c:compat_sys_sparc_sigaction
+ */
+# define ADDR_INT ((unsigned int) -0xdefaced)
+# define SIGNO_INT ((unsigned int) -SIGUSR1)
 # define SIG_STR "-SIGUSR1"
 #else
-static const kernel_ulong_t signo =
-	(kernel_ulong_t) 0xbadc0ded00000000ULL | SIGUSR1;
+# define ADDR_INT ((unsigned int) 0xdefaced)
+# define SIGNO_INT ((unsigned int) SIGUSR1)
 # define SIG_STR "SIGUSR1"
 #endif
+static const kernel_ulong_t signo =
+	(kernel_ulong_t) 0xbadc0ded00000000ULL | SIGNO_INT;
+static const kernel_ulong_t addr =
+	(kernel_ulong_t) 0xfacefeed00000000ULL | ADDR_INT;
 
 int
 main(void)
 {
-	static const kernel_ulong_t addr =
-		(kernel_ulong_t) 0xfacefeed0defacedULL;
 	union {
 		sigset_t libc[1];
 		unsigned long old[1];
@@ -131,7 +137,7 @@
 	       (unsigned long) old_act + 2);
 
 	k_sigaction(addr, 0, 0);
-	printf("sigaction(%d, NULL, NULL) = -1 EINVAL (%m)\n", (int) addr);
+	printf("sigaction(%d, NULL, NULL) = -1 EINVAL (%m)\n", ADDR_INT);
 
 	memset(new_act, 0, sizeof(*new_act));
 
diff --git a/tests/so_linger.c b/tests/so_linger.c
new file mode 100644
index 0000000..4dc994b
--- /dev/null
+++ b/tests/so_linger.c
@@ -0,0 +1,136 @@
+/*
+ * Check decoding of SO_LINGER socket option.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <sys/socket.h>
+#include <unistd.h>
+
+static const char *errstr;
+
+static int
+get_linger(int fd, void *val, socklen_t *len)
+{
+	int rc = getsockopt(fd, SOL_SOCKET, SO_LINGER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static int
+set_linger(int fd, void *val, socklen_t len)
+{
+	int rc = setsockopt(fd, SOL_SOCKET, SO_LINGER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct linger, linger);
+	TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+        int fd = socket(AF_UNIX, SOCK_STREAM, 0);
+        if (fd < 0)
+                perror_msg_and_skip("socket AF_UNIX SOCK_STREAM");
+
+	/* classic getsockopt */
+	*len = sizeof(*linger);
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", [%d]) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger, *len, errstr);
+
+	/* classic setsockopt */
+	linger->l_onoff = -15;
+	linger->l_linger = -42;
+	set_linger(fd, linger, sizeof(*linger));
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", %d) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger,
+	       (unsigned int) sizeof(*linger), errstr);
+
+	/* setsockopt with optlen larger than necessary */
+	set_linger(fd, linger, sizeof(*linger) + 1);
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", %d) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger,
+	       (unsigned int) sizeof(*linger) + 1, errstr);
+
+	/* setsockopt with optlen < 0 - EINVAL */
+	set_linger(fd, linger, -1U);
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, %p, -1) = %s\n",
+	       fd, linger, errstr);
+
+	/* setsockopt with optlen smaller than necessary - EINVAL */
+	set_linger(fd, linger, sizeof(linger->l_onoff));
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, %p, %d) = %s\n",
+	       fd, linger, (unsigned int) sizeof(linger->l_onoff), errstr);
+
+	/* setsockopt optval EFAULT */
+	set_linger(fd, &linger->l_linger, sizeof(*linger));
+	printf("setsockopt(%d, SOL_SOCKET, SO_LINGER, %p, %d) = %s\n",
+	       fd, &linger->l_linger, (unsigned int) sizeof(*linger), errstr);
+
+	/* getsockopt with optlen larger than necessary - shortened */
+	*len = sizeof(*linger) + 1;
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d, l_linger=%d}"
+	       ", [%u->%d]) = %s\n",
+	       fd, linger->l_onoff, linger->l_linger,
+	       (unsigned int) sizeof(*linger) + 1, *len, errstr);
+
+	/* getsockopt with optlen larger than usual - truncated to l_onoff */
+	*len = sizeof(linger->l_onoff);
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, {l_onoff=%d}"
+	       ", [%d]) = %s\n",
+	       fd, linger->l_onoff, *len, errstr);
+
+	/* getsockopt with optlen larger than usual - truncated to raw */
+	*len = sizeof(*linger) - 1;
+	get_linger(fd, linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, ", fd);
+	print_quoted_hex(linger, *len);
+	printf(", [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt optval EFAULT */
+	*len = sizeof(*linger);
+	get_linger(fd, &linger->l_linger, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, %p, [%d]) = %s\n",
+	       fd, &linger->l_linger, *len, errstr);
+
+	/* getsockopt optlen EFAULT */
+	get_linger(fd, linger, len + 1);
+	printf("getsockopt(%d, SOL_SOCKET, SO_LINGER, %p, %p) = %s\n",
+	       fd, linger, len + 1, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/so_linger.gen.test b/tests/so_linger.gen.test
new file mode 100755
index 0000000..8362163
--- /dev/null
+++ b/tests/so_linger.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_linger -e trace=getsockopt,setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt,setsockopt
diff --git a/tests/so_peercred.c b/tests/so_peercred.c
new file mode 100644
index 0000000..53bf071
--- /dev/null
+++ b/tests/so_peercred.c
@@ -0,0 +1,117 @@
+/*
+ * Check decoding of SO_PEERCRED socket option.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include <unistd.h>
+
+#include "print_fields.h"
+
+static const char *errstr;
+
+static int
+get_peercred(int fd, void *val, socklen_t *len)
+{
+	int rc = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ucred, peercred);
+	TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+
+	int sv[2];
+	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sv))
+                perror_msg_and_skip("socketpair AF_UNIX SOCK_STREAM");
+
+	/* classic getsockopt */
+	*len = sizeof(*peercred);
+	get_peercred(sv[0], peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", sv[0]);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	PRINT_FIELD_UID(", ", *peercred, uid);
+	PRINT_FIELD_UID(", ", *peercred, gid);
+	printf("}, [%d]) = %s\n", *len, errstr);
+
+	int fd = socket(AF_UNIX, SOCK_STREAM, 0);
+	if (fd < 0)
+		perror_msg_and_skip("socket AF_UNIX SOCK_STREAM");
+
+	/* getsockopt with optlen larger than necessary - shortened */
+	*len = sizeof(*peercred) + 1;
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	PRINT_FIELD_UID(", ", *peercred, uid);
+	PRINT_FIELD_UID(", ", *peercred, gid);
+	printf("}, [%u->%d]) = %s\n",
+	       (unsigned int) sizeof(*peercred) + 1, *len, errstr);
+
+	/* getsockopt with optlen smaller than usual - truncated to ucred.pid */
+	*len = sizeof(peercred->pid);
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	printf("}, [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt with optlen smaller than usual - truncated to ucred.uid */
+	*len = offsetof(struct ucred, gid);
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	PRINT_FIELD_D(", {", *peercred, pid);
+	PRINT_FIELD_UID(", ", *peercred, uid);
+	printf("}, [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt with optlen larger than usual - truncated to raw */
+	*len = sizeof(*peercred) - 1;
+	get_peercred(fd, peercred, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED, ", fd);
+	print_quoted_hex(peercred, *len);
+	printf(", [%d]) = %s\n", *len, errstr);
+
+	/* getsockopt optval EFAULT */
+	*len = sizeof(*peercred);
+	get_peercred(fd, &peercred->uid, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED, %p, [%d]) = %s\n",
+	       fd, &peercred->uid, *len, errstr);
+
+	/* getsockopt optlen EFAULT */
+	get_peercred(fd, peercred, len + 1);
+	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED, %p, %p) = %s\n",
+	       fd, peercred, len + 1, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/so_peercred.gen.test b/tests/so_peercred.gen.test
new file mode 100755
index 0000000..02eb479
--- /dev/null
+++ b/tests/so_peercred.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred -e trace=getsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt
diff --git a/tests/sock_filter-v.c b/tests/sock_filter-v.c
new file mode 100644
index 0000000..16d5c1c
--- /dev/null
+++ b/tests/sock_filter-v.c
@@ -0,0 +1,181 @@
+/*
+ * Check decoding of socket filters.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <unistd.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <linux/filter.h>
+
+#define PRINT_STMT_SYM(pfx, code, k)	PRINT_STMT_SYM_(pfx, #code, #k)
+#define PRINT_STMT_SYM_(pfx, code, k)	\
+	printf("%sBPF_STMT(%s, %s)", pfx, code, k)
+#define PRINT_STMT_VAL(pfx, code, k)	PRINT_STMT_VAL_(pfx, #code, k)
+#define PRINT_STMT_VAL_(pfx, code, k)	\
+	printf("%sBPF_STMT(%s, %#x)", pfx, code, k)
+
+#define PRINT_JUMP(pfx, code, k, jt, jf)	PRINT_JUMP_(pfx, #code, k, jt, jf)
+#define PRINT_JUMP_(pfx, code, k, jt, jf)	\
+	printf("%sBPF_JUMP(%s, %#x, %#x, %#x)", pfx, code, k, jt, jf)
+
+static const struct sock_filter bpf_filter[] = {
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_LL_OFF+4),
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_NET_OFF+8),
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF+SKF_AD_PROTOCOL),
+	BPF_JUMP(BPF_JMP|BPF_K|BPF_JEQ, IPPROTO_UDP, 0, 5),
+	BPF_STMT(BPF_LD|BPF_W|BPF_LEN, 0),
+	BPF_JUMP(BPF_JMP|BPF_K|BPF_JGE, 100, 0, 3),
+	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, 42),
+	BPF_JUMP(BPF_JMP|BPF_K|BPF_JEQ, 'a', 0, 1),
+	BPF_STMT(BPF_RET|BPF_K, -1U),
+	BPF_STMT(BPF_RET|BPF_K, 0)
+};
+
+static void
+print_filter(void)
+{
+	PRINT_STMT_SYM("[", BPF_LD|BPF_B|BPF_ABS, SKF_LL_OFF+4);
+	PRINT_STMT_SYM(", ", BPF_LD|BPF_B|BPF_ABS, SKF_NET_OFF+8);
+	PRINT_STMT_SYM(", ", BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF+SKF_AD_PROTOCOL);
+	PRINT_JUMP(", ", BPF_JMP|BPF_K|BPF_JEQ, IPPROTO_UDP, 0, 5);
+	PRINT_STMT_VAL(", ", BPF_LD|BPF_W|BPF_LEN, 0);
+	PRINT_JUMP(", ", BPF_JMP|BPF_K|BPF_JGE, 100, 0, 3);
+	PRINT_STMT_VAL(", ", BPF_LD|BPF_B|BPF_ABS, 42);
+	PRINT_JUMP(", ", BPF_JMP|BPF_K|BPF_JEQ, 'a', 0, 1);
+	PRINT_STMT_VAL(", ", BPF_RET|BPF_K, -1U);
+	PRINT_STMT_VAL(", ", BPF_RET|BPF_K, 0);
+	putchar(']');
+}
+
+static const char *errstr;
+
+static int
+get_filter(int fd, void *val, socklen_t *len)
+{
+	int rc = getsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static int
+set_filter(int fd, void *val, socklen_t len)
+{
+	int rc = setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, val, len);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	int rc;
+	struct sock_filter *const filter =
+		tail_memdup(bpf_filter, sizeof(bpf_filter));
+	void *const efault = filter + ARRAY_SIZE(bpf_filter);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct sock_fprog, prog);
+	TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+
+	prog->len = ARRAY_SIZE(bpf_filter);
+	prog->filter = filter;
+
+	int fd = socket(AF_INET, SOCK_DGRAM, 0);
+	if (fd < 0)
+		perror_msg_and_skip("socket AF_INET SOCK_DGRAM");
+
+	/* query sock_filter program length -> 0 */
+	*len = BPF_MAXINSNS;
+	rc = get_filter(fd, NULL, len);
+	if (rc)
+		perror_msg_and_skip("getsockopt SOL_SOCKET SO_ATTACH_FILTER");
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER"
+	       ", NULL, [%u->0]) = 0\n", fd, BPF_MAXINSNS);
+
+	/* getsockopt NULL optlen - EFAULT */
+	rc = get_filter(fd, NULL, NULL);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, NULL, NULL)"
+	       " = %s\n", fd, errstr);
+
+	/* attach a filter */
+	rc = set_filter(fd, prog, sizeof(*prog));
+	if (rc)
+		perror_msg_and_skip("setsockopt SOL_SOCKET SO_ATTACH_FILTER");
+	printf("setsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, {len=%u, filter=",
+	       fd, prog->len);
+	print_filter();
+	printf("}, %u) = 0\n", (unsigned int) sizeof(*prog));
+
+	/* setsockopt optlen is too small - EINVAL */
+	rc = set_filter(fd, prog, sizeof(*prog) - 4);
+	printf("setsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p, %u) = %s\n",
+	       fd, prog, (unsigned int) sizeof(*prog) - 4, errstr);
+
+#ifdef SO_ATTACH_REUSEPORT_CBPF
+	rc = setsockopt(fd, SOL_SOCKET, SO_ATTACH_REUSEPORT_CBPF,
+			prog, sizeof(*prog));
+	errstr = sprintrc(rc);
+	printf("setsockopt(%d, SOL_SOCKET, SO_ATTACH_REUSEPORT_CBPF"
+	       ", {len=%u, filter=", fd, prog->len);
+	print_filter();
+	printf("}, %u) = %s\n", (unsigned int) sizeof(*prog), errstr);
+#endif
+
+	/* query sock_filter program length -> ARRAY_SIZE(bpf_filter) */
+	*len = 0;
+	rc = get_filter(fd, efault, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p"
+	       ", [0->%u]) = %s\n",
+	       fd, efault, (unsigned int) ARRAY_SIZE(bpf_filter), errstr);
+
+	/* getsockopt optlen is too small - EINVAL */
+	*len = ARRAY_SIZE(bpf_filter) - 1;
+	rc = get_filter(fd, efault, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p"
+	       ", [%u]) = %s\n",
+	       fd, efault, (unsigned int) ARRAY_SIZE(bpf_filter) - 1, errstr);
+
+	/* getsockopt optval EFAULT */
+	*len = ARRAY_SIZE(bpf_filter);
+	rc = get_filter(fd, filter + 1, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, %p"
+	       ", [%u]) = %s\n", fd, filter + 1,
+	       (unsigned int) ARRAY_SIZE(bpf_filter), errstr);
+
+	/* getsockopt optlen is too large - truncated */
+	*len = ARRAY_SIZE(bpf_filter) + 1;
+	rc = get_filter(fd, filter, len);
+	printf("getsockopt(%d, SOL_SOCKET, SO_ATTACH_FILTER, ", fd);
+	print_filter();
+	printf(", [%u->%d]) = %s\n",
+	       (unsigned int) ARRAY_SIZE(bpf_filter) + 1, *len, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/sock_filter-v.gen.test b/tests/sock_filter-v.gen.test
new file mode 100755
index 0000000..611c2de
--- /dev/null
+++ b/tests/sock_filter-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v -v -e trace=getsockopt,setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -v -e trace=getsockopt,setsockopt
diff --git a/tests/strace-V.test b/tests/strace-V.test
index 8db1395..ec1ca05 100755
--- a/tests/strace-V.test
+++ b/tests/strace-V.test
@@ -8,24 +8,48 @@
 
 run_strace -V > "$LOG"
 
-getval()
+getstr()
 {
 	sed -r -n 's/#define[[:space:]]*'"$1"'[[:space:]]*"([^"]*)".*/\1/p' \
 		../../config.h
 }
 
-config_year=$(getval COPYRIGHT_YEAR)
+# getoption OPTION YES_STRING [NO_STRING]
+#
+# Returns YES_STRING in case OPTION is enabled (present in config.h and has
+# a non-zero numeric value). Otherwise, NO_STRING (or empty string, if not
+# specified) is returned.
+getoption()
+{
+	local opt
+	opt=$(sed -r -n 's/#define[[:space:]]*'"$1"'[[:space:]]*([0-9]+)$/\1/p' \
+		../../config.h)
+	if [ -n "$opt" -a "$opt" -ne 0 ]; then
+		printf "%s" "$2"
+	else
+		printf "%s" "${3-}"
+	fi
+}
+
+config_year=$(getstr COPYRIGHT_YEAR)
 
 [ "$year" -ge "$config_year" ] && [ "$config_year" -ge 2017 ] || {
 	echo >&2 "The year derived from config.h (${config_year}) does not pass sanity checks."
 	exit 1
 }
 
+option_unwind=$(getoption USE_LIBUNWIND " stack-unwind")
+
+features="${option_unwind}"
+[ -n "$features" ] || features=" (none)"
+
 cat > "$EXP" << __EOF__
-$(getval PACKAGE_NAME) -- version $(getval PACKAGE_VERSION)
-Copyright (c) 1991-${config_year} The strace developers <$(getval PACKAGE_URL)>.
+$(getstr PACKAGE_NAME) -- version $(getstr PACKAGE_VERSION)
+Copyright (c) 1991-${config_year} The strace developers <$(getstr PACKAGE_URL)>.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Optional features enabled:${features}
 __EOF__
 
 match_diff "$LOG" "$EXP"
diff --git a/tests/strace-ff.test b/tests/strace-ff.test
index 7107527..6141814 100755
--- a/tests/strace-ff.test
+++ b/tests/strace-ff.test
@@ -7,7 +7,7 @@
 run_prog_skip_if_failed \
 	kill -0 $$
 
-../set_ptracer_any ../sleep 1 > "$OUT" &
+../set_ptracer_any ../sleep 3 > "$OUT" &
 tracee_pid=$!
 
 while ! [ -s "$OUT" ]; do
diff --git a/tests/strace-t.test b/tests/strace-t.test
index 38070f3..73303ae 100755
--- a/tests/strace-t.test
+++ b/tests/strace-t.test
@@ -4,15 +4,26 @@
 
 . "${srcdir=.}/init.sh"
 
-run_prog_skip_if_failed date +%T > /dev/null
+run_prog_skip_if_failed date +%s > "$LOG"
+run_prog_skip_if_failed date +%T --date "@$(cat "$LOG")" > /dev/null
 run_prog ../sleep 0
 
-t0="$(date +%T)"
+s0="$(date +%s)"
 run_strace -t -eexecve $args
-t1="$(date +%T)"
+s1="$(date +%s)"
+
+s="$s0"
+t_reg=
+while [ "$s" -le "$s1" ]; do
+	t="$(date +%T --date "@$s")"
+	[ -z "$t_reg" ] && t_reg="$t" || t_reg="$t_reg|$t"
+	s=$(($s + 1))
+done
+t_reg="($t_reg)"
 
 cat > "$EXP" << __EOF__
-($t0|$t1) execve\\("\\.\\./sleep", \\["\\.\\./sleep", "0"\\], 0x[[:xdigit:]]* /\\* [[:digit:]]* vars \\*/\\) = 0
+$t_reg execve\\("\\.\\./sleep", \\["\\.\\./sleep", "0"\\], 0x[[:xdigit:]]* /\\* [[:digit:]]* vars \\*/\\) = 0
+$t_reg \\+\\+\\+ exited with 0 \\+\\+\\+
 __EOF__
 
 match_grep "$LOG" "$EXP"
diff --git a/tests/strace.supp b/tests/strace.supp
index 578b0a2..248a471 100644
--- a/tests/strace.supp
+++ b/tests/strace.supp
@@ -5,3 +5,13 @@
    fun:sched_getaffinity*
    fun:get_cpuset_size
 }
+
+{
+   qualify_tokens: memleak before error_msg_and_die
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:malloc
+   fun:strdup
+   fun:xstrdup
+   fun:qualify_tokens
+}
diff --git a/tests/syntax.sh b/tests/syntax.sh
new file mode 100644
index 0000000..0a0d2a5
--- /dev/null
+++ b/tests/syntax.sh
@@ -0,0 +1,81 @@
+#!/bin/sh
+#
+# Define syntax testing primitives.
+#
+# Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2016-2017 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+check_exit_status_and_stderr()
+{
+	$STRACE "$@" 2> "$LOG" &&
+		dump_log_and_fail_with \
+			"strace $* failed to handle the error properly"
+	match_diff "$LOG" "$EXP" ||
+		dump_log_and_fail_with \
+			"strace $* failed to print expected diagnostics"
+}
+
+check_exit_status_and_stderr_using_grep()
+{
+	$STRACE "$@" 2> "$LOG" &&
+		dump_log_and_fail_with \
+			"strace $* failed to handle the error properly"
+	match_grep "$LOG" "$EXP" ||
+		dump_log_and_fail_with \
+			"strace $* failed to print expected diagnostics"
+}
+
+strace_exp="${STRACE##* }"
+
+check_e()
+{
+	local pattern="$1"; shift
+	cat > "$EXP" << __EOF__
+$strace_exp: $pattern
+__EOF__
+	check_exit_status_and_stderr "$@"
+}
+
+check_e_using_grep()
+{
+	local pattern="$1"; shift
+	cat > "$EXP" << __EOF__
+$strace_exp: $pattern
+__EOF__
+	check_exit_status_and_stderr_using_grep "$@"
+}
+
+check_h()
+{
+	local pattern="$1"; shift
+	cat > "$EXP" << __EOF__
+$strace_exp: $pattern
+Try '$strace_exp -h' for more information.
+__EOF__
+	check_exit_status_and_stderr "$@"
+}
diff --git a/tests/test_netlink.h b/tests/test_netlink.h
new file mode 100644
index 0000000..f509e18
--- /dev/null
+++ b/tests/test_netlink.h
@@ -0,0 +1,97 @@
+#include "tests.h"
+#include "print_fields.h"
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/socket.h>
+#include "netlink.h"
+
+#define TEST_NETLINK_(fd_, nlh0_,					\
+		      type_, type_str_,					\
+		      flags_, flags_str_,				\
+		      data_len_, src_, slen_, ...)			\
+	do {								\
+		struct nlmsghdr *const TEST_NETLINK_nlh =		\
+			(nlh0_) - (slen_);				\
+		const unsigned int msg_len =				\
+			NLMSG_HDRLEN + (data_len_);			\
+									\
+		SET_STRUCT(struct nlmsghdr, TEST_NETLINK_nlh,		\
+			.nlmsg_len = msg_len,				\
+			.nlmsg_type = (type_),				\
+			.nlmsg_flags = (flags_)				\
+		);							\
+		memcpy(NLMSG_DATA(TEST_NETLINK_nlh), (src_), (slen_));	\
+									\
+		const char *const errstr =				\
+			sprintrc(sendto((fd_), TEST_NETLINK_nlh,	\
+					msg_len, MSG_DONTWAIT,		\
+					NULL, 0));			\
+									\
+		printf("sendto(%d, {{len=%u, type=%s"			\
+		       ", flags=%s, seq=0, pid=0}, ",			\
+		       (fd_), msg_len, (type_str_), (flags_str_));	\
+									\
+		{ __VA_ARGS__; }					\
+									\
+		printf("}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",		\
+		       msg_len, errstr);				\
+	} while (0)
+
+#define TEST_NETLINK(fd_, nlh0_, type_, flags_,				\
+		     data_len_, src_, slen_, ...)			\
+	TEST_NETLINK_((fd_), (nlh0_),					\
+		      (type_), #type_,					\
+		      (flags_), #flags_,				\
+		      (data_len_), (src_), (slen_), __VA_ARGS__)
+
+#define TEST_NETLINK_OBJECT_EX_(fd_, nlh0_,				\
+				type_, type_str_,			\
+				flags_, flags_str_,			\
+				obj_, fallback_func, ...)		\
+	do {								\
+		char pattern[DEFAULT_STRLEN];				\
+		fill_memory_ex(pattern, sizeof(pattern),		\
+			       'a', 'z' - 'a' + 1);			\
+		const unsigned int plen =				\
+			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
+			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
+		/* len < sizeof(obj_) */				\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      (type_), (type_str_),			\
+			      (flags_), (flags_str_),			\
+			      plen, pattern, plen,			\
+			      (fallback_func)(pattern, plen));		\
+		/* short read of sizeof(obj_) */			\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      (type_), (type_str_),			\
+			      (flags_), (flags_str_),			\
+			      sizeof(obj_),				\
+			      pattern, plen,				\
+			      printf("%p",				\
+				     NLMSG_DATA(TEST_NETLINK_nlh)));	\
+		/* sizeof(obj_) */					\
+		TEST_NETLINK_((fd_), (nlh0_),				\
+			      (type_), (type_str_),			\
+			      (flags_), (flags_str_),			\
+			      sizeof(obj_),				\
+			      &(obj_), sizeof(obj_),			\
+			      __VA_ARGS__);				\
+	} while (0)
+
+#define TEST_NETLINK_OBJECT_EX(fd_, nlh0_,				\
+			       type_, flags_,				\
+			       obj_, fallback_func, ...)		\
+	TEST_NETLINK_OBJECT_EX_((fd_), (nlh0),				\
+				(type_), #type_,			\
+				(flags_), #flags_,			\
+				(obj_), (fallback_func), __VA_ARGS__)
+
+#define TEST_NETLINK_OBJECT(fd_, nlh0_,					\
+			    type_, flags_,				\
+			    obj_, ...)					\
+	TEST_NETLINK_OBJECT_EX_((fd_), (nlh0),				\
+				(type_), #type_,			\
+				(flags_), #flags_,			\
+				(obj_), print_quoted_hex, __VA_ARGS__)
diff --git a/tests/test_nlattr.h b/tests/test_nlattr.h
index 8cbb211..048d547 100644
--- a/tests/test_nlattr.h
+++ b/tests/test_nlattr.h
@@ -29,6 +29,7 @@
 #include "print_fields.h"
 
 #include <stdio.h>
+#include <stdint.h>
 #include <string.h>
 #include <sys/socket.h>
 #include "netlink.h"
@@ -62,14 +63,15 @@
 	do {								\
 		struct nlmsghdr *const nlh =				\
 			(nlh0_) - (NLA_HDRLEN + (slen_));		\
-		struct nlattr *const nla = NLMSG_ATTR(nlh, (hdrlen_));	\
+		struct nlattr *const TEST_NLATTR_nla =			\
+			NLMSG_ATTR(nlh, (hdrlen_));			\
 		const unsigned int nla_len =				\
 			NLA_HDRLEN + (nla_data_len_);			\
 		const unsigned int msg_len =				\
 			NLMSG_SPACE(hdrlen_) + nla_len;			\
 									\
 		(init_msg_)(nlh, msg_len);				\
-		init_nlattr(nla, nla_len, (nla_type_),			\
+		init_nlattr(TEST_NLATTR_nla, nla_len, (nla_type_),	\
 			   (src_), (slen_));				\
 									\
 		const char *const errstr =				\
@@ -95,23 +97,24 @@
 		(nla_type_), #nla_type_,				\
 		(nla_data_len_), (src_), (slen_), __VA_ARGS__)
 
-#define TEST_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,				\
-			   init_msg_, print_msg_,			\
-			   nla_type_, pattern_, obj_, ...)		\
+#define TEST_NLATTR_OBJECT_EX_(fd_, nlh0_, hdrlen_,			\
+			       init_msg_, print_msg_,			\
+			       nla_type_, nla_type_str_,		\
+			       pattern_, obj_, fallback_func, ...)	\
 	do {								\
-		const int plen = sizeof(obj_) - 1 > DEFAULT_STRLEN	\
+		const unsigned int plen =				\
+			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
 			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
 		/* len < sizeof(obj_) */				\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
-			(nla_type_), #nla_type_,			\
-			sizeof(obj_) - 1,				\
-			(pattern_), sizeof(obj_) - 1,			\
-			printf("\"%.*s\"", plen, (pattern_)));		\
+			(nla_type_), (nla_type_str_),			\
+			plen, (pattern_), plen,				\
+			(fallback_func)((pattern_), plen));		\
 		/* short read of sizeof(obj_) */			\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
-			(nla_type_), #nla_type_,			\
+			(nla_type_), (nla_type_str_),			\
 			sizeof(obj_),					\
 			(pattern_), sizeof(obj_) - 1,			\
 			printf("%p",					\
@@ -119,26 +122,44 @@
 		/* sizeof(obj_) */					\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
-			(nla_type_), #nla_type_,			\
+			(nla_type_), (nla_type_str_),			\
 			sizeof(obj_),					\
 			&(obj_), sizeof(obj_),				\
 			__VA_ARGS__);					\
 	} while (0)
 
+#define TEST_NLATTR_OBJECT_EX(fd_, nlh0_, hdrlen_,			\
+			      init_msg_, print_msg_,			\
+			      nla_type_,				\
+			      pattern_, obj_, fallback_func, ...)	\
+	TEST_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),		\
+			       (init_msg_), (print_msg_),		\
+			       (nla_type_), #nla_type_,			\
+			       (pattern_), (obj_), (fallback_func),	\
+			       __VA_ARGS__)
+
+#define TEST_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,				\
+			   init_msg_, print_msg_,			\
+			   nla_type_, pattern_, obj_, ...)		\
+	TEST_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),		\
+			       (init_msg_), (print_msg_),		\
+			       (nla_type_), #nla_type_,			\
+			       (pattern_), (obj_), print_quoted_hex,	\
+			       __VA_ARGS__)
+
 #define TEST_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,				\
 			  init_msg_, print_msg_,			\
 			  nla_type_, pattern_, obj_, print_elem_)	\
 	do {								\
-		const int plen =					\
+		const unsigned int plen =				\
 			sizeof((obj_)[0]) - 1 > DEFAULT_STRLEN		\
 			? DEFAULT_STRLEN : (int) sizeof((obj_)[0]) - 1;	\
 		/* len < sizeof((obj_)[0]) */				\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
-			sizeof((obj_)[0]) - 1,				\
-			(pattern_), sizeof((obj_)[0]) - 1,		\
-			printf("\"%.*s\"", plen, (pattern_)));		\
+			plen, (pattern_), plen,				\
+			print_quoted_hex((pattern_), plen));		\
 		/* sizeof((obj_)[0]) < len < sizeof(obj_) */		\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
@@ -181,3 +202,38 @@
 			}						\
 			printf("]"));					\
 	} while (0)
+
+#define TEST_NESTED_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,			\
+				  init_msg_, print_msg_,		\
+				  nla_type_, pattern_, obj_, ...)	\
+	do {								\
+		const unsigned int plen =				\
+			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
+			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
+		/* len < sizeof(obj_) */				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			plen, (pattern_), plen,				\
+			print_quoted_hex((pattern_), plen);		\
+			printf("}"));					\
+		/* short read of sizeof(obj_) */			\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			sizeof(obj_),					\
+			(pattern_), sizeof(obj_) - 1,			\
+			printf("%p}",					\
+			       RTA_DATA(TEST_NLATTR_nla)));		\
+		/* sizeof(obj_) */					\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			sizeof(obj_),					\
+			&(obj_), sizeof(obj_),				\
+			__VA_ARGS__,					\
+			printf("}"));					\
+	} while (0)
diff --git a/tests/test_printpath.c b/tests/test_printpath.c
new file mode 100644
index 0000000..5f482f2
--- /dev/null
+++ b/tests/test_printpath.c
@@ -0,0 +1,110 @@
+/*
+ * Test printpath/umovestr.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/param.h>
+
+#include "test_ucopy.h"
+
+static void
+test_printpath_at(char *const p, const unsigned int test_max)
+{
+	/*
+	 *       /
+	 *      /.
+	 *     /..
+	 *    /...
+	 *   /../.
+	 *  /../..
+	 * /../../
+	 */
+
+	char *const eop = p + (test_max - 1);
+	*eop = '\0';
+	unsigned int i;
+	for (i = 1; i < test_max; ++i) {
+		const unsigned int i_1 = i - 1;
+		memmove(eop - i, eop - i_1, i_1);
+		eop[-1] = "/.."[i_1 % 3];
+		if (chdir(eop - i))
+			perror_msg_and_fail("chdir");
+		printf("chdir(\"%s\") = 0\n", eop - i);
+	}
+}
+
+static void
+test_efault(const unsigned int test_max)
+{
+	char *p = tail_alloc(test_max);
+	const char *const efault = p + test_max;
+	memset(p, '/', test_max);
+
+	for (; p <= efault; ++p) {
+		if (p <= efault - PATH_MAX)
+			continue;
+		printf("chdir(%p) = %s\n", p, sprintrc(chdir(p)));
+	}
+}
+
+static void
+test_enametoolong(void)
+{
+	char *p = tail_alloc(PATH_MAX);
+	memset(p, '/', PATH_MAX);
+
+	printf("chdir(\"%.*s\"...) = %s\n",
+	       PATH_MAX - 1, p, sprintrc(chdir(p)));
+}
+
+void
+test_printpath(const unsigned int test_max)
+{
+	/*
+	 * /../..|
+	 * /../.|.
+	 * /../|..
+	 * /..|/..
+	 * /.|./..
+	 * /|../..
+	 * |/../..
+	 */
+	const unsigned int page_size = get_page_size();
+	char *p = tail_alloc(test_max + page_size);
+	unsigned int i;
+	for (i = 1; i < sizeof(long); ++i)
+		test_printpath_at(p + i, test_max);
+	for (i = 0; i < sizeof(long); ++i)
+		test_printpath_at(p + page_size - i, test_max);
+	test_efault(test_max);
+	test_enametoolong();
+}
diff --git a/tests/test_printstrn.c b/tests/test_printstrn.c
new file mode 100644
index 0000000..bc9c775
--- /dev/null
+++ b/tests/test_printstrn.c
@@ -0,0 +1,102 @@
+/*
+ * Test printstrn/umoven.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <asm/unistd.h>
+
+#include "scno.h"
+#include "test_ucopy.h"
+
+static const char *errstr;
+
+static void add_key(const char *addr, const unsigned int len)
+{
+	errstr = sprintrc(syscall(__NR_add_key, 0, 0, addr, len, -1));
+}
+
+static void
+test_printstrn_at(char *const p, const unsigned int test_max)
+{
+	unsigned int i;
+
+	for (i = 0; i <= test_max; ++i) {
+		add_key(p + (test_max - i), i);
+		printf("add_key(NULL, NULL, \"%.*s\", %u"
+		       ", KEY_SPEC_THREAD_KEYRING) = %s\n",
+		       (int) i, p + (test_max - i), i, errstr);
+	}
+}
+
+static void
+test_efault(const unsigned int test_max)
+{
+	char *p = tail_alloc(test_max);
+	memset(p, '/', test_max);
+	unsigned int i;
+
+	for (i = 0; i <= test_max; ++i) {
+		unsigned int j;
+		for (j = 1; j <= sizeof(long); ++j) {
+			add_key(p + (test_max - i), i + j);
+			printf("add_key(NULL, NULL, %p, %u"
+			       ", KEY_SPEC_THREAD_KEYRING) = %s\n",
+			       p + (test_max - i), i + j, errstr);
+		}
+	}
+}
+
+void
+test_printstrn(const unsigned int test_max)
+{
+	/*
+	 * abcdefgh|
+	 * abcdefg|h
+	 * abcdef|gh
+	 * abcde|fgh
+	 * abcd|efgh
+	 * abc|defgh
+	 * ab|cdefgh
+	 * a|bcdefgh
+	 * |abcdefgh
+	 */
+	const unsigned int page_size = get_page_size();
+	char *p = tail_alloc(test_max + page_size);
+	fill_memory_ex(p, test_max + page_size, 'a', 'z' - 'a' + 1);
+
+	unsigned int i;
+	for (i = 1; i <= sizeof(long); ++i)
+		test_printstrn_at(p + i, test_max);
+	for (i = 0; i < sizeof(long); ++i)
+		test_printstrn_at(p + page_size - i, test_max);
+	test_efault(test_max);
+}
diff --git a/tests/test_ucopy.c b/tests/test_ucopy.c
new file mode 100644
index 0000000..9ddffbc
--- /dev/null
+++ b/tests/test_ucopy.c
@@ -0,0 +1,162 @@
+/*
+ * Test whether process_vm_readv and PTRACE_PEEKDATA work.
+ *
+ * Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <errno.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/ptrace.h>
+#include <sys/uio.h>
+#include <sys/wait.h>
+
+#include "test_ucopy.h"
+
+#ifndef HAVE_PROCESS_VM_READV
+
+# include <asm/unistd.h>
+# include "scno.h"
+static ssize_t
+strace_process_vm_readv(pid_t pid,
+		 const struct iovec *lvec,
+		 unsigned long liovcnt,
+		 const struct iovec *rvec,
+		 unsigned long riovcnt,
+		 unsigned long flags)
+{
+	return syscall(__NR_process_vm_readv,
+		       (long) pid, lvec, liovcnt, rvec, riovcnt, flags);
+}
+# define process_vm_readv strace_process_vm_readv
+
+#endif /* !HAVE_PROCESS_VM_READV */
+
+static bool
+call_process_vm_readv(const int pid, long *const addr)
+{
+	long data = 0;
+
+	const struct iovec local = {
+		.iov_base = &data,
+		.iov_len = sizeof(data)
+	};
+	const struct iovec remote = {
+		.iov_base = addr,
+		.iov_len = sizeof(*addr)
+	};
+
+	return process_vm_readv(pid, &local, 1, &remote, 1, 0) == sizeof(data)
+		&& data == 1;
+}
+
+static bool
+call_ptrace_peekdata(const int pid, long *const addr)
+{
+	return ptrace(PTRACE_PEEKDATA, pid, addr, 0) == 1;
+}
+
+static bool
+test_ucopy(bool (*fn)(int pid, long *addr))
+{
+	static long data;
+
+	data = 0;
+	bool rc = false;
+	int saved = 0;
+
+	pid_t pid = fork();
+	if (pid < 0)
+		perror_msg_and_fail("fork");
+
+	if (!pid) {
+		data = 1;
+		if (ptrace(PTRACE_TRACEME, 0, 0, 0))
+			perror_msg_and_fail("PTRACE_TRACEME");
+		raise(SIGSTOP);
+		_exit(0);
+	}
+
+	for (;;) {
+		int status, tracee;
+
+		errno = 0;
+		tracee = wait(&status);
+		if (tracee != pid) {
+			if (errno == EINTR)
+				continue;
+			saved = errno;
+			kill(pid, SIGKILL);
+			errno = saved;
+			perror_msg_and_fail("wait");
+		}
+		if (WIFEXITED(status)) {
+			if (WEXITSTATUS(status) == 0)
+				break;
+			error_msg_and_fail("unexpected exit status %u",
+					   WEXITSTATUS(status));
+		}
+		if (WIFSIGNALED(status))
+			error_msg_and_fail("unexpected signal %u",
+					   WTERMSIG(status));
+		if (!WIFSTOPPED(status) || WSTOPSIG(status) != SIGSTOP) {
+			kill(pid, SIGKILL);
+			error_msg_and_fail("unexpected wait status %x",
+					   status);
+		}
+
+		errno = 0;
+		rc = fn(pid, &data);
+		if (!rc)
+			saved = errno;
+
+		if (ptrace(PTRACE_CONT, pid, 0, 0)) {
+			saved = errno;
+			kill(pid, SIGKILL);
+			errno = saved;
+			perror_msg_and_fail("PTRACE_CONT");
+		}
+	}
+
+	if (!rc)
+		errno = saved;
+	return rc;
+}
+
+bool
+test_process_vm_readv(void)
+{
+	return test_ucopy(call_process_vm_readv);
+}
+
+bool
+test_ptrace_peekdata(void)
+{
+	return test_ucopy(call_ptrace_peekdata);
+}
diff --git a/tests/test_ucopy.h b/tests/test_ucopy.h
new file mode 100644
index 0000000..30d1c11
--- /dev/null
+++ b/tests/test_ucopy.h
@@ -0,0 +1,13 @@
+#include <stdbool.h>
+
+extern bool
+test_process_vm_readv(void);
+
+extern bool
+test_ptrace_peekdata(void);
+
+extern void
+test_printpath(unsigned int test_max_size);
+
+extern void
+test_printstrn(unsigned int test_max_size);
diff --git a/tests/tests.h b/tests/tests.h
index 094f365..d453e3e 100644
--- a/tests/tests.h
+++ b/tests/tests.h
@@ -134,8 +134,17 @@
 /* Print string in a quoted form. */
 void print_quoted_string(const char *);
 
+/*
+ * Print a NUL-terminated string `str' of length up to `size' - 1
+ * in a quoted form.
+ */
+void print_quoted_cstring(const char *str, size_t size);
+
 /* Print memory in a quoted form. */
-void print_quoted_memory(const char *, size_t);
+void print_quoted_memory(const void *, size_t);
+
+/* Print memory in a hexquoted form. */
+void print_quoted_hex(const void *, size_t);
 
 /* Print time_t and nanoseconds in symbolic format. */
 void print_time_t_nsec(time_t, unsigned long long, int);
@@ -188,6 +197,15 @@
 /* Create a pipe with maximized descriptor numbers. */
 void pipe_maxfd(int pipefd[2]);
 
+/* if_nametoindex("lo") */
+unsigned int ifindex_lo(void);
+
+#ifdef HAVE_IF_INDEXTONAME
+# define IFINDEX_LO_STR "if_nametoindex(\"lo\")"
+#else
+# define IFINDEX_LO_STR "1"
+#endif
+
 #define F8ILL_KULONG_SUPPORTED	(sizeof(void *) < sizeof(kernel_ulong_t))
 #define F8ILL_KULONG_MASK	((kernel_ulong_t) 0xffffffff00000000ULL)
 
@@ -225,26 +243,6 @@
 # define SKIP_MAIN_UNDEFINED(arg) \
 	int main(void) { error_msg_and_skip("undefined: %s", arg); }
 
-/*
- * The kernel used to define 64-bit types on 64-bit systems on a per-arch
- * basis.  Some architectures would use unsigned long and others would use
- * unsigned long long.  These types were exported as part of the
- * kernel-userspace ABI and now must be maintained forever.  This matches
- * what the kernel exports for each architecture so we don't need to cast
- * every printing of __u64 or __s64 to stdint types.
- */
-# if SIZEOF_LONG == 4
-#  define PRI__64 "ll"
-# elif defined ALPHA || defined IA64 || defined MIPS || defined POWERPC
-#  define PRI__64 "l"
-# else
-#  define PRI__64 "ll"
-# endif
-
-# define PRI__d64 PRI__64"d"
-# define PRI__u64 PRI__64"u"
-# define PRI__x64 PRI__64"x"
-
 # if WORDS_BIGENDIAN
 #  define LL_PAIR(HI, LO) (HI), (LO)
 # else
diff --git a/tests/times.c b/tests/times.c
index c4cce0e..e2db4e2 100644
--- a/tests/times.c
+++ b/tests/times.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2015 Eugene Syromyatnikov <evgsyr@gmail.com>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/uio.c b/tests/uio.c
index 21f005d..c02c816 100644
--- a/tests/uio.c
+++ b/tests/uio.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/uname.c b/tests/uname.c
index 96db753..23b64c1 100644
--- a/tests/uname.c
+++ b/tests/uname.c
@@ -12,24 +12,23 @@
 	int abbrev = ac > 1;
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct utsname, uname);
 	int rc = syscall(__NR_uname, uname);
-	printf("uname({sysname=\"");
+	printf("uname({sysname=");
 	print_quoted_string(uname->sysname);
-	printf("\", nodename=\"");
+	printf(", nodename=");
 	print_quoted_string(uname->nodename);
 	if (abbrev) {
-		printf("\", ...");
+		printf(", ...");
 	} else {
-		printf("\", release=\"");
+		printf(", release=");
 		print_quoted_string(uname->release);
-		printf("\", version=\"");
+		printf(", version=");
 		print_quoted_string(uname->version);
-		printf("\", machine=\"");
+		printf(", machine=");
 		print_quoted_string(uname->machine);
 # ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
-		printf("\", domainname=\"");
+		printf(", domainname=");
 		print_quoted_string(uname->domainname);
 # endif
-		printf("\"");
 	}
 	printf("}) = %d\n", rc);
 
diff --git a/tests/unix-pair-sendto-recvfrom.c b/tests/unix-pair-sendto-recvfrom.c
index a0c710a..675fc07 100644
--- a/tests/unix-pair-sendto-recvfrom.c
+++ b/tests/unix-pair-sendto-recvfrom.c
@@ -2,6 +2,7 @@
  * Check decoding and dumping of sendto and recvfrom syscalls.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/vmsplice.c b/tests/vmsplice.c
index 4242d9e..6058569 100644
--- a/tests/vmsplice.c
+++ b/tests/vmsplice.c
@@ -2,6 +2,7 @@
  * This file is part of vmsplice strace test.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/xattr.c b/tests/xattr.c
index 03b4270..3bd87cc 100644
--- a/tests/xattr.c
+++ b/tests/xattr.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -112,9 +113,7 @@
 	else {
 		const int ellipsis = rc > DEFAULT_STRLEN;
 
-		putchar('"');
 		print_quoted_memory(big, ellipsis ? DEFAULT_STRLEN : rc);
-		putchar('"');
 		if (ellipsis)
 			fputs("...", stdout);
 	}
diff --git a/tests/xchownx.c b/tests/xchownx.c
index e415fef..beca206 100644
--- a/tests/xchownx.c
+++ b/tests/xchownx.c
@@ -2,6 +2,7 @@
  * Check decoding of chown/chown32/lchown/lchown32/fchown/fchown32 syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/tests/xetitimer.c b/tests/xetitimer.c
index 3a81880..f9cfe0b 100644
--- a/tests/xetitimer.c
+++ b/tests/xetitimer.c
@@ -167,7 +167,7 @@
 	p_new->it_interval.tv_sec = 0xdeadbeefU;
 	p_new->it_interval.tv_usec = 0xfacefeedU;
 	p_new->it_value.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	p_new->it_value.tv_usec = (long) 0xbadc0dedfacefeedLL;
+	p_new->it_value.tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 
 	rc = setitimer(ITIMER_REAL, p_new, p_old);
 	printf("setitimer(ITIMER_REAL"
diff --git a/tests/xettimeofday.c b/tests/xettimeofday.c
index ec422cf..8652b24 100644
--- a/tests/xettimeofday.c
+++ b/tests/xettimeofday.c
@@ -73,7 +73,7 @@
 	       tz->tz_minuteswest, tz->tz_dsttime);
 
 	tv->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv->tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv->tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 	assert(syscall(__NR_settimeofday, tv, tz) == -1);
 	printf("settimeofday({tv_sec=%lld, tv_usec=%llu}"
 	       ", {tz_minuteswest=%d, tz_dsttime=%d}) = -1 EINVAL (%m)\n",
diff --git a/tests/xselect.c b/tests/xselect.c
index 6c8cd81..a25ebcc 100644
--- a/tests/xselect.c
+++ b/tests/xselect.c
@@ -91,7 +91,7 @@
 	FD_SET(fds[0], set);
 	FD_SET(fds[1], set);
 	tv->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv->tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv->tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 	memcpy(&tv_in, tv, sizeof(tv_in));
 	rc = syscall(TEST_SYSCALL_NR, fds[1] + 1, set, set, set, tv);
 	if (rc < 0) {
diff --git a/tests/xutimes.c b/tests/xutimes.c
index 5fd7161..23728a1 100644
--- a/tests/xutimes.c
+++ b/tests/xutimes.c
@@ -107,7 +107,7 @@
 	tv[0].tv_sec = 0xdeadbeefU;
 	tv[0].tv_usec = 0xfacefeedU;
 	tv[1].tv_sec = (time_t) 0xcafef00ddeadbeefLL;
-	tv[1].tv_usec = (long) 0xbadc0dedfacefeedLL;
+	tv[1].tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
 
 	k_utimes(kfname, (uintptr_t) tv);
 	printf("%s(%s, [", TEST_SYSCALL_STR, qname);
diff --git a/ubi.c b/ubi.c
index 65db02d..1c12a23 100644
--- a/ubi.c
+++ b/ubi.c
@@ -61,14 +61,13 @@
 				mkvol.alignment, (int64_t)mkvol.bytes);
 			printxval(ubi_volume_types,
 				    (uint8_t) mkvol.vol_type, "UBI_???_VOLUME");
-			tprintf(", name_len=%" PRIi16 ", name=", mkvol.name_len);
-			if (print_quoted_string(mkvol.name,
-					CLAMP(mkvol.name_len, 0, UBI_MAX_VOLUME_NAME),
-					QUOTE_0_TERMINATED) > 0) {
-				tprints("...");
-			}
+			tprintf(", name_len=%" PRIi16 ", name=",
+				mkvol.name_len);
+			print_quoted_cstring(mkvol.name,
+					CLAMP(mkvol.name_len, 0,
+					      UBI_MAX_VOLUME_NAME));
 			tprints("}");
-			return 1;
+			return 0;
 		}
 		if (!syserror(tcp)) {
 			tprints(" => ");
@@ -103,11 +102,9 @@
 			tprintf("{vol_id=%" PRIi32 ", name_len=%" PRIi16
 				", name=", rnvol.ents[c].vol_id,
 				rnvol.ents[c].name_len);
-			if (print_quoted_string(rnvol.ents[c].name,
-					CLAMP(rnvol.ents[c].name_len, 0, UBI_MAX_VOLUME_NAME),
-					QUOTE_0_TERMINATED) > 0) {
-				tprints("...");
-			}
+			print_quoted_cstring(rnvol.ents[c].name,
+					CLAMP(rnvol.ents[c].name_len, 0,
+					      UBI_MAX_VOLUME_NAME));
 			tprints("}");
 		}
 		tprints("]}");
@@ -138,7 +135,7 @@
 				", max_beb_per1024=%" PRIi16 "}",
 				attach.ubi_num, attach.mtd_num,
 				attach.vid_hdr_offset, attach.max_beb_per1024);
-			return 1;
+			return 0;
 		}
 		if (!syserror(tcp)) {
 			tprints(" => ");
@@ -199,5 +196,5 @@
 		return RVAL_DECODED;
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/ucopy.c b/ucopy.c
new file mode 100644
index 0000000..c3be417
--- /dev/null
+++ b/ucopy.c
@@ -0,0 +1,326 @@
+/*
+ * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+ * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+ * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
+ * Copyright (c) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
+ *                     Linux for s390 port by D.J. Barrow
+ *                    <barrow_dj@mail.yahoo.com,djbarrow@de.ibm.com>
+ * Copyright (c) 1999-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include <sys/uio.h>
+#include <asm/unistd.h>
+
+#include "scno.h"
+#include "ptrace.h"
+
+static bool process_vm_readv_not_supported;
+
+#ifndef HAVE_PROCESS_VM_READV
+/*
+ * Need to do this since process_vm_readv() is not yet available in libc.
+ * When libc is updated, only "static bool process_vm_readv_not_supported"
+ * line remains.
+ * The name is different to avoid potential collision with OS headers.
+ */
+static ssize_t strace_process_vm_readv(pid_t pid,
+		 const struct iovec *lvec,
+		 unsigned long liovcnt,
+		 const struct iovec *rvec,
+		 unsigned long riovcnt,
+		 unsigned long flags)
+{
+	return syscall(__NR_process_vm_readv,
+		       (long) pid, lvec, liovcnt, rvec, riovcnt, flags);
+}
+# define process_vm_readv strace_process_vm_readv
+#endif /* !HAVE_PROCESS_VM_READV */
+
+static ssize_t
+vm_read_mem(const pid_t pid, void *const laddr,
+	    const kernel_ulong_t raddr, const size_t len)
+{
+	const unsigned long truncated_raddr = raddr;
+
+#if SIZEOF_LONG < SIZEOF_KERNEL_LONG_T
+	if (raddr != (kernel_ulong_t) truncated_raddr) {
+		errno = EIO;
+		return -1;
+	}
+#endif
+
+	const struct iovec local = {
+		.iov_base = laddr,
+		.iov_len = len
+	};
+	const struct iovec remote = {
+		.iov_base = (void *) truncated_raddr,
+		.iov_len = len
+	};
+
+	const ssize_t rc = process_vm_readv(pid, &local, 1, &remote, 1, 0);
+	if (rc < 0 && errno == ENOSYS)
+		process_vm_readv_not_supported = true;
+
+	return rc;
+}
+
+static bool
+tracee_addr_is_invalid(kernel_ulong_t addr)
+{
+	return
+#if ANY_WORDSIZE_LESS_THAN_KERNEL_LONG
+		current_wordsize < sizeof(addr) && addr & ~(kernel_ulong_t) -1U;
+#else
+		false;
+#endif
+}
+
+/* legacy method of copying from tracee */
+static int
+umoven_peekdata(const int pid, kernel_ulong_t addr, unsigned int len,
+		void *laddr)
+{
+	unsigned int nread = 0;
+	unsigned int residue = addr & (sizeof(long) - 1);
+
+	while (len) {
+		addr &= -sizeof(long);		/* aligned address */
+
+		errno = 0;
+		union {
+			long val;
+			char x[sizeof(long)];
+		} u = { .val = ptrace(PTRACE_PEEKDATA, pid, addr, 0) };
+
+		switch (errno) {
+			case 0:
+				break;
+			case ESRCH: case EINVAL:
+				/* these could be seen if the process is gone */
+				return -1;
+			case EFAULT: case EIO: case EPERM:
+				/* address space is inaccessible */
+				if (nread) {
+					perror_msg("umoven: short read (%u < %u) @0x%" PRI_klx,
+						   nread, nread + len, addr - nread);
+				}
+				return -1;
+			default:
+				/* all the rest is strange and should be reported */
+				perror_msg("umoven: PTRACE_PEEKDATA pid:%d @0x%" PRI_klx,
+					    pid, addr);
+				return -1;
+		}
+
+		unsigned int m = MIN(sizeof(long) - residue, len);
+		memcpy(laddr, &u.x[residue], m);
+		residue = 0;
+		addr += sizeof(long);
+		laddr += m;
+		nread += m;
+		len -= m;
+	}
+
+	return 0;
+}
+
+/*
+ * Copy `len' bytes of data from process `pid'
+ * at address `addr' to our space at `our_addr'.
+ */
+int
+umoven(struct tcb *const tcp, kernel_ulong_t addr, unsigned int len,
+       void *const our_addr)
+{
+	if (tracee_addr_is_invalid(addr))
+		return -1;
+
+	const int pid = tcp->pid;
+
+	if (process_vm_readv_not_supported)
+		return umoven_peekdata(pid, addr, len, our_addr);
+
+	int r = vm_read_mem(pid, our_addr, addr, len);
+	if ((unsigned int) r == len)
+		return 0;
+	if (r >= 0) {
+		error_msg("umoven: short read (%u < %u) @0x%" PRI_klx,
+			  (unsigned int) r, len, addr);
+		return -1;
+	}
+	switch (errno) {
+		case ENOSYS:
+		case EPERM:
+			/* try PTRACE_PEEKDATA */
+			return umoven_peekdata(pid, addr, len, our_addr);
+		case ESRCH:
+			/* the process is gone */
+			return -1;
+		case EFAULT: case EIO:
+			/* address space is inaccessible */
+			return -1;
+		default:
+			/* all the rest is strange and should be reported */
+			perror_msg("process_vm_readv: pid:%d @0x%" PRI_klx,
+				    pid, addr);
+			return -1;
+	}
+}
+
+/*
+ * Like umoven_peekdata but make the additional effort of looking
+ * for a terminating zero byte.
+ */
+static int
+umovestr_peekdata(const int pid, kernel_ulong_t addr, unsigned int len,
+		  void *laddr)
+{
+	unsigned int nread = 0;
+	unsigned int residue = addr & (sizeof(long) - 1);
+
+	while (len) {
+		addr &= -sizeof(long);		/* aligned address */
+
+		errno = 0;
+		union {
+			unsigned long val;
+			char x[sizeof(long)];
+		} u = { .val = ptrace(PTRACE_PEEKDATA, pid, addr, 0) };
+
+		switch (errno) {
+			case 0:
+				break;
+			case ESRCH: case EINVAL:
+				/* these could be seen if the process is gone */
+				return -1;
+			case EFAULT: case EIO: case EPERM:
+				/* address space is inaccessible */
+				if (nread) {
+					perror_msg("umovestr: short read (%d < %d) @0x%" PRI_klx,
+						   nread, nread + len, addr - nread);
+				}
+				return -1;
+			default:
+				/* all the rest is strange and should be reported */
+				perror_msg("umovestr: PTRACE_PEEKDATA pid:%d @0x%" PRI_klx,
+					   pid, addr);
+				return -1;
+		}
+
+		unsigned int m = MIN(sizeof(long) - residue, len);
+		memcpy(laddr, &u.x[residue], m);
+		while (residue < sizeof(long))
+			if (u.x[residue++] == '\0')
+				return 1;
+		residue = 0;
+		addr += sizeof(long);
+		laddr += m;
+		nread += m;
+		len -= m;
+	}
+
+	return 0;
+}
+
+/*
+ * Like `umove' but make the additional effort of looking
+ * for a terminating zero byte.
+ *
+ * Returns < 0 on error, > 0 if NUL was seen,
+ * (TODO if useful: return count of bytes including NUL),
+ * else 0 if len bytes were read but no NUL byte seen.
+ *
+ * Note: there is no guarantee we won't overwrite some bytes
+ * in laddr[] _after_ terminating NUL (but, of course,
+ * we never write past laddr[len-1]).
+ */
+int
+umovestr(struct tcb *const tcp, kernel_ulong_t addr, unsigned int len,
+	 char *laddr)
+{
+	if (tracee_addr_is_invalid(addr))
+		return -1;
+
+	const int pid = tcp->pid;
+
+	if (process_vm_readv_not_supported)
+		return umovestr_peekdata(pid, addr, len, laddr);
+
+	const size_t page_size = get_pagesize();
+	const size_t page_mask = page_size - 1;
+	unsigned int nread = 0;
+
+	while (len) {
+		/*
+		 * Don't cross pages, otherwise we can get EFAULT
+		 * and fail to notice that terminating NUL lies
+		 * in the existing (first) page.
+		 */
+		unsigned int chunk_len = len > page_size ? page_size : len;
+		unsigned int end_in_page = (addr + chunk_len) & page_mask;
+		if (chunk_len > end_in_page) /* crosses to the next page */
+			chunk_len -= end_in_page;
+
+		int r = vm_read_mem(pid, laddr, addr, chunk_len);
+		if (r > 0) {
+			if (memchr(laddr, '\0', r))
+				return 1;
+			addr += r;
+			laddr += r;
+			nread += r;
+			len -= r;
+			continue;
+		}
+		switch (errno) {
+			case ENOSYS:
+			case EPERM:
+				/* try PTRACE_PEEKDATA */
+				if (!nread)
+					return umovestr_peekdata(pid, addr,
+								 len, laddr);
+				/* fall through */
+			case EFAULT: case EIO:
+				/* address space is inaccessible */
+				if (nread)
+					perror_msg("umovestr: short read (%d < %d) @0x%" PRI_klx,
+						   nread, nread + len, addr - nread);
+				return -1;
+			case ESRCH:
+				/* the process is gone */
+				return -1;
+			default:
+				/* all the rest is strange and should be reported */
+				perror_msg("process_vm_readv: pid:%d @0x%" PRI_klx,
+					    pid, addr);
+				return -1;
+		}
+	}
+
+	return 0;
+}
diff --git a/uid.c b/uid.c
index 0fb810c..069cda6 100644
--- a/uid.c
+++ b/uid.c
@@ -4,6 +4,7 @@
  * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
  * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
  * Copyright (c) 2003-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/uname.c b/uname.c
index a63295e..02f2117 100644
--- a/uname.c
+++ b/uname.c
@@ -4,6 +4,7 @@
  * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
  * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
  * Copyright (c) 2012-2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2014-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,7 +31,7 @@
  */
 
 #include "defs.h"
-
+#include "print_fields.h"
 #include <sys/utsname.h>
 
 SYS_FUNC(uname)
@@ -41,24 +42,17 @@
 		return 0;
 
 	if (!umove_or_printaddr(tcp, tcp->u_arg[0], &uname)) {
-#define PRINT_UTS_MEMBER(prefix, member)				\
-	do {								\
-		tprints(prefix #member "=");				\
-		print_quoted_string(uname.member, sizeof(uname.member),	\
-				    QUOTE_0_TERMINATED);		\
-	} while (0)
-
-		PRINT_UTS_MEMBER("{", sysname);
-		PRINT_UTS_MEMBER(", ", nodename);
+		PRINT_FIELD_CSTRING("{", uname, sysname);
+		PRINT_FIELD_CSTRING(", ", uname, nodename);
 		if (abbrev(tcp)) {
 			tprints(", ...}");
 			return 0;
 		}
-		PRINT_UTS_MEMBER(", ", release);
-		PRINT_UTS_MEMBER(", ", version);
-		PRINT_UTS_MEMBER(", ", machine);
+		PRINT_FIELD_CSTRING(", ", uname, release);
+		PRINT_FIELD_CSTRING(", ", uname, version);
+		PRINT_FIELD_CSTRING(", ", uname, machine);
 #ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
-		PRINT_UTS_MEMBER(", ", domainname);
+		PRINT_FIELD_CSTRING(", ", uname, domainname);
 #endif
 		tprints("}");
 	}
diff --git a/userfaultfd.c b/userfaultfd.c
index 6003588..2fa33c7 100644
--- a/userfaultfd.c
+++ b/userfaultfd.c
@@ -27,6 +27,7 @@
  */
 
 #include "defs.h"
+#include "print_fields.h"
 #include <fcntl.h>
 
 #include "xlat/uffd_flags.h"
@@ -42,6 +43,7 @@
 # include <linux/ioctl.h>
 # include <linux/userfaultfd.h>
 
+# include "xlat/uffd_api_features.h"
 # include "xlat/uffd_api_flags.h"
 # include "xlat/uffd_copy_flags.h"
 # include "xlat/uffd_register_ioctl_flags.h"
@@ -51,110 +53,149 @@
 static void
 tprintf_uffdio_range(const struct uffdio_range *range)
 {
-	tprintf("{start=%#" PRI__x64 ", len=%#" PRI__x64 "}",
-		range->start, range->len);
+	PRINT_FIELD_X("{", *range, start);
+	PRINT_FIELD_X(", ", *range, len);
+	tprints("}");
 }
 
+#define PRINT_FIELD_UFFDIO_RANGE(prefix_, where_, field_)		\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		tprintf_uffdio_range(&(where_).field_);			\
+	} while (0)
+
 int
 uffdio_ioctl(struct tcb *const tcp, const unsigned int code,
 	     const kernel_ulong_t arg)
 {
 	switch (code) {
 	case UFFDIO_API: {
+		uint64_t *entering_features;
 		struct uffdio_api ua;
+
 		if (entering(tcp)) {
 			tprints(", ");
 			if (umove_or_printaddr(tcp, arg, &ua))
-				return RVAL_DECODED | 1;
-			/* Features is intended to contain some flags, but
-			 * there aren't any defined yet.
-			 */
-			tprintf("{api=%#" PRI__x64
-				", features=%#" PRI__x64,
-				ua.api, ua.features);
-		} else {
-			if (!syserror(tcp) && !umove(tcp, arg, &ua)) {
-				tprintf(", features.out=%#" PRI__x64
-					", ioctls=", ua.features);
-				printflags64(uffd_api_flags, ua.ioctls,
-					     "_UFFDIO_???");
+				break;
+			PRINT_FIELD_X("{", ua, api);
+			PRINT_FIELD_FLAGS(", ", ua, features, uffd_api_features,
+					  "UFFD_FEATURE_???");
+			entering_features = malloc(sizeof(*entering_features));
+			if (entering_features) {
+				*entering_features = ua.features;
+				set_tcb_priv_data(tcp, entering_features, free);
 			}
-			tprints("}");
+
+			return 0;
 		}
-		return 1;
+
+		if (!syserror(tcp) && !umove(tcp, arg, &ua)) {
+			entering_features = get_tcb_priv_data(tcp);
+
+			if (!entering_features
+			    || *entering_features != ua.features) {
+				PRINT_FIELD_FLAGS(" => ", ua, features,
+						  uffd_api_features,
+						  "UFFD_FEATURE_???");
+			}
+
+			PRINT_FIELD_FLAGS(", ", ua, ioctls, uffd_api_flags,
+					  "_UFFDIO_???");
+		}
+
+		tprints("}");
+
+		break;
 	}
 
 	case UFFDIO_COPY: {
 		struct uffdio_copy uc;
+
 		if (entering(tcp)) {
 			tprints(", ");
 			if (umove_or_printaddr(tcp, arg, &uc))
-				return RVAL_DECODED | 1;
-			tprintf("{dst=%#" PRI__x64 ", src=%#" PRI__x64
-				", len=%#" PRI__x64 ", mode=",
-				uc.dst, uc.src, uc.len);
-			printflags64(uffd_copy_flags, uc.mode,
-				     "UFFDIO_COPY_???");
-		} else {
-			if (!syserror(tcp) && !umove(tcp, arg, &uc))
-				tprintf(", copy=%#" PRI__x64, uc.copy);
-			tprints("}");
+				return RVAL_IOCTL_DECODED;
+			PRINT_FIELD_X("{", uc, dst);
+			PRINT_FIELD_X(", ", uc, src);
+			PRINT_FIELD_X(", ", uc, len);
+			PRINT_FIELD_FLAGS(", ", uc, mode, uffd_copy_flags,
+					  "UFFDIO_COPY_???");
+
+			return 0;
 		}
-		return 1;
+
+		if (!syserror(tcp) && !umove(tcp, arg, &uc))
+			PRINT_FIELD_X(", ", uc, copy);
+
+		tprints("}");
+
+		break;
 	}
 
 	case UFFDIO_REGISTER: {
 		struct uffdio_register ur;
+
 		if (entering(tcp)) {
 			tprints(", ");
 			if (umove_or_printaddr(tcp, arg, &ur))
-				return RVAL_DECODED | 1;
-			tprints("{range=");
-			tprintf_uffdio_range(&ur.range);
-			tprints(", mode=");
-			printflags64(uffd_register_mode_flags, ur.mode,
-				     "UFFDIO_REGISTER_MODE_???");
-		} else {
-			if (!syserror(tcp) && !umove(tcp, arg, &ur)) {
-				tprints(", ioctls=");
-				printflags64(uffd_register_ioctl_flags,
-					     ur.ioctls, "UFFDIO_???");
-			}
-			tprints("}");
+				return RVAL_IOCTL_DECODED;
+			PRINT_FIELD_UFFDIO_RANGE("{", ur, range);
+			PRINT_FIELD_FLAGS(", ", ur, mode,
+					  uffd_register_mode_flags,
+					  "UFFDIO_REGISTER_MODE_???");
+
+			return 0;
 		}
-		return 1;
+
+		if (!syserror(tcp) && !umove(tcp, arg, &ur)) {
+			PRINT_FIELD_FLAGS(", ", ur, ioctls,
+					  uffd_register_ioctl_flags,
+					  "UFFDIO_???");
+		}
+
+		tprints("}");
+
+		break;
 	}
 
 	case UFFDIO_UNREGISTER:
 	case UFFDIO_WAKE: {
 		struct uffdio_range ura;
+
 		tprints(", ");
+
 		if (!umove_or_printaddr(tcp, arg, &ura))
 			tprintf_uffdio_range(&ura);
-		return RVAL_DECODED | 1;
+
+		break;
 	}
 
 	case UFFDIO_ZEROPAGE: {
 		struct uffdio_zeropage uz;
+
 		if (entering(tcp)) {
 			tprints(", ");
 			if (umove_or_printaddr(tcp, arg, &uz))
-				return RVAL_DECODED | 1;
-			tprints("{range=");
-			tprintf_uffdio_range(&uz.range);
-			tprints(", mode=");
-			printflags64(uffd_zeropage_flags, uz.mode,
-				     "UFFDIO_ZEROPAGE_???");
-		} else {
-			if (!syserror(tcp) && !umove(tcp, arg, &uz))
-				tprintf(", zeropage=%#" PRI__x64, uz.zeropage);
-			tprints("}");
+				return RVAL_IOCTL_DECODED;
+			PRINT_FIELD_UFFDIO_RANGE("{", uz, range);
+			PRINT_FIELD_FLAGS(", ", uz, mode, uffd_zeropage_flags,
+					  "UFFDIO_ZEROPAGE_???");
+
+			return 0;
 		}
-		return 1;
+
+		if (!syserror(tcp) && !umove(tcp, arg, &uz))
+			PRINT_FIELD_X(", ", uz, zeropage);
+
+		tprints("}");
+
+		break;
 	}
 
 	default:
 		return RVAL_DECODED;
 	}
+
+	return RVAL_IOCTL_DECODED;
 }
 #endif /* HAVE_LINUX_USERFAULTFD_H */
diff --git a/util.c b/util.c
index 2ccfe4f..05c9fb8 100644
--- a/util.c
+++ b/util.c
@@ -40,43 +40,6 @@
 # include <sys/xattr.h>
 #endif
 #include <sys/uio.h>
-#include <asm/unistd.h>
-
-#include "scno.h"
-#include "regs.h"
-#include "ptrace.h"
-
-int
-string_to_uint_ex(const char *const str, char **const endptr,
-		  const unsigned int max_val, const char *const accepted_ending)
-{
-	char *end;
-	long val;
-
-	if (!*str)
-		return -1;
-
-	errno = 0;
-	val = strtol(str, &end, 10);
-
-	if (str == end || val < 0 || (unsigned long) val > max_val
-	    || (val == LONG_MAX && errno == ERANGE))
-		return -1;
-
-	if (*end && (!accepted_ending || !strchr(accepted_ending, *end)))
-		return -1;
-
-	if (endptr)
-		*endptr = end;
-
-	return (int) val;
-}
-
-int
-string_to_uint(const char *const str)
-{
-	return string_to_uint_upto(str, INT_MAX);
-}
 
 int
 tv_nz(const struct timeval *a)
@@ -696,13 +659,31 @@
 }
 
 /*
+ * Quote a NUL-terminated string `str' of length up to `size' - 1
+ * and print the result.
+ *
+ * Returns 0 if NUL was seen, 1 otherwise.
+ */
+int
+print_quoted_cstring(const char *str, unsigned int size)
+{
+	int unterminated =
+		print_quoted_string(str, size, QUOTE_0_TERMINATED);
+
+	if (unterminated)
+		tprints("...");
+
+	return unterminated;
+}
+
+/*
  * Print path string specified by address `addr' and length `n'.
  * If path length exceeds `n', append `...' to the output.
  */
 void
 printpathn(struct tcb *const tcp, const kernel_ulong_t addr, unsigned int n)
 {
-	char path[PATH_MAX + 1];
+	char path[PATH_MAX];
 	int nul_seen;
 
 	if (!addr) {
@@ -719,10 +700,8 @@
 	if (nul_seen < 0)
 		printaddr(addr);
 	else {
-		path[n++] = '\0';
-		print_quoted_string(path, n, QUOTE_0_TERMINATED);
-		if (!nul_seen)
-			tprints("...");
+		path[n++] = !nul_seen;
+		print_quoted_cstring(path, n);
 	}
 }
 
@@ -730,7 +709,7 @@
 printpath(struct tcb *const tcp, const kernel_ulong_t addr)
 {
 	/* Size must correspond to char path[] size in printpathn */
-	printpathn(tcp, addr, PATH_MAX);
+	printpathn(tcp, addr, PATH_MAX - 1);
 }
 
 /*
@@ -927,164 +906,6 @@
 	}
 }
 
-static bool process_vm_readv_not_supported;
-
-#ifndef HAVE_PROCESS_VM_READV
-/*
- * Need to do this since process_vm_readv() is not yet available in libc.
- * When libc is be updated, only "static bool process_vm_readv_not_supported"
- * line should remain.
- */
-/* Have to avoid duplicating with the C library headers. */
-static ssize_t strace_process_vm_readv(pid_t pid,
-		 const struct iovec *lvec,
-		 unsigned long liovcnt,
-		 const struct iovec *rvec,
-		 unsigned long riovcnt,
-		 unsigned long flags)
-{
-	return syscall(__NR_process_vm_readv, (long)pid, lvec, liovcnt, rvec, riovcnt, flags);
-}
-# define process_vm_readv strace_process_vm_readv
-#endif /* !HAVE_PROCESS_VM_READV */
-
-static ssize_t
-vm_read_mem(const pid_t pid, void *const laddr,
-	    const kernel_ulong_t raddr, const size_t len)
-{
-	const unsigned long truncated_raddr = raddr;
-
-	if (raddr != (kernel_ulong_t) truncated_raddr) {
-		errno = EIO;
-		return -1;
-	}
-
-	const struct iovec local = {
-		.iov_base = laddr,
-		.iov_len = len
-	};
-	const struct iovec remote = {
-		.iov_base = (void *) truncated_raddr,
-		.iov_len = len
-	};
-
-	return process_vm_readv(pid, &local, 1, &remote, 1, 0);
-}
-
-/*
- * move `len' bytes of data from process `pid'
- * at address `addr' to our space at `our_addr'
- */
-int
-umoven(struct tcb *const tcp, kernel_ulong_t addr, unsigned int len,
-       void *const our_addr)
-{
-	char *laddr = our_addr;
-	int pid = tcp->pid;
-	unsigned int n, m, nread;
-	union {
-		long val;
-		char x[sizeof(long)];
-	} u;
-
-#if ANY_WORDSIZE_LESS_THAN_KERNEL_LONG
-	if (current_wordsize < sizeof(addr)
-	    && (addr & (~(kernel_ulong_t) -1U))) {
-		return -1;
-	}
-#endif
-
-	if (!process_vm_readv_not_supported) {
-		int r = vm_read_mem(pid, laddr, addr, len);
-		if ((unsigned int) r == len)
-			return 0;
-		if (r >= 0) {
-			error_msg("umoven: short read (%u < %u) @0x%" PRI_klx,
-				  (unsigned int) r, len, addr);
-			return -1;
-		}
-		switch (errno) {
-			case ENOSYS:
-				process_vm_readv_not_supported = 1;
-				break;
-			case EPERM:
-				/* operation not permitted, try PTRACE_PEEKDATA */
-				break;
-			case ESRCH:
-				/* the process is gone */
-				return -1;
-			case EFAULT: case EIO:
-				/* address space is inaccessible */
-				return -1;
-			default:
-				/* all the rest is strange and should be reported */
-				perror_msg("process_vm_readv");
-				return -1;
-		}
-	}
-
-	nread = 0;
-	if (addr & (sizeof(long) - 1)) {
-		/* addr not a multiple of sizeof(long) */
-		n = addr & (sizeof(long) - 1);	/* residue */
-		addr &= -sizeof(long);		/* aligned address */
-		errno = 0;
-		u.val = ptrace(PTRACE_PEEKDATA, pid, addr, 0);
-		switch (errno) {
-			case 0:
-				break;
-			case ESRCH: case EINVAL:
-				/* these could be seen if the process is gone */
-				return -1;
-			case EFAULT: case EIO: case EPERM:
-				/* address space is inaccessible */
-				return -1;
-			default:
-				/* all the rest is strange and should be reported */
-				perror_msg("umoven: PTRACE_PEEKDATA pid:%d @0x%" PRI_klx,
-					    pid, addr);
-				return -1;
-		}
-		m = MIN(sizeof(long) - n, len);
-		memcpy(laddr, &u.x[n], m);
-		addr += sizeof(long);
-		laddr += m;
-		nread += m;
-		len -= m;
-	}
-	while (len) {
-		errno = 0;
-		u.val = ptrace(PTRACE_PEEKDATA, pid, addr, 0);
-		switch (errno) {
-			case 0:
-				break;
-			case ESRCH: case EINVAL:
-				/* these could be seen if the process is gone */
-				return -1;
-			case EFAULT: case EIO: case EPERM:
-				/* address space is inaccessible */
-				if (nread) {
-					perror_msg("umoven: short read (%u < %u) @0x%" PRI_klx,
-						   nread, nread + len, addr - nread);
-				}
-				return -1;
-			default:
-				/* all the rest is strange and should be reported */
-				perror_msg("umoven: PTRACE_PEEKDATA pid:%d @0x%" PRI_klx,
-					    pid, addr);
-				return -1;
-		}
-		m = MIN(sizeof(long), len);
-		memcpy(laddr, u.x, m);
-		addr += sizeof(long);
-		laddr += m;
-		nread += m;
-		len -= m;
-	}
-
-	return 0;
-}
-
 int
 umoven_or_printaddr(struct tcb *const tcp, const kernel_ulong_t addr,
 		    const unsigned int len, void *const our_addr)
@@ -1111,163 +932,6 @@
 }
 
 /*
- * Like `umove' but make the additional effort of looking
- * for a terminating zero byte.
- *
- * Returns < 0 on error, > 0 if NUL was seen,
- * (TODO if useful: return count of bytes including NUL),
- * else 0 if len bytes were read but no NUL byte seen.
- *
- * Note: there is no guarantee we won't overwrite some bytes
- * in laddr[] _after_ terminating NUL (but, of course,
- * we never write past laddr[len-1]).
- */
-int
-umovestr(struct tcb *const tcp, kernel_ulong_t addr, unsigned int len, char *laddr)
-{
-	const unsigned long x01010101 = (unsigned long) 0x0101010101010101ULL;
-	const unsigned long x80808080 = (unsigned long) 0x8080808080808080ULL;
-
-	int pid = tcp->pid;
-	unsigned int n, m, nread;
-	union {
-		unsigned long val;
-		char x[sizeof(long)];
-	} u;
-
-#if ANY_WORDSIZE_LESS_THAN_KERNEL_LONG
-	if (current_wordsize < sizeof(addr)
-	    && (addr & (~(kernel_ulong_t) -1U))) {
-		return -1;
-	}
-#endif
-
-	nread = 0;
-	if (!process_vm_readv_not_supported) {
-		const size_t page_size = get_pagesize();
-		const size_t page_mask = page_size - 1;
-
-		while (len > 0) {
-			unsigned int chunk_len;
-			unsigned int end_in_page;
-
-			/*
-			 * Don't cross pages, otherwise we can get EFAULT
-			 * and fail to notice that terminating NUL lies
-			 * in the existing (first) page.
-			 */
-			chunk_len = len > page_size ? page_size : len;
-			end_in_page = (addr + chunk_len) & page_mask;
-			if (chunk_len > end_in_page) /* crosses to the next page */
-				chunk_len -= end_in_page;
-
-			int r = vm_read_mem(pid, laddr, addr, chunk_len);
-			if (r > 0) {
-				if (memchr(laddr, '\0', r))
-					return 1;
-				addr += r;
-				laddr += r;
-				nread += r;
-				len -= r;
-				continue;
-			}
-			switch (errno) {
-				case ENOSYS:
-					process_vm_readv_not_supported = 1;
-					goto vm_readv_didnt_work;
-				case ESRCH:
-					/* the process is gone */
-					return -1;
-				case EPERM:
-					/* operation not permitted, try PTRACE_PEEKDATA */
-					if (!nread)
-						goto vm_readv_didnt_work;
-					/* fall through */
-				case EFAULT: case EIO:
-					/* address space is inaccessible */
-					if (nread) {
-						perror_msg("umovestr: short read (%d < %d) @0x%" PRI_klx,
-							   nread, nread + len, addr - nread);
-					}
-					return -1;
-				default:
-					/* all the rest is strange and should be reported */
-					perror_msg("process_vm_readv");
-					return -1;
-			}
-		}
-		return 0;
-	}
- vm_readv_didnt_work:
-
-	if (addr & (sizeof(long) - 1)) {
-		/* addr not a multiple of sizeof(long) */
-		n = addr & (sizeof(long) - 1);	/* residue */
-		addr &= -sizeof(long);		/* aligned address */
-		errno = 0;
-		u.val = ptrace(PTRACE_PEEKDATA, pid, addr, 0);
-		switch (errno) {
-			case 0:
-				break;
-			case ESRCH: case EINVAL:
-				/* these could be seen if the process is gone */
-				return -1;
-			case EFAULT: case EIO: case EPERM:
-				/* address space is inaccessible */
-				return -1;
-			default:
-				/* all the rest is strange and should be reported */
-				perror_msg("umovestr: PTRACE_PEEKDATA pid:%d @0x%" PRI_klx,
-					    pid, addr);
-				return -1;
-		}
-		m = MIN(sizeof(long) - n, len);
-		memcpy(laddr, &u.x[n], m);
-		while (n & (sizeof(long) - 1))
-			if (u.x[n++] == '\0')
-				return 1;
-		addr += sizeof(long);
-		laddr += m;
-		nread += m;
-		len -= m;
-	}
-
-	while (len) {
-		errno = 0;
-		u.val = ptrace(PTRACE_PEEKDATA, pid, addr, 0);
-		switch (errno) {
-			case 0:
-				break;
-			case ESRCH: case EINVAL:
-				/* these could be seen if the process is gone */
-				return -1;
-			case EFAULT: case EIO: case EPERM:
-				/* address space is inaccessible */
-				if (nread) {
-					perror_msg("umovestr: short read (%d < %d) @0x%" PRI_klx,
-						   nread, nread + len, addr - nread);
-				}
-				return -1;
-			default:
-				/* all the rest is strange and should be reported */
-				perror_msg("umovestr: PTRACE_PEEKDATA pid:%d @0x%" PRI_klx,
-					   pid, addr);
-				return -1;
-		}
-		m = MIN(sizeof(long), len);
-		memcpy(laddr, u.x, m);
-		/* "If a NUL char exists in this word" */
-		if ((u.val - x01010101) & ~u.val & x80808080)
-			return 1;
-		addr += sizeof(long);
-		laddr += m;
-		nread += m;
-		len -= m;
-	}
-	return 0;
-}
-
-/*
  * Iteratively fetch and print up to nmemb elements of elem_size size
  * from the array that starts at tracee's address start_addr.
  *
diff --git a/v4l2.c b/v4l2.c
index 12750a6..097b13a 100644
--- a/v4l2.c
+++ b/v4l2.c
@@ -57,6 +57,8 @@
 
 #include MPERS_DEFS
 
+#include "print_fields.h"
+
 /* some historical constants */
 #ifndef V4L2_CID_HCENTER
 #define V4L2_CID_HCENTER (V4L2_CID_BASE+22)
@@ -144,16 +146,10 @@
 		return 0;
 	tprints(", ");
 	if (umove_or_printaddr(tcp, arg, &caps))
-		return 1;
-	tprints("{driver=");
-	print_quoted_string((const char *) caps.driver,
-			    sizeof(caps.driver), QUOTE_0_TERMINATED);
-	tprints(", card=");
-	print_quoted_string((const char *) caps.card,
-			    sizeof(caps.card), QUOTE_0_TERMINATED);
-	tprints(", bus_info=");
-	print_quoted_string((const char *) caps.bus_info,
-			    sizeof(caps.bus_info), QUOTE_0_TERMINATED);
+		return RVAL_IOCTL_DECODED;
+	PRINT_FIELD_CSTRING("{", caps, driver);
+	PRINT_FIELD_CSTRING(", ", caps, card);
+	PRINT_FIELD_CSTRING(", ", caps, bus_info);
 	tprintf(", version=%u.%u.%u, capabilities=",
 		(caps.version >> 16) & 0xFF,
 		(caps.version >> 8) & 0xFF,
@@ -166,7 +162,7 @@
 		   "V4L2_CAP_???");
 #endif
 	tprints("}");
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 #include "xlat/v4l2_buf_types.h"
@@ -180,7 +176,7 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &f))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprintf("{index=%u, type=", f.index);
 		printxval(v4l2_buf_types, f.type, "V4L2_BUF_TYPE_???");
 		return 0;
@@ -190,15 +186,12 @@
 		tprints(", flags=");
 		printflags(v4l2_format_description_flags, f.flags,
 			   "V4L2_FMT_FLAG_???");
-		tprints(", description=");
-		print_quoted_string((const char *) f.description,
-				    sizeof(f.description),
-				    QUOTE_0_TERMINATED);
+		PRINT_FIELD_CSTRING(", ", f, description);
 		tprints(", pixelformat=");
 		print_pixelformat(f.pixelformat);
 	}
 	tprints("}");
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 #include "xlat/v4l2_fields.h"
@@ -361,23 +354,25 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &f))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprints("{type=");
 		printxval(v4l2_buf_types, f.type, "V4L2_BUF_TYPE_???");
 		if (is_get)
 			return 0;
 		if (!print_v4l2_format_fmt(tcp, ", ", &f)) {
 			tprints("}");
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		}
-	} else {
-		if (!syserror(tcp) && !umove(tcp, arg, &f)) {
-			const char *delim = is_get ? ", " : " => ";
-			print_v4l2_format_fmt(tcp, delim, &f);
-		}
-		tprints("}");
+
+		return 0;
 	}
-	return 1;
+
+	if (!syserror(tcp) && !umove(tcp, arg, &f))
+		print_v4l2_format_fmt(tcp, is_get ? ", " : " => ", &f);
+
+	tprints("}");
+
+	return RVAL_IOCTL_DECODED;
 }
 
 #include "xlat/v4l2_memories.h"
@@ -389,23 +384,31 @@
 
 	if (entering(tcp)) {
 		tprints(", ");
+
 		if (umove_or_printaddr(tcp, arg, &reqbufs))
-			return RVAL_DECODED | 1;
-		tprintf("{count=%u, type=", reqbufs.count);
+			return RVAL_IOCTL_DECODED;
+
+		tprintf("{type=");
 		printxval(v4l2_buf_types, reqbufs.type, "V4L2_BUF_TYPE_???");
 		tprints(", memory=");
 		printxval(v4l2_memories, reqbufs.memory, "V4L2_MEMORY_???");
-		tprints("}");
-		return 0;
-	} else {
-		static char outstr[sizeof("{count=}") + sizeof(int) * 3];
+		tprintf(", count=%u", reqbufs.count);
 
-		if (syserror(tcp) || umove(tcp, arg, &reqbufs) < 0)
-			return 1;
-		sprintf(outstr, "{count=%u}", reqbufs.count);
-		tcp->auxstr = outstr;
-		return 1 + RVAL_STR;
+		return 0;
 	}
+
+	if (!syserror(tcp)) {
+		tprints(" => ");
+
+		if (!umove(tcp, arg, &reqbufs))
+			tprintf("%u", reqbufs.count);
+		else
+			tprints("???");
+	}
+
+	tprints("}");
+
+	return RVAL_IOCTL_DECODED;
 }
 
 #include "xlat/v4l2_buf_flags.h"
@@ -419,37 +422,41 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &b))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprints("{type=");
 		printxval(v4l2_buf_types, b.type, "V4L2_BUF_TYPE_???");
 		if (code != VIDIOC_DQBUF)
 			tprintf(", index=%u", b.index);
-	} else {
-		if (!syserror(tcp) && umove(tcp, arg, &b) == 0) {
-			if (code == VIDIOC_DQBUF)
-				tprintf(", index=%u", b.index);
-			tprints(", memory=");
-			printxval(v4l2_memories, b.memory, "V4L2_MEMORY_???");
 
-			if (b.memory == V4L2_MEMORY_MMAP) {
-				tprintf(", m.offset=%#x", b.m.offset);
-			} else if (b.memory == V4L2_MEMORY_USERPTR) {
-				tprints(", m.userptr=");
-				printaddr(b.m.userptr);
-			}
-
-			tprintf(", length=%u, bytesused=%u, flags=",
-				b.length, b.bytesused);
-			printflags(v4l2_buf_flags, b.flags, "V4L2_BUF_FLAG_???");
-			if (code == VIDIOC_DQBUF) {
-				tprints(", timestamp = ");
-				MPERS_FUNC_NAME(print_struct_timeval)(&b.timestamp);
-			}
-			tprints(", ...");
-		}
-		tprints("}");
+		return 0;
 	}
-	return 1;
+
+	if (!syserror(tcp) && !umove(tcp, arg, &b)) {
+		if (code == VIDIOC_DQBUF)
+			tprintf(", index=%u", b.index);
+		tprints(", memory=");
+		printxval(v4l2_memories, b.memory, "V4L2_MEMORY_???");
+
+		if (b.memory == V4L2_MEMORY_MMAP) {
+			tprintf(", m.offset=%#x", b.m.offset);
+		} else if (b.memory == V4L2_MEMORY_USERPTR) {
+			tprints(", m.userptr=");
+			printaddr(b.m.userptr);
+		}
+
+		tprintf(", length=%u, bytesused=%u, flags=",
+			b.length, b.bytesused);
+		printflags(v4l2_buf_flags, b.flags, "V4L2_BUF_FLAG_???");
+		if (code == VIDIOC_DQBUF) {
+			tprints(", timestamp = ");
+			MPERS_FUNC_NAME(print_struct_timeval)(&b.timestamp);
+		}
+		tprints(", ...");
+	}
+
+	tprints("}");
+
+	return RVAL_IOCTL_DECODED;
 }
 
 static int
@@ -465,7 +472,7 @@
 		tprints("}");
 	}
 
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 static int
@@ -479,7 +486,7 @@
 		printxval(v4l2_buf_types, type, "V4L2_BUF_TYPE_???");
 		tprints("]");
 	}
-	return RVAL_DECODED | 1;
+	return RVAL_IOCTL_DECODED;
 }
 
 #include "xlat/v4l2_streaming_capabilities.h"
@@ -494,7 +501,7 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &s))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprints("{type=");
 		printxval(v4l2_buf_types, s.type, "V4L2_BUF_TYPE_???");
 		switch (s.type) {
@@ -506,12 +513,12 @@
 				break;
 			default:
 				tprints("}");
-				return RVAL_DECODED | 1;
+				return RVAL_IOCTL_DECODED;
 		}
 	} else {
 		if (syserror(tcp) || umove(tcp, arg, &s) < 0) {
 			tprints("}");
-			return 1;
+			return RVAL_IOCTL_DECODED;
 		}
 		tprints(is_get ? ", " : " => ");
 	}
@@ -545,9 +552,12 @@
 			s.parm.output.extendedmode,
 			s.parm.output.writebuffers);
 	}
-	if (exiting(tcp))
+	if (entering(tcp)) {
+		return 0;
+	} else {
 		tprints("}");
-	return 1;
+		return RVAL_IOCTL_DECODED;
+	}
 }
 
 static int
@@ -558,21 +568,22 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &s))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprintf("{index=%u", s.index);
-	} else {
-		if (!syserror(tcp) && !umove(tcp, arg, &s)) {
-			tprints(", name=");
-			print_quoted_string((const char *) s.name,
-					    sizeof(s.name),
-					    QUOTE_0_TERMINATED);
-			tprintf(", frameperiod=" FMT_FRACT,
-				ARGS_FRACT(s.frameperiod));
-			tprintf(", framelines=%d", s.framelines);
-		}
-		tprints("}");
+
+		return 0;
 	}
-	return 1;
+
+	if (!syserror(tcp) && !umove(tcp, arg, &s)) {
+		PRINT_FIELD_CSTRING(", ", s, name);
+		tprintf(", frameperiod=" FMT_FRACT,
+			ARGS_FRACT(s.frameperiod));
+		tprintf(", framelines=%d", s.framelines);
+	}
+
+	tprints("}");
+
+	return RVAL_IOCTL_DECODED;
 }
 
 #include "xlat/v4l2_input_types.h"
@@ -585,21 +596,21 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &i))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprintf("{index=%u", i.index);
-	} else {
-		if (!syserror(tcp) && !umove(tcp, arg, &i)) {
-			tprints(", name=");
-			print_quoted_string((const char *) i.name,
-					    sizeof(i.name),
-					    QUOTE_0_TERMINATED);
-			tprints(", type=");
-			printxval(v4l2_input_types, i.type,
-				  "V4L2_INPUT_TYPE_???");
-		}
-		tprints("}");
+
+		return 0;
 	}
-	return 1;
+
+	if (!syserror(tcp) && !umove(tcp, arg, &i)) {
+		PRINT_FIELD_CSTRING(", ", i, name);
+		tprints(", type=");
+		printxval(v4l2_input_types, i.type, "V4L2_INPUT_TYPE_???");
+	}
+
+	tprints("}");
+
+	return RVAL_IOCTL_DECODED;
 }
 
 #include "xlat/v4l2_control_ids.h"
@@ -613,7 +624,7 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &c))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprints("{id=");
 		printxval(v4l2_control_ids, c.id, "V4L2_CID_???");
 		if (!is_get)
@@ -627,7 +638,8 @@
 	}
 
 	tprints("}");
-	return 1;
+
+	return RVAL_IOCTL_DECODED;
 }
 
 #include "xlat/v4l2_tuner_types.h"
@@ -643,7 +655,7 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &c))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprintf("{index=%u", c.index);
 		if (is_get)
 			return 0;
@@ -651,14 +663,12 @@
 	} else {
 		if (syserror(tcp) || umove(tcp, arg, &c) < 0) {
 			tprints("}");
-			return 1;
+			return RVAL_IOCTL_DECODED;
 		}
 		tprints(is_get ? ", " : " => ");
 	}
 
-	tprints("name=");
-	print_quoted_string((const char *) c.name, sizeof(c.name),
-			    QUOTE_0_TERMINATED);
+	PRINT_FIELD_CSTRING("", c, name);
 	tprints(", type=");
 	printxval(v4l2_tuner_types, c.type, "V4L2_TUNER_TYPE_???");
 	tprints(", capability=");
@@ -673,9 +683,12 @@
 		  "V4L2_TUNER_MODE_???");
 	tprintf(", signal=%d, afc=%d", c.signal, c.afc);
 
-	if (exiting(tcp))
+	if (entering(tcp)) {
+		return 0;
+	} else {
 		tprints("}");
-	return 1;
+		return RVAL_IOCTL_DECODED;
+	}
 }
 
 #include "xlat/v4l2_control_types.h"
@@ -689,12 +702,12 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &c))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprints("{id=");
 	} else {
 		if (syserror(tcp) || umove(tcp, arg, &c) < 0) {
 			tprints("}");
-			return 1;
+			return RVAL_IOCTL_DECODED;
 		}
 		if (get_tcb_priv_ulong(tcp))
 			tprints(" => ");
@@ -715,17 +728,14 @@
 	if (exiting(tcp)) {
 		tprints(", type=");
 		printxval(v4l2_control_types, c.type, "V4L2_CTRL_TYPE_???");
-		tprints(", name=");
-		print_quoted_string((const char *) c.name,
-				    sizeof(c.name),
-				    QUOTE_0_TERMINATED);
+		PRINT_FIELD_CSTRING(", ", c, name);
 		tprintf(", minimum=%d, maximum=%d, step=%d"
 			", default_value=%d, flags=",
 			c.minimum, c.maximum, c.step, c.default_value);
 		printflags(v4l2_control_flags, c.flags, "V4L2_CTRL_FLAG_???");
 		tprints("}");
 	}
-	return 1;
+	return entering(tcp) ? 0 : RVAL_IOCTL_DECODED;
 }
 
 static int
@@ -736,11 +746,13 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &c))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprints("{type=");
 		printxval(v4l2_buf_types, c.type, "V4L2_BUF_TYPE_???");
+
 		return 0;
 	}
+
 	if (!syserror(tcp) && !umove(tcp, arg, &c)) {
 		tprintf(", bounds=" FMT_RECT
 			", defrect=" FMT_RECT
@@ -749,8 +761,10 @@
 			ARGS_RECT(c.defrect),
 			ARGS_FRACT(c.pixelaspect));
 	}
+
 	tprints("}");
-	return 1;
+
+	return RVAL_IOCTL_DECODED;
 }
 
 static int
@@ -762,7 +776,7 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &c))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprints("{type=");
 		printxval(v4l2_buf_types, c.type, "V4L2_BUF_TYPE_???");
 		if (is_get)
@@ -774,7 +788,8 @@
 	}
 
 	tprints("}");
-	return RVAL_DECODED | 1;
+
+	return RVAL_IOCTL_DECODED;
 }
 
 #ifdef VIDIOC_S_EXT_CTRLS
@@ -809,14 +824,14 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &c))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprints("{ctrl_class=");
 		printxval(v4l2_control_classes, c.ctrl_class,
 			  "V4L2_CTRL_CLASS_???");
 		tprintf(", count=%u", c.count);
 		if (!c.count) {
 			tprints("}");
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		}
 		if (is_get)
 			return 0;
@@ -824,7 +839,7 @@
 	} else {
 		if (umove(tcp, arg, &c) < 0) {
 			tprints("}");
-			return 1;
+			return RVAL_IOCTL_DECODED;
 		}
 		tprints(is_get ? ", " : " => ");
 	}
@@ -841,9 +856,11 @@
 
 	if (exiting(tcp) || fail) {
 		tprints("}");
-		return RVAL_DECODED | 1;
+		return RVAL_IOCTL_DECODED;
 	}
-	return 1;
+
+	/* entering */
+	return 0;
 }
 #endif /* VIDIOC_S_EXT_CTRLS */
 
@@ -858,7 +875,7 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &s))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprintf("{index=%u, pixel_format=", s.index);
 		print_pixelformat(s.pixel_format);
 		return 0;
@@ -883,7 +900,7 @@
 		}
 	}
 	tprints("}");
-	return 1;
+	return RVAL_IOCTL_DECODED;
 }
 #endif /* VIDIOC_ENUM_FRAMESIZES */
 
@@ -898,12 +915,13 @@
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &f))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprintf("{index=%u, pixel_format=", f.index);
 		print_pixelformat(f.pixel_format);
 		tprintf(", width=%u, height=%u", f.width, f.height);
 		return 0;
 	}
+
 	if (!syserror(tcp) && !umove(tcp, arg, &f)) {
 		tprints(", type=");
 		printxval(v4l2_frameinterval_types, f.type,
@@ -923,8 +941,10 @@
 			break;
 		}
 	}
+
 	tprints("}");
-	return 1;
+
+	return RVAL_IOCTL_DECODED;
 }
 #endif /* VIDIOC_ENUM_FRAMEINTERVALS */
 
@@ -932,12 +952,15 @@
 static int
 print_v4l2_create_buffers(struct tcb *const tcp, const kernel_ulong_t arg)
 {
+	static const char fmt[] = "{index=%u, count=%u}";
+	static char outstr[sizeof(fmt) + sizeof(int) * 6];
+
 	struct_v4l2_create_buffers b;
 
 	if (entering(tcp)) {
 		tprints(", ");
 		if (umove_or_printaddr(tcp, arg, &b))
-			return RVAL_DECODED | 1;
+			return RVAL_IOCTL_DECODED;
 		tprintf("{count=%u, memory=", b.count);
 		printxval(v4l2_memories, b.memory, "V4L2_MEMORY_???");
 		tprints(", format={type=");
@@ -947,16 +970,15 @@
 				      (struct_v4l2_format *) &b.format);
 		tprints("}}");
 		return 0;
-	} else {
-		static const char fmt[] = "{index=%u, count=%u}";
-		static char outstr[sizeof(fmt) + sizeof(int) * 6];
-
-		if (syserror(tcp) || umove(tcp, arg, &b) < 0)
-			return 1;
-		sprintf(outstr, fmt, b.index, b.count);
-		tcp->auxstr = outstr;
-		return 1 + RVAL_STR;
 	}
+
+	if (syserror(tcp) || umove(tcp, arg, &b))
+		return RVAL_IOCTL_DECODED;
+
+	sprintf(outstr, fmt, b.index, b.count);
+	tcp->auxstr = outstr;
+
+	return RVAL_IOCTL_DECODED | RVAL_STR;
 }
 #endif /* VIDIOC_CREATE_BUFS */
 
@@ -1008,7 +1030,7 @@
 	case VIDIOC_S_STD: /* W */
 		tprints(", ");
 		printnum_int64(tcp, arg, "%#" PRIx64);
-		return RVAL_DECODED | 1;
+		break;
 
 	case VIDIOC_ENUMSTD: /* RW */
 		return print_v4l2_standard(tcp, arg);
@@ -1034,7 +1056,7 @@
 	case VIDIOC_S_INPUT: /* RW */
 		tprints(", ");
 		printnum_int(tcp, arg, "%u");
-		return RVAL_DECODED | 1;
+		break;
 
 	case VIDIOC_CROPCAP: /* RW */
 		return print_v4l2_cropcap(tcp, arg);
@@ -1069,4 +1091,6 @@
 	default:
 		return RVAL_DECODED;
 	}
+
+	return RVAL_IOCTL_DECODED;
 }
diff --git a/xlat/Makemodule.am b/xlat/Makemodule.am
index f0f08f4..357af0a 100644
--- a/xlat/Makemodule.am
+++ b/xlat/Makemodule.am
@@ -1,5 +1,5 @@
-XLAT_INPUT_FILES = xlat/access_flags.in xlat/addrfams.in xlat/adjtimex_modes.in xlat/adjtimex_state.in xlat/adjtimex_status.in xlat/advise.in xlat/af_packet_types.in xlat/archvals.in xlat/arp_hardware_types.in xlat/at_flags.in xlat/at_statx_sync_types.in xlat/atomic_ops.in xlat/audit_arch.in xlat/baud_options.in xlat/blkpg_ops.in xlat/bootflags1.in xlat/bootflags2.in xlat/bootflags3.in xlat/bpf_attach_flags.in xlat/bpf_attach_type.in xlat/bpf_class.in xlat/bpf_commands.in xlat/bpf_map_types.in xlat/bpf_map_update_elem_flags.in xlat/bpf_miscop.in xlat/bpf_mode.in xlat/bpf_op_alu.in xlat/bpf_op_jmp.in xlat/bpf_prog_types.in xlat/bpf_rval.in xlat/bpf_size.in xlat/bpf_src.in xlat/bsg_flags.in xlat/bsg_protocol.in xlat/bsg_subprotocol.in xlat/bt_protocols.in xlat/btrfs_balance_args.in xlat/btrfs_balance_ctl_cmds.in xlat/btrfs_balance_flags.in xlat/btrfs_balance_state.in xlat/btrfs_compress_types.in xlat/btrfs_defrag_flags.in xlat/btrfs_dev_replace_cmds.in xlat/btrfs_dev_replace_results.in xlat/btrfs_dev_replace_state.in xlat/btrfs_dev_stats_flags.in xlat/btrfs_dev_stats_values.in xlat/btrfs_features_compat.in xlat/btrfs_features_compat_ro.in xlat/btrfs_features_incompat.in xlat/btrfs_key_types.in xlat/btrfs_qgroup_ctl_cmds.in xlat/btrfs_qgroup_inherit_flags.in xlat/btrfs_qgroup_limit_flags.in xlat/btrfs_qgroup_status_flags.in xlat/btrfs_scrub_flags.in xlat/btrfs_send_flags.in xlat/btrfs_snap_flags_v2.in xlat/btrfs_space_info_flags.in xlat/btrfs_tree_objectids.in xlat/cacheflush_scope.in xlat/cap.in xlat/cap_mask0.in xlat/cap_mask1.in xlat/cap_version.in xlat/clockflags.in xlat/clocknames.in xlat/clone_flags.in xlat/cpuclocknames.in xlat/delete_module_flags.in xlat/dirent_types.in xlat/dm_flags.in xlat/efd_flags.in xlat/epollctls.in xlat/epollevents.in xlat/epollflags.in xlat/ethernet_protocols.in xlat/evdev_abs.in xlat/evdev_autorepeat.in xlat/evdev_ev.in xlat/evdev_ff_status.in xlat/evdev_ff_types.in xlat/evdev_keycode.in xlat/evdev_leds.in xlat/evdev_misc.in xlat/evdev_mtslots.in xlat/evdev_prop.in xlat/evdev_relative_axes.in xlat/evdev_snd.in xlat/evdev_switch.in xlat/evdev_sync.in xlat/f_owner_types.in xlat/f_seals.in xlat/falloc_flags.in xlat/fan_classes.in xlat/fan_event_flags.in xlat/fan_init_flags.in xlat/fan_mark_flags.in xlat/fcntl64cmds.in xlat/fcntlcmds.in xlat/fdflags.in xlat/fiemap_extent_flags.in xlat/fiemap_flags.in xlat/flockcmds.in xlat/fsmagic.in xlat/futexops.in xlat/futexwakecmps.in xlat/futexwakeops.in xlat/getrandom_flags.in xlat/getsockipoptions.in xlat/getsockipv6options.in xlat/hci_channels.in xlat/hw_breakpoint_len.in xlat/hw_breakpoint_type.in xlat/icmpfilterflags.in xlat/if_dqblk_valid.in xlat/if_dqinfo_flags.in xlat/if_dqinfo_valid.in xlat/iffflags.in xlat/inet_diag_attrs.in xlat/inet_diag_extended_flags.in xlat/inet_diag_req_attrs.in xlat/inet_protocols.in xlat/inotify_flags.in xlat/inotify_init_flags.in xlat/ioctl_dirs.in xlat/ioprio_class.in xlat/ioprio_who.in xlat/ip_cmsg_types.in xlat/ipc_msg_flags.in xlat/ipccalls.in xlat/itimer_which.in xlat/kcmp_types.in xlat/kexec_arch_values.in xlat/kexec_file_load_flags.in xlat/kexec_load_flags.in xlat/key_perms.in xlat/key_reqkeys.in xlat/key_spec.in xlat/keyctl_commands.in xlat/lockfcmds.in xlat/loop_cmds.in xlat/loop_crypt_type_options.in xlat/loop_flags_options.in xlat/madvise_cmds.in xlat/mbindflags.in xlat/mctl_sync.in xlat/membarrier_cmds.in xlat/memfd_create_flags.in xlat/mempolicyflags.in xlat/mlock_flags.in xlat/mlockall_flags.in xlat/mmap_flags.in xlat/mmap_prot.in xlat/modem_flags.in xlat/modetypes.in xlat/module_init_flags.in xlat/mount_flags.in xlat/move_pages_flags.in xlat/mq_attr_flags.in xlat/mremap_flags.in xlat/msg_flags.in xlat/msgctl_flags.in xlat/mtd_file_mode_options.in xlat/mtd_flags_options.in xlat/mtd_mode_options.in xlat/mtd_nandecc_options.in xlat/mtd_otp_options.in xlat/mtd_type_options.in xlat/name_to_handle_at_flags.in xlat/netlink_diag_attrs.in xlat/netlink_diag_show.in xlat/netlink_flags.in xlat/netlink_get_flags.in xlat/netlink_new_flags.in xlat/netlink_protocols.in xlat/netlink_socket_flags.in xlat/netlink_states.in xlat/netlink_types.in xlat/nl_audit_types.in xlat/nl_netfilter_msg_types.in xlat/nl_netfilter_subsys_ids.in xlat/nl_route_types.in xlat/nl_selinux_types.in xlat/nl_sock_diag_types.in xlat/nl_xfrm_types.in xlat/notifyflags.in xlat/nt_descriptor_types.in xlat/open_access_modes.in xlat/open_mode_flags.in xlat/packet_diag_attrs.in xlat/packet_diag_show.in xlat/packet_mreq_type.in xlat/perf_attr_size.in xlat/perf_branch_sample_type.in xlat/perf_event_open_flags.in xlat/perf_event_read_format.in xlat/perf_event_sample_format.in xlat/perf_hw_cache_id.in xlat/perf_hw_cache_op_id.in xlat/perf_hw_cache_op_result_id.in xlat/perf_hw_id.in xlat/perf_sw_ids.in xlat/perf_type_id.in xlat/personality_flags.in xlat/personality_types.in xlat/pkey_access.in xlat/policies.in xlat/pollflags.in xlat/pr_cap_ambient.in xlat/pr_dumpable.in xlat/pr_fp_mode.in xlat/pr_mce_kill.in xlat/pr_mce_kill_policy.in xlat/pr_set_mm.in xlat/pr_tsc.in xlat/pr_unalign_flags.in xlat/prctl_options.in xlat/priorities.in xlat/ptp_flags_options.in xlat/ptrace_cmds.in xlat/ptrace_events.in xlat/ptrace_peeksiginfo_flags.in xlat/ptrace_setoptions_flags.in xlat/quota_formats.in xlat/quotacmds.in xlat/quotatypes.in xlat/rename_flags.in xlat/resource_flags.in xlat/resources.in xlat/rwf_flags.in xlat/sa_handler_values.in xlat/sched_flags.in xlat/schedulers.in xlat/scmvals.in xlat/scsi_sg_commands.in xlat/secbits.in xlat/seccomp_filter_flags.in xlat/seccomp_mode.in xlat/seccomp_ops.in xlat/seccomp_ret_action.in xlat/semctl_flags.in xlat/semop_flags.in xlat/setns_types.in xlat/setsockipoptions.in xlat/setsockipv6options.in xlat/sfd_flags.in xlat/sg_io_dxfer_direction.in xlat/sg_io_flags.in xlat/sg_io_info.in xlat/sg_scsi_reset.in xlat/shm_flags.in xlat/shm_resource_flags.in xlat/shmctl_flags.in xlat/shutdown_modes.in xlat/sigact_flags.in xlat/sigaltstack_flags.in xlat/sigbus_codes.in xlat/sigchld_codes.in xlat/sigemt_codes.in xlat/sigev_value.in xlat/sigfpe_codes.in xlat/sigill_codes.in xlat/siginfo_codes.in xlat/sigpoll_codes.in xlat/sigprocmaskcmds.in xlat/sigprof_codes.in xlat/sigsegv_codes.in xlat/sigsys_codes.in xlat/sigtrap_codes.in xlat/smc_diag_attrs.in xlat/smc_diag_extended_flags.in xlat/smc_states.in xlat/sock_type_flags.in xlat/socketcalls.in xlat/socketlayers.in xlat/sockipoptions.in xlat/sockipv6options.in xlat/sockipxoptions.in xlat/sockoptions.in xlat/sockpacketoptions.in xlat/sockrawoptions.in xlat/socksctpoptions.in xlat/socktcpoptions.in xlat/socktypes.in xlat/splice_flags.in xlat/sram_alloc_flags.in xlat/statfs_flags.in xlat/statx_attrs.in xlat/statx_masks.in xlat/swap_flags.in xlat/sync_file_range_flags.in xlat/sysctl_kern.in xlat/sysctl_net.in xlat/sysctl_net_core.in xlat/sysctl_net_ipv4.in xlat/sysctl_net_ipv4_conf.in xlat/sysctl_net_ipv4_route.in xlat/sysctl_net_ipv6.in xlat/sysctl_net_ipv6_route.in xlat/sysctl_net_unix.in xlat/sysctl_root.in xlat/sysctl_vm.in xlat/syslog_action_type.in xlat/sysmips_operations.in xlat/tcflsh_options.in xlat/tcp_state_flags.in xlat/tcp_states.in xlat/tcxonc_options.in xlat/timerfdflags.in xlat/ubi_volume_props.in xlat/ubi_volume_types.in xlat/uffd_api_flags.in xlat/uffd_copy_flags.in xlat/uffd_flags.in xlat/uffd_register_ioctl_flags.in xlat/uffd_register_mode_flags.in xlat/uffd_zeropage_flags.in xlat/umount_flags.in xlat/unix_diag_attrs.in xlat/unix_diag_show.in xlat/unshare_flags.in xlat/usagewho.in xlat/v4l2_buf_flags.in xlat/v4l2_buf_types.in xlat/v4l2_capture_modes.in xlat/v4l2_colorspaces.in xlat/v4l2_control_classes.in xlat/v4l2_control_flags.in xlat/v4l2_control_ids.in xlat/v4l2_control_types.in xlat/v4l2_device_capabilities_flags.in xlat/v4l2_fields.in xlat/v4l2_format_description_flags.in xlat/v4l2_frameinterval_types.in xlat/v4l2_framesize_types.in xlat/v4l2_input_types.in xlat/v4l2_memories.in xlat/v4l2_sliced_flags.in xlat/v4l2_streaming_capabilities.in xlat/v4l2_tuner_audmodes.in xlat/v4l2_tuner_capabilities.in xlat/v4l2_tuner_rxsubchanses.in xlat/v4l2_tuner_types.in xlat/v4l2_vbi_flags.in xlat/wait4_options.in xlat/waitid_types.in xlat/whence_codes.in xlat/xattrflags.in xlat/xfs_dqblk_flags.in xlat/xfs_quota_flags.in 
-XLAT_HEADER_FILES = xlat/access_flags.h xlat/addrfams.h xlat/adjtimex_modes.h xlat/adjtimex_state.h xlat/adjtimex_status.h xlat/advise.h xlat/af_packet_types.h xlat/archvals.h xlat/arp_hardware_types.h xlat/at_flags.h xlat/at_statx_sync_types.h xlat/atomic_ops.h xlat/audit_arch.h xlat/baud_options.h xlat/blkpg_ops.h xlat/bootflags1.h xlat/bootflags2.h xlat/bootflags3.h xlat/bpf_attach_flags.h xlat/bpf_attach_type.h xlat/bpf_class.h xlat/bpf_commands.h xlat/bpf_map_types.h xlat/bpf_map_update_elem_flags.h xlat/bpf_miscop.h xlat/bpf_mode.h xlat/bpf_op_alu.h xlat/bpf_op_jmp.h xlat/bpf_prog_types.h xlat/bpf_rval.h xlat/bpf_size.h xlat/bpf_src.h xlat/bsg_flags.h xlat/bsg_protocol.h xlat/bsg_subprotocol.h xlat/bt_protocols.h xlat/btrfs_balance_args.h xlat/btrfs_balance_ctl_cmds.h xlat/btrfs_balance_flags.h xlat/btrfs_balance_state.h xlat/btrfs_compress_types.h xlat/btrfs_defrag_flags.h xlat/btrfs_dev_replace_cmds.h xlat/btrfs_dev_replace_results.h xlat/btrfs_dev_replace_state.h xlat/btrfs_dev_stats_flags.h xlat/btrfs_dev_stats_values.h xlat/btrfs_features_compat.h xlat/btrfs_features_compat_ro.h xlat/btrfs_features_incompat.h xlat/btrfs_key_types.h xlat/btrfs_qgroup_ctl_cmds.h xlat/btrfs_qgroup_inherit_flags.h xlat/btrfs_qgroup_limit_flags.h xlat/btrfs_qgroup_status_flags.h xlat/btrfs_scrub_flags.h xlat/btrfs_send_flags.h xlat/btrfs_snap_flags_v2.h xlat/btrfs_space_info_flags.h xlat/btrfs_tree_objectids.h xlat/cacheflush_scope.h xlat/cap.h xlat/cap_mask0.h xlat/cap_mask1.h xlat/cap_version.h xlat/clockflags.h xlat/clocknames.h xlat/clone_flags.h xlat/cpuclocknames.h xlat/delete_module_flags.h xlat/dirent_types.h xlat/dm_flags.h xlat/efd_flags.h xlat/epollctls.h xlat/epollevents.h xlat/epollflags.h xlat/ethernet_protocols.h xlat/evdev_abs.h xlat/evdev_autorepeat.h xlat/evdev_ev.h xlat/evdev_ff_status.h xlat/evdev_ff_types.h xlat/evdev_keycode.h xlat/evdev_leds.h xlat/evdev_misc.h xlat/evdev_mtslots.h xlat/evdev_prop.h xlat/evdev_relative_axes.h xlat/evdev_snd.h xlat/evdev_switch.h xlat/evdev_sync.h xlat/f_owner_types.h xlat/f_seals.h xlat/falloc_flags.h xlat/fan_classes.h xlat/fan_event_flags.h xlat/fan_init_flags.h xlat/fan_mark_flags.h xlat/fcntl64cmds.h xlat/fcntlcmds.h xlat/fdflags.h xlat/fiemap_extent_flags.h xlat/fiemap_flags.h xlat/flockcmds.h xlat/fsmagic.h xlat/futexops.h xlat/futexwakecmps.h xlat/futexwakeops.h xlat/getrandom_flags.h xlat/getsockipoptions.h xlat/getsockipv6options.h xlat/hci_channels.h xlat/hw_breakpoint_len.h xlat/hw_breakpoint_type.h xlat/icmpfilterflags.h xlat/if_dqblk_valid.h xlat/if_dqinfo_flags.h xlat/if_dqinfo_valid.h xlat/iffflags.h xlat/inet_diag_attrs.h xlat/inet_diag_extended_flags.h xlat/inet_diag_req_attrs.h xlat/inet_protocols.h xlat/inotify_flags.h xlat/inotify_init_flags.h xlat/ioctl_dirs.h xlat/ioprio_class.h xlat/ioprio_who.h xlat/ip_cmsg_types.h xlat/ipc_msg_flags.h xlat/ipccalls.h xlat/itimer_which.h xlat/kcmp_types.h xlat/kexec_arch_values.h xlat/kexec_file_load_flags.h xlat/kexec_load_flags.h xlat/key_perms.h xlat/key_reqkeys.h xlat/key_spec.h xlat/keyctl_commands.h xlat/lockfcmds.h xlat/loop_cmds.h xlat/loop_crypt_type_options.h xlat/loop_flags_options.h xlat/madvise_cmds.h xlat/mbindflags.h xlat/mctl_sync.h xlat/membarrier_cmds.h xlat/memfd_create_flags.h xlat/mempolicyflags.h xlat/mlock_flags.h xlat/mlockall_flags.h xlat/mmap_flags.h xlat/mmap_prot.h xlat/modem_flags.h xlat/modetypes.h xlat/module_init_flags.h xlat/mount_flags.h xlat/move_pages_flags.h xlat/mq_attr_flags.h xlat/mremap_flags.h xlat/msg_flags.h xlat/msgctl_flags.h xlat/mtd_file_mode_options.h xlat/mtd_flags_options.h xlat/mtd_mode_options.h xlat/mtd_nandecc_options.h xlat/mtd_otp_options.h xlat/mtd_type_options.h xlat/name_to_handle_at_flags.h xlat/netlink_diag_attrs.h xlat/netlink_diag_show.h xlat/netlink_flags.h xlat/netlink_get_flags.h xlat/netlink_new_flags.h xlat/netlink_protocols.h xlat/netlink_socket_flags.h xlat/netlink_states.h xlat/netlink_types.h xlat/nl_audit_types.h xlat/nl_netfilter_msg_types.h xlat/nl_netfilter_subsys_ids.h xlat/nl_route_types.h xlat/nl_selinux_types.h xlat/nl_sock_diag_types.h xlat/nl_xfrm_types.h xlat/notifyflags.h xlat/nt_descriptor_types.h xlat/open_access_modes.h xlat/open_mode_flags.h xlat/packet_diag_attrs.h xlat/packet_diag_show.h xlat/packet_mreq_type.h xlat/perf_attr_size.h xlat/perf_branch_sample_type.h xlat/perf_event_open_flags.h xlat/perf_event_read_format.h xlat/perf_event_sample_format.h xlat/perf_hw_cache_id.h xlat/perf_hw_cache_op_id.h xlat/perf_hw_cache_op_result_id.h xlat/perf_hw_id.h xlat/perf_sw_ids.h xlat/perf_type_id.h xlat/personality_flags.h xlat/personality_types.h xlat/pkey_access.h xlat/policies.h xlat/pollflags.h xlat/pr_cap_ambient.h xlat/pr_dumpable.h xlat/pr_fp_mode.h xlat/pr_mce_kill.h xlat/pr_mce_kill_policy.h xlat/pr_set_mm.h xlat/pr_tsc.h xlat/pr_unalign_flags.h xlat/prctl_options.h xlat/priorities.h xlat/ptp_flags_options.h xlat/ptrace_cmds.h xlat/ptrace_events.h xlat/ptrace_peeksiginfo_flags.h xlat/ptrace_setoptions_flags.h xlat/quota_formats.h xlat/quotacmds.h xlat/quotatypes.h xlat/rename_flags.h xlat/resource_flags.h xlat/resources.h xlat/rwf_flags.h xlat/sa_handler_values.h xlat/sched_flags.h xlat/schedulers.h xlat/scmvals.h xlat/scsi_sg_commands.h xlat/secbits.h xlat/seccomp_filter_flags.h xlat/seccomp_mode.h xlat/seccomp_ops.h xlat/seccomp_ret_action.h xlat/semctl_flags.h xlat/semop_flags.h xlat/setns_types.h xlat/setsockipoptions.h xlat/setsockipv6options.h xlat/sfd_flags.h xlat/sg_io_dxfer_direction.h xlat/sg_io_flags.h xlat/sg_io_info.h xlat/sg_scsi_reset.h xlat/shm_flags.h xlat/shm_resource_flags.h xlat/shmctl_flags.h xlat/shutdown_modes.h xlat/sigact_flags.h xlat/sigaltstack_flags.h xlat/sigbus_codes.h xlat/sigchld_codes.h xlat/sigemt_codes.h xlat/sigev_value.h xlat/sigfpe_codes.h xlat/sigill_codes.h xlat/siginfo_codes.h xlat/sigpoll_codes.h xlat/sigprocmaskcmds.h xlat/sigprof_codes.h xlat/sigsegv_codes.h xlat/sigsys_codes.h xlat/sigtrap_codes.h xlat/smc_diag_attrs.h xlat/smc_diag_extended_flags.h xlat/smc_states.h xlat/sock_type_flags.h xlat/socketcalls.h xlat/socketlayers.h xlat/sockipoptions.h xlat/sockipv6options.h xlat/sockipxoptions.h xlat/sockoptions.h xlat/sockpacketoptions.h xlat/sockrawoptions.h xlat/socksctpoptions.h xlat/socktcpoptions.h xlat/socktypes.h xlat/splice_flags.h xlat/sram_alloc_flags.h xlat/statfs_flags.h xlat/statx_attrs.h xlat/statx_masks.h xlat/swap_flags.h xlat/sync_file_range_flags.h xlat/sysctl_kern.h xlat/sysctl_net.h xlat/sysctl_net_core.h xlat/sysctl_net_ipv4.h xlat/sysctl_net_ipv4_conf.h xlat/sysctl_net_ipv4_route.h xlat/sysctl_net_ipv6.h xlat/sysctl_net_ipv6_route.h xlat/sysctl_net_unix.h xlat/sysctl_root.h xlat/sysctl_vm.h xlat/syslog_action_type.h xlat/sysmips_operations.h xlat/tcflsh_options.h xlat/tcp_state_flags.h xlat/tcp_states.h xlat/tcxonc_options.h xlat/timerfdflags.h xlat/ubi_volume_props.h xlat/ubi_volume_types.h xlat/uffd_api_flags.h xlat/uffd_copy_flags.h xlat/uffd_flags.h xlat/uffd_register_ioctl_flags.h xlat/uffd_register_mode_flags.h xlat/uffd_zeropage_flags.h xlat/umount_flags.h xlat/unix_diag_attrs.h xlat/unix_diag_show.h xlat/unshare_flags.h xlat/usagewho.h xlat/v4l2_buf_flags.h xlat/v4l2_buf_types.h xlat/v4l2_capture_modes.h xlat/v4l2_colorspaces.h xlat/v4l2_control_classes.h xlat/v4l2_control_flags.h xlat/v4l2_control_ids.h xlat/v4l2_control_types.h xlat/v4l2_device_capabilities_flags.h xlat/v4l2_fields.h xlat/v4l2_format_description_flags.h xlat/v4l2_frameinterval_types.h xlat/v4l2_framesize_types.h xlat/v4l2_input_types.h xlat/v4l2_memories.h xlat/v4l2_sliced_flags.h xlat/v4l2_streaming_capabilities.h xlat/v4l2_tuner_audmodes.h xlat/v4l2_tuner_capabilities.h xlat/v4l2_tuner_rxsubchanses.h xlat/v4l2_tuner_types.h xlat/v4l2_vbi_flags.h xlat/wait4_options.h xlat/waitid_types.h xlat/whence_codes.h xlat/xattrflags.h xlat/xfs_dqblk_flags.h xlat/xfs_quota_flags.h 
+XLAT_INPUT_FILES = xlat/access_flags.in xlat/addrfams.in xlat/adjtimex_modes.in xlat/adjtimex_state.in xlat/adjtimex_status.in xlat/advise.in xlat/af_packet_types.in xlat/archvals.in xlat/arp_hardware_types.in xlat/at_flags.in xlat/at_statx_sync_types.in xlat/atomic_ops.in xlat/audit_arch.in xlat/baud_options.in xlat/blkpg_ops.in xlat/bootflags1.in xlat/bootflags2.in xlat/bootflags3.in xlat/bpf_attach_flags.in xlat/bpf_attach_type.in xlat/bpf_class.in xlat/bpf_commands.in xlat/bpf_map_flags.in xlat/bpf_map_types.in xlat/bpf_map_update_elem_flags.in xlat/bpf_miscop.in xlat/bpf_mode.in xlat/bpf_op_alu.in xlat/bpf_op_jmp.in xlat/bpf_prog_flags.in xlat/bpf_prog_types.in xlat/bpf_rval.in xlat/bpf_size.in xlat/bpf_src.in xlat/bsg_flags.in xlat/bsg_protocol.in xlat/bsg_subprotocol.in xlat/bt_protocols.in xlat/btrfs_balance_args.in xlat/btrfs_balance_ctl_cmds.in xlat/btrfs_balance_flags.in xlat/btrfs_balance_state.in xlat/btrfs_compress_types.in xlat/btrfs_defrag_flags.in xlat/btrfs_dev_replace_cmds.in xlat/btrfs_dev_replace_results.in xlat/btrfs_dev_replace_state.in xlat/btrfs_dev_stats_flags.in xlat/btrfs_dev_stats_values.in xlat/btrfs_features_compat.in xlat/btrfs_features_compat_ro.in xlat/btrfs_features_incompat.in xlat/btrfs_key_types.in xlat/btrfs_qgroup_ctl_cmds.in xlat/btrfs_qgroup_inherit_flags.in xlat/btrfs_qgroup_limit_flags.in xlat/btrfs_qgroup_status_flags.in xlat/btrfs_scrub_flags.in xlat/btrfs_send_flags.in xlat/btrfs_snap_flags_v2.in xlat/btrfs_space_info_flags.in xlat/btrfs_tree_objectids.in xlat/cacheflush_scope.in xlat/cap.in xlat/cap_mask0.in xlat/cap_mask1.in xlat/cap_version.in xlat/clockflags.in xlat/clocknames.in xlat/clone_flags.in xlat/cpuclocknames.in xlat/crypto_nl_attrs.in xlat/dcb_commands.in xlat/delete_module_flags.in xlat/dirent_types.in xlat/dm_flags.in xlat/efd_flags.in xlat/epollctls.in xlat/epollevents.in xlat/epollflags.in xlat/ethernet_protocols.in xlat/evdev_abs.in xlat/evdev_autorepeat.in xlat/evdev_ev.in xlat/evdev_ff_status.in xlat/evdev_ff_types.in xlat/evdev_keycode.in xlat/evdev_leds.in xlat/evdev_misc.in xlat/evdev_mtslots.in xlat/evdev_prop.in xlat/evdev_relative_axes.in xlat/evdev_snd.in xlat/evdev_switch.in xlat/evdev_sync.in xlat/f_owner_types.in xlat/f_seals.in xlat/falloc_flags.in xlat/fan_classes.in xlat/fan_event_flags.in xlat/fan_init_flags.in xlat/fan_mark_flags.in xlat/fcntl64cmds.in xlat/fcntlcmds.in xlat/fdflags.in xlat/fib_rule_actions.in xlat/fib_rule_flags.in xlat/fiemap_extent_flags.in xlat/fiemap_flags.in xlat/flockcmds.in xlat/fsmagic.in xlat/futexops.in xlat/futexwakecmps.in xlat/futexwakeops.in xlat/getrandom_flags.in xlat/getsockipoptions.in xlat/getsockipv6options.in xlat/hci_channels.in xlat/hw_breakpoint_len.in xlat/hw_breakpoint_type.in xlat/icmpfilterflags.in xlat/if_dqblk_valid.in xlat/if_dqinfo_flags.in xlat/if_dqinfo_valid.in xlat/ifaddrflags.in xlat/iffflags.in xlat/inet_diag_attrs.in xlat/inet_diag_bytecodes.in xlat/inet_diag_extended_flags.in xlat/inet_diag_req_attrs.in xlat/inet_protocols.in xlat/inotify_flags.in xlat/inotify_init_flags.in xlat/ioctl_dirs.in xlat/ioprio_class.in xlat/ioprio_who.in xlat/ip_cmsg_types.in xlat/ip_type_of_services.in xlat/ipc_msg_flags.in xlat/ipccalls.in xlat/itimer_which.in xlat/kcmp_types.in xlat/kexec_arch_values.in xlat/kexec_file_load_flags.in xlat/kexec_load_flags.in xlat/key_perms.in xlat/key_reqkeys.in xlat/key_spec.in xlat/keyctl_commands.in xlat/lockfcmds.in xlat/loop_cmds.in xlat/loop_crypt_type_options.in xlat/loop_flags_options.in xlat/lwtunnel_encap_types.in xlat/madvise_cmds.in xlat/mbindflags.in xlat/mctl_sync.in xlat/membarrier_cmds.in xlat/memfd_create_flags.in xlat/mempolicyflags.in xlat/mlock_flags.in xlat/mlockall_flags.in xlat/mmap_flags.in xlat/mmap_prot.in xlat/modem_flags.in xlat/modetypes.in xlat/module_init_flags.in xlat/mount_flags.in xlat/move_pages_flags.in xlat/mq_attr_flags.in xlat/mremap_flags.in xlat/msg_flags.in xlat/msgctl_flags.in xlat/mtd_file_mode_options.in xlat/mtd_flags_options.in xlat/mtd_mode_options.in xlat/mtd_nandecc_options.in xlat/mtd_otp_options.in xlat/mtd_type_options.in xlat/name_to_handle_at_flags.in xlat/neighbor_cache_entry_flags.in xlat/neighbor_cache_entry_states.in xlat/netlink_ack_flags.in xlat/netlink_diag_attrs.in xlat/netlink_diag_show.in xlat/netlink_flags.in xlat/netlink_get_flags.in xlat/netlink_new_flags.in xlat/netlink_protocols.in xlat/netlink_socket_flags.in xlat/netlink_states.in xlat/netlink_types.in xlat/nl_audit_types.in xlat/nl_crypto_types.in xlat/nl_netfilter_msg_types.in xlat/nl_netfilter_subsys_ids.in xlat/nl_route_types.in xlat/nl_selinux_types.in xlat/nl_sock_diag_types.in xlat/nl_xfrm_types.in xlat/nlmsgerr_attrs.in xlat/notifyflags.in xlat/nt_descriptor_types.in xlat/open_access_modes.in xlat/open_mode_flags.in xlat/packet_diag_attrs.in xlat/packet_diag_info_flags.in xlat/packet_diag_show.in xlat/packet_mreq_type.in xlat/perf_attr_size.in xlat/perf_branch_sample_type.in xlat/perf_event_open_flags.in xlat/perf_event_read_format.in xlat/perf_event_sample_format.in xlat/perf_hw_cache_id.in xlat/perf_hw_cache_op_id.in xlat/perf_hw_cache_op_result_id.in xlat/perf_hw_id.in xlat/perf_sw_ids.in xlat/perf_type_id.in xlat/personality_flags.in xlat/personality_types.in xlat/pkey_access.in xlat/policies.in xlat/pollflags.in xlat/pr_cap_ambient.in xlat/pr_dumpable.in xlat/pr_fp_mode.in xlat/pr_mce_kill.in xlat/pr_mce_kill_policy.in xlat/pr_set_mm.in xlat/pr_tsc.in xlat/pr_unalign_flags.in xlat/prctl_options.in xlat/priorities.in xlat/ptp_flags_options.in xlat/ptrace_cmds.in xlat/ptrace_events.in xlat/ptrace_peeksiginfo_flags.in xlat/ptrace_setoptions_flags.in xlat/quota_formats.in xlat/quotacmds.in xlat/quotatypes.in xlat/rename_flags.in xlat/resource_flags.in xlat/resources.in xlat/route_nexthop_flags.in xlat/routing_flags.in xlat/routing_protocols.in xlat/routing_scopes.in xlat/routing_table_ids.in xlat/routing_types.in xlat/rtnl_addr_attrs.in xlat/rtnl_addrlabel_attrs.in xlat/rtnl_dcb_attrs.in xlat/rtnl_ifla_brport_attrs.in xlat/rtnl_ifla_info_attrs.in xlat/rtnl_ifla_port_attrs.in xlat/rtnl_ifla_vf_port_attrs.in xlat/rtnl_ifla_xdp_attrs.in xlat/rtnl_link_attrs.in xlat/rtnl_mdb_attrs.in xlat/rtnl_neigh_attrs.in xlat/rtnl_neightbl_attrs.in xlat/rtnl_neightbl_parms_attrs.in xlat/rtnl_netconf_attrs.in xlat/rtnl_nsid_attrs.in xlat/rtnl_route_attrs.in xlat/rtnl_rta_metrics_attrs.in xlat/rtnl_rule_attrs.in xlat/rtnl_tc_action_attrs.in xlat/rtnl_tc_attrs.in xlat/rwf_flags.in xlat/sa_handler_values.in xlat/sched_flags.in xlat/schedulers.in xlat/scmvals.in xlat/scsi_sg_commands.in xlat/secbits.in xlat/seccomp_filter_flags.in xlat/seccomp_mode.in xlat/seccomp_ops.in xlat/seccomp_ret_action.in xlat/semctl_flags.in xlat/semop_flags.in xlat/setns_types.in xlat/setsockipoptions.in xlat/setsockipv6options.in xlat/sfd_flags.in xlat/sg_io_dxfer_direction.in xlat/sg_io_flags.in xlat/sg_io_info.in xlat/sg_scsi_reset.in xlat/shm_flags.in xlat/shm_resource_flags.in xlat/shmctl_flags.in xlat/shutdown_modes.in xlat/sigact_flags.in xlat/sigaltstack_flags.in xlat/sigbus_codes.in xlat/sigchld_codes.in xlat/sigemt_codes.in xlat/sigev_value.in xlat/sigfpe_codes.in xlat/sigill_codes.in xlat/siginfo_codes.in xlat/sigpoll_codes.in xlat/sigprocmaskcmds.in xlat/sigprof_codes.in xlat/sigsegv_codes.in xlat/sigsys_codes.in xlat/sigtrap_codes.in xlat/skf_ad.in xlat/smc_diag_attrs.in xlat/smc_diag_extended_flags.in xlat/smc_link_group_roles.in xlat/smc_states.in xlat/sock_type_flags.in xlat/socketcalls.in xlat/socketlayers.in xlat/sockipoptions.in xlat/sockipv6options.in xlat/sockipxoptions.in xlat/sockoptions.in xlat/sockpacketoptions.in xlat/sockrawoptions.in xlat/socksctpoptions.in xlat/socktcpoptions.in xlat/socktypes.in xlat/splice_flags.in xlat/sram_alloc_flags.in xlat/statfs_flags.in xlat/statx_attrs.in xlat/statx_masks.in xlat/swap_flags.in xlat/sync_file_range_flags.in xlat/sysctl_kern.in xlat/sysctl_net.in xlat/sysctl_net_core.in xlat/sysctl_net_ipv4.in xlat/sysctl_net_ipv4_conf.in xlat/sysctl_net_ipv4_route.in xlat/sysctl_net_ipv6.in xlat/sysctl_net_ipv6_route.in xlat/sysctl_net_unix.in xlat/sysctl_root.in xlat/sysctl_vm.in xlat/syslog_action_type.in xlat/sysmips_operations.in xlat/tcflsh_options.in xlat/tcp_state_flags.in xlat/tcp_states.in xlat/tcxonc_options.in xlat/timerfdflags.in xlat/ubi_volume_props.in xlat/ubi_volume_types.in xlat/uffd_api_features.in xlat/uffd_api_flags.in xlat/uffd_copy_flags.in xlat/uffd_flags.in xlat/uffd_register_ioctl_flags.in xlat/uffd_register_mode_flags.in xlat/uffd_zeropage_flags.in xlat/umount_flags.in xlat/unix_diag_attrs.in xlat/unix_diag_show.in xlat/unshare_flags.in xlat/usagewho.in xlat/v4l2_buf_flags.in xlat/v4l2_buf_types.in xlat/v4l2_capture_modes.in xlat/v4l2_colorspaces.in xlat/v4l2_control_classes.in xlat/v4l2_control_flags.in xlat/v4l2_control_ids.in xlat/v4l2_control_types.in xlat/v4l2_device_capabilities_flags.in xlat/v4l2_fields.in xlat/v4l2_format_description_flags.in xlat/v4l2_frameinterval_types.in xlat/v4l2_framesize_types.in xlat/v4l2_input_types.in xlat/v4l2_memories.in xlat/v4l2_sliced_flags.in xlat/v4l2_streaming_capabilities.in xlat/v4l2_tuner_audmodes.in xlat/v4l2_tuner_capabilities.in xlat/v4l2_tuner_rxsubchanses.in xlat/v4l2_tuner_types.in xlat/v4l2_vbi_flags.in xlat/wait4_options.in xlat/waitid_types.in xlat/whence_codes.in xlat/xattrflags.in xlat/xdp_flags.in xlat/xfs_dqblk_flags.in xlat/xfs_quota_flags.in 
+XLAT_HEADER_FILES = xlat/access_flags.h xlat/addrfams.h xlat/adjtimex_modes.h xlat/adjtimex_state.h xlat/adjtimex_status.h xlat/advise.h xlat/af_packet_types.h xlat/archvals.h xlat/arp_hardware_types.h xlat/at_flags.h xlat/at_statx_sync_types.h xlat/atomic_ops.h xlat/audit_arch.h xlat/baud_options.h xlat/blkpg_ops.h xlat/bootflags1.h xlat/bootflags2.h xlat/bootflags3.h xlat/bpf_attach_flags.h xlat/bpf_attach_type.h xlat/bpf_class.h xlat/bpf_commands.h xlat/bpf_map_flags.h xlat/bpf_map_types.h xlat/bpf_map_update_elem_flags.h xlat/bpf_miscop.h xlat/bpf_mode.h xlat/bpf_op_alu.h xlat/bpf_op_jmp.h xlat/bpf_prog_flags.h xlat/bpf_prog_types.h xlat/bpf_rval.h xlat/bpf_size.h xlat/bpf_src.h xlat/bsg_flags.h xlat/bsg_protocol.h xlat/bsg_subprotocol.h xlat/bt_protocols.h xlat/btrfs_balance_args.h xlat/btrfs_balance_ctl_cmds.h xlat/btrfs_balance_flags.h xlat/btrfs_balance_state.h xlat/btrfs_compress_types.h xlat/btrfs_defrag_flags.h xlat/btrfs_dev_replace_cmds.h xlat/btrfs_dev_replace_results.h xlat/btrfs_dev_replace_state.h xlat/btrfs_dev_stats_flags.h xlat/btrfs_dev_stats_values.h xlat/btrfs_features_compat.h xlat/btrfs_features_compat_ro.h xlat/btrfs_features_incompat.h xlat/btrfs_key_types.h xlat/btrfs_qgroup_ctl_cmds.h xlat/btrfs_qgroup_inherit_flags.h xlat/btrfs_qgroup_limit_flags.h xlat/btrfs_qgroup_status_flags.h xlat/btrfs_scrub_flags.h xlat/btrfs_send_flags.h xlat/btrfs_snap_flags_v2.h xlat/btrfs_space_info_flags.h xlat/btrfs_tree_objectids.h xlat/cacheflush_scope.h xlat/cap.h xlat/cap_mask0.h xlat/cap_mask1.h xlat/cap_version.h xlat/clockflags.h xlat/clocknames.h xlat/clone_flags.h xlat/cpuclocknames.h xlat/crypto_nl_attrs.h xlat/dcb_commands.h xlat/delete_module_flags.h xlat/dirent_types.h xlat/dm_flags.h xlat/efd_flags.h xlat/epollctls.h xlat/epollevents.h xlat/epollflags.h xlat/ethernet_protocols.h xlat/evdev_abs.h xlat/evdev_autorepeat.h xlat/evdev_ev.h xlat/evdev_ff_status.h xlat/evdev_ff_types.h xlat/evdev_keycode.h xlat/evdev_leds.h xlat/evdev_misc.h xlat/evdev_mtslots.h xlat/evdev_prop.h xlat/evdev_relative_axes.h xlat/evdev_snd.h xlat/evdev_switch.h xlat/evdev_sync.h xlat/f_owner_types.h xlat/f_seals.h xlat/falloc_flags.h xlat/fan_classes.h xlat/fan_event_flags.h xlat/fan_init_flags.h xlat/fan_mark_flags.h xlat/fcntl64cmds.h xlat/fcntlcmds.h xlat/fdflags.h xlat/fib_rule_actions.h xlat/fib_rule_flags.h xlat/fiemap_extent_flags.h xlat/fiemap_flags.h xlat/flockcmds.h xlat/fsmagic.h xlat/futexops.h xlat/futexwakecmps.h xlat/futexwakeops.h xlat/getrandom_flags.h xlat/getsockipoptions.h xlat/getsockipv6options.h xlat/hci_channels.h xlat/hw_breakpoint_len.h xlat/hw_breakpoint_type.h xlat/icmpfilterflags.h xlat/if_dqblk_valid.h xlat/if_dqinfo_flags.h xlat/if_dqinfo_valid.h xlat/ifaddrflags.h xlat/iffflags.h xlat/inet_diag_attrs.h xlat/inet_diag_bytecodes.h xlat/inet_diag_extended_flags.h xlat/inet_diag_req_attrs.h xlat/inet_protocols.h xlat/inotify_flags.h xlat/inotify_init_flags.h xlat/ioctl_dirs.h xlat/ioprio_class.h xlat/ioprio_who.h xlat/ip_cmsg_types.h xlat/ip_type_of_services.h xlat/ipc_msg_flags.h xlat/ipccalls.h xlat/itimer_which.h xlat/kcmp_types.h xlat/kexec_arch_values.h xlat/kexec_file_load_flags.h xlat/kexec_load_flags.h xlat/key_perms.h xlat/key_reqkeys.h xlat/key_spec.h xlat/keyctl_commands.h xlat/lockfcmds.h xlat/loop_cmds.h xlat/loop_crypt_type_options.h xlat/loop_flags_options.h xlat/lwtunnel_encap_types.h xlat/madvise_cmds.h xlat/mbindflags.h xlat/mctl_sync.h xlat/membarrier_cmds.h xlat/memfd_create_flags.h xlat/mempolicyflags.h xlat/mlock_flags.h xlat/mlockall_flags.h xlat/mmap_flags.h xlat/mmap_prot.h xlat/modem_flags.h xlat/modetypes.h xlat/module_init_flags.h xlat/mount_flags.h xlat/move_pages_flags.h xlat/mq_attr_flags.h xlat/mremap_flags.h xlat/msg_flags.h xlat/msgctl_flags.h xlat/mtd_file_mode_options.h xlat/mtd_flags_options.h xlat/mtd_mode_options.h xlat/mtd_nandecc_options.h xlat/mtd_otp_options.h xlat/mtd_type_options.h xlat/name_to_handle_at_flags.h xlat/neighbor_cache_entry_flags.h xlat/neighbor_cache_entry_states.h xlat/netlink_ack_flags.h xlat/netlink_diag_attrs.h xlat/netlink_diag_show.h xlat/netlink_flags.h xlat/netlink_get_flags.h xlat/netlink_new_flags.h xlat/netlink_protocols.h xlat/netlink_socket_flags.h xlat/netlink_states.h xlat/netlink_types.h xlat/nl_audit_types.h xlat/nl_crypto_types.h xlat/nl_netfilter_msg_types.h xlat/nl_netfilter_subsys_ids.h xlat/nl_route_types.h xlat/nl_selinux_types.h xlat/nl_sock_diag_types.h xlat/nl_xfrm_types.h xlat/nlmsgerr_attrs.h xlat/notifyflags.h xlat/nt_descriptor_types.h xlat/open_access_modes.h xlat/open_mode_flags.h xlat/packet_diag_attrs.h xlat/packet_diag_info_flags.h xlat/packet_diag_show.h xlat/packet_mreq_type.h xlat/perf_attr_size.h xlat/perf_branch_sample_type.h xlat/perf_event_open_flags.h xlat/perf_event_read_format.h xlat/perf_event_sample_format.h xlat/perf_hw_cache_id.h xlat/perf_hw_cache_op_id.h xlat/perf_hw_cache_op_result_id.h xlat/perf_hw_id.h xlat/perf_sw_ids.h xlat/perf_type_id.h xlat/personality_flags.h xlat/personality_types.h xlat/pkey_access.h xlat/policies.h xlat/pollflags.h xlat/pr_cap_ambient.h xlat/pr_dumpable.h xlat/pr_fp_mode.h xlat/pr_mce_kill.h xlat/pr_mce_kill_policy.h xlat/pr_set_mm.h xlat/pr_tsc.h xlat/pr_unalign_flags.h xlat/prctl_options.h xlat/priorities.h xlat/ptp_flags_options.h xlat/ptrace_cmds.h xlat/ptrace_events.h xlat/ptrace_peeksiginfo_flags.h xlat/ptrace_setoptions_flags.h xlat/quota_formats.h xlat/quotacmds.h xlat/quotatypes.h xlat/rename_flags.h xlat/resource_flags.h xlat/resources.h xlat/route_nexthop_flags.h xlat/routing_flags.h xlat/routing_protocols.h xlat/routing_scopes.h xlat/routing_table_ids.h xlat/routing_types.h xlat/rtnl_addr_attrs.h xlat/rtnl_addrlabel_attrs.h xlat/rtnl_dcb_attrs.h xlat/rtnl_ifla_brport_attrs.h xlat/rtnl_ifla_info_attrs.h xlat/rtnl_ifla_port_attrs.h xlat/rtnl_ifla_vf_port_attrs.h xlat/rtnl_ifla_xdp_attrs.h xlat/rtnl_link_attrs.h xlat/rtnl_mdb_attrs.h xlat/rtnl_neigh_attrs.h xlat/rtnl_neightbl_attrs.h xlat/rtnl_neightbl_parms_attrs.h xlat/rtnl_netconf_attrs.h xlat/rtnl_nsid_attrs.h xlat/rtnl_route_attrs.h xlat/rtnl_rta_metrics_attrs.h xlat/rtnl_rule_attrs.h xlat/rtnl_tc_action_attrs.h xlat/rtnl_tc_attrs.h xlat/rwf_flags.h xlat/sa_handler_values.h xlat/sched_flags.h xlat/schedulers.h xlat/scmvals.h xlat/scsi_sg_commands.h xlat/secbits.h xlat/seccomp_filter_flags.h xlat/seccomp_mode.h xlat/seccomp_ops.h xlat/seccomp_ret_action.h xlat/semctl_flags.h xlat/semop_flags.h xlat/setns_types.h xlat/setsockipoptions.h xlat/setsockipv6options.h xlat/sfd_flags.h xlat/sg_io_dxfer_direction.h xlat/sg_io_flags.h xlat/sg_io_info.h xlat/sg_scsi_reset.h xlat/shm_flags.h xlat/shm_resource_flags.h xlat/shmctl_flags.h xlat/shutdown_modes.h xlat/sigact_flags.h xlat/sigaltstack_flags.h xlat/sigbus_codes.h xlat/sigchld_codes.h xlat/sigemt_codes.h xlat/sigev_value.h xlat/sigfpe_codes.h xlat/sigill_codes.h xlat/siginfo_codes.h xlat/sigpoll_codes.h xlat/sigprocmaskcmds.h xlat/sigprof_codes.h xlat/sigsegv_codes.h xlat/sigsys_codes.h xlat/sigtrap_codes.h xlat/skf_ad.h xlat/smc_diag_attrs.h xlat/smc_diag_extended_flags.h xlat/smc_link_group_roles.h xlat/smc_states.h xlat/sock_type_flags.h xlat/socketcalls.h xlat/socketlayers.h xlat/sockipoptions.h xlat/sockipv6options.h xlat/sockipxoptions.h xlat/sockoptions.h xlat/sockpacketoptions.h xlat/sockrawoptions.h xlat/socksctpoptions.h xlat/socktcpoptions.h xlat/socktypes.h xlat/splice_flags.h xlat/sram_alloc_flags.h xlat/statfs_flags.h xlat/statx_attrs.h xlat/statx_masks.h xlat/swap_flags.h xlat/sync_file_range_flags.h xlat/sysctl_kern.h xlat/sysctl_net.h xlat/sysctl_net_core.h xlat/sysctl_net_ipv4.h xlat/sysctl_net_ipv4_conf.h xlat/sysctl_net_ipv4_route.h xlat/sysctl_net_ipv6.h xlat/sysctl_net_ipv6_route.h xlat/sysctl_net_unix.h xlat/sysctl_root.h xlat/sysctl_vm.h xlat/syslog_action_type.h xlat/sysmips_operations.h xlat/tcflsh_options.h xlat/tcp_state_flags.h xlat/tcp_states.h xlat/tcxonc_options.h xlat/timerfdflags.h xlat/ubi_volume_props.h xlat/ubi_volume_types.h xlat/uffd_api_features.h xlat/uffd_api_flags.h xlat/uffd_copy_flags.h xlat/uffd_flags.h xlat/uffd_register_ioctl_flags.h xlat/uffd_register_mode_flags.h xlat/uffd_zeropage_flags.h xlat/umount_flags.h xlat/unix_diag_attrs.h xlat/unix_diag_show.h xlat/unshare_flags.h xlat/usagewho.h xlat/v4l2_buf_flags.h xlat/v4l2_buf_types.h xlat/v4l2_capture_modes.h xlat/v4l2_colorspaces.h xlat/v4l2_control_classes.h xlat/v4l2_control_flags.h xlat/v4l2_control_ids.h xlat/v4l2_control_types.h xlat/v4l2_device_capabilities_flags.h xlat/v4l2_fields.h xlat/v4l2_format_description_flags.h xlat/v4l2_frameinterval_types.h xlat/v4l2_framesize_types.h xlat/v4l2_input_types.h xlat/v4l2_memories.h xlat/v4l2_sliced_flags.h xlat/v4l2_streaming_capabilities.h xlat/v4l2_tuner_audmodes.h xlat/v4l2_tuner_capabilities.h xlat/v4l2_tuner_rxsubchanses.h xlat/v4l2_tuner_types.h xlat/v4l2_vbi_flags.h xlat/wait4_options.h xlat/waitid_types.h xlat/whence_codes.h xlat/xattrflags.h xlat/xdp_flags.h xlat/xfs_dqblk_flags.h xlat/xfs_quota_flags.h 
 $(top_srcdir)/xlat/access_flags.h: $(top_srcdir)/xlat/access_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/addrfams.h: $(top_srcdir)/xlat/addrfams.in $(top_srcdir)/xlat/gen.sh
@@ -44,6 +44,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_commands.h: $(top_srcdir)/xlat/bpf_commands.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/bpf_map_flags.h: $(top_srcdir)/xlat/bpf_map_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_map_types.h: $(top_srcdir)/xlat/bpf_map_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_map_update_elem_flags.h: $(top_srcdir)/xlat/bpf_map_update_elem_flags.in $(top_srcdir)/xlat/gen.sh
@@ -56,6 +58,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_op_jmp.h: $(top_srcdir)/xlat/bpf_op_jmp.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/bpf_prog_flags.h: $(top_srcdir)/xlat/bpf_prog_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_prog_types.h: $(top_srcdir)/xlat/bpf_prog_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/bpf_rval.h: $(top_srcdir)/xlat/bpf_rval.in $(top_srcdir)/xlat/gen.sh
@@ -138,6 +142,10 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/cpuclocknames.h: $(top_srcdir)/xlat/cpuclocknames.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/crypto_nl_attrs.h: $(top_srcdir)/xlat/crypto_nl_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/dcb_commands.h: $(top_srcdir)/xlat/dcb_commands.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/delete_module_flags.h: $(top_srcdir)/xlat/delete_module_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/dirent_types.h: $(top_srcdir)/xlat/dirent_types.in $(top_srcdir)/xlat/gen.sh
@@ -202,6 +210,10 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/fdflags.h: $(top_srcdir)/xlat/fdflags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/fib_rule_actions.h: $(top_srcdir)/xlat/fib_rule_actions.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/fib_rule_flags.h: $(top_srcdir)/xlat/fib_rule_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/fiemap_extent_flags.h: $(top_srcdir)/xlat/fiemap_extent_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/fiemap_flags.h: $(top_srcdir)/xlat/fiemap_flags.in $(top_srcdir)/xlat/gen.sh
@@ -236,10 +248,14 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/if_dqinfo_valid.h: $(top_srcdir)/xlat/if_dqinfo_valid.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ifaddrflags.h: $(top_srcdir)/xlat/ifaddrflags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/iffflags.h: $(top_srcdir)/xlat/iffflags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/inet_diag_attrs.h: $(top_srcdir)/xlat/inet_diag_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet_diag_bytecodes.h: $(top_srcdir)/xlat/inet_diag_bytecodes.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/inet_diag_extended_flags.h: $(top_srcdir)/xlat/inet_diag_extended_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/inet_diag_req_attrs.h: $(top_srcdir)/xlat/inet_diag_req_attrs.in $(top_srcdir)/xlat/gen.sh
@@ -258,6 +274,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/ip_cmsg_types.h: $(top_srcdir)/xlat/ip_cmsg_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ip_type_of_services.h: $(top_srcdir)/xlat/ip_type_of_services.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/ipc_msg_flags.h: $(top_srcdir)/xlat/ipc_msg_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/ipccalls.h: $(top_srcdir)/xlat/ipccalls.in $(top_srcdir)/xlat/gen.sh
@@ -288,6 +306,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/loop_flags_options.h: $(top_srcdir)/xlat/loop_flags_options.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/lwtunnel_encap_types.h: $(top_srcdir)/xlat/lwtunnel_encap_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/madvise_cmds.h: $(top_srcdir)/xlat/madvise_cmds.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/mbindflags.h: $(top_srcdir)/xlat/mbindflags.in $(top_srcdir)/xlat/gen.sh
@@ -340,6 +360,12 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/name_to_handle_at_flags.h: $(top_srcdir)/xlat/name_to_handle_at_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/neighbor_cache_entry_flags.h: $(top_srcdir)/xlat/neighbor_cache_entry_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/neighbor_cache_entry_states.h: $(top_srcdir)/xlat/neighbor_cache_entry_states.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/netlink_ack_flags.h: $(top_srcdir)/xlat/netlink_ack_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_diag_attrs.h: $(top_srcdir)/xlat/netlink_diag_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_diag_show.h: $(top_srcdir)/xlat/netlink_diag_show.in $(top_srcdir)/xlat/gen.sh
@@ -360,6 +386,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nl_audit_types.h: $(top_srcdir)/xlat/nl_audit_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nl_crypto_types.h: $(top_srcdir)/xlat/nl_crypto_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nl_netfilter_msg_types.h: $(top_srcdir)/xlat/nl_netfilter_msg_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nl_netfilter_subsys_ids.h: $(top_srcdir)/xlat/nl_netfilter_subsys_ids.in $(top_srcdir)/xlat/gen.sh
@@ -372,6 +400,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nl_xfrm_types.h: $(top_srcdir)/xlat/nl_xfrm_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nlmsgerr_attrs.h: $(top_srcdir)/xlat/nlmsgerr_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/notifyflags.h: $(top_srcdir)/xlat/notifyflags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nt_descriptor_types.h: $(top_srcdir)/xlat/nt_descriptor_types.in $(top_srcdir)/xlat/gen.sh
@@ -382,6 +412,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/packet_diag_attrs.h: $(top_srcdir)/xlat/packet_diag_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/packet_diag_info_flags.h: $(top_srcdir)/xlat/packet_diag_info_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/packet_diag_show.h: $(top_srcdir)/xlat/packet_diag_show.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/packet_mreq_type.h: $(top_srcdir)/xlat/packet_mreq_type.in $(top_srcdir)/xlat/gen.sh
@@ -460,6 +492,58 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/resources.h: $(top_srcdir)/xlat/resources.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/route_nexthop_flags.h: $(top_srcdir)/xlat/route_nexthop_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_flags.h: $(top_srcdir)/xlat/routing_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_protocols.h: $(top_srcdir)/xlat/routing_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_scopes.h: $(top_srcdir)/xlat/routing_scopes.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_table_ids.h: $(top_srcdir)/xlat/routing_table_ids.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/routing_types.h: $(top_srcdir)/xlat/routing_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_addr_attrs.h: $(top_srcdir)/xlat/rtnl_addr_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_addrlabel_attrs.h: $(top_srcdir)/xlat/rtnl_addrlabel_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_dcb_attrs.h: $(top_srcdir)/xlat/rtnl_dcb_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_brport_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_brport_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_info_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_info_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_port_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_port_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_vf_port_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_vf_port_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_xdp_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_xdp_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_link_attrs.h: $(top_srcdir)/xlat/rtnl_link_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_mdb_attrs.h: $(top_srcdir)/xlat/rtnl_mdb_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_neigh_attrs.h: $(top_srcdir)/xlat/rtnl_neigh_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_neightbl_attrs.h: $(top_srcdir)/xlat/rtnl_neightbl_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_neightbl_parms_attrs.h: $(top_srcdir)/xlat/rtnl_neightbl_parms_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_netconf_attrs.h: $(top_srcdir)/xlat/rtnl_netconf_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_nsid_attrs.h: $(top_srcdir)/xlat/rtnl_nsid_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_route_attrs.h: $(top_srcdir)/xlat/rtnl_route_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_rta_metrics_attrs.h: $(top_srcdir)/xlat/rtnl_rta_metrics_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_rule_attrs.h: $(top_srcdir)/xlat/rtnl_rule_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_tc_action_attrs.h: $(top_srcdir)/xlat/rtnl_tc_action_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_tc_attrs.h: $(top_srcdir)/xlat/rtnl_tc_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/rwf_flags.h: $(top_srcdir)/xlat/rwf_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/sa_handler_values.h: $(top_srcdir)/xlat/sa_handler_values.in $(top_srcdir)/xlat/gen.sh
@@ -540,10 +624,14 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/sigtrap_codes.h: $(top_srcdir)/xlat/sigtrap_codes.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/skf_ad.h: $(top_srcdir)/xlat/skf_ad.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/smc_diag_attrs.h: $(top_srcdir)/xlat/smc_diag_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/smc_diag_extended_flags.h: $(top_srcdir)/xlat/smc_diag_extended_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/smc_link_group_roles.h: $(top_srcdir)/xlat/smc_link_group_roles.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/smc_states.h: $(top_srcdir)/xlat/smc_states.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/sock_type_flags.h: $(top_srcdir)/xlat/sock_type_flags.in $(top_srcdir)/xlat/gen.sh
@@ -624,6 +712,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/ubi_volume_types.h: $(top_srcdir)/xlat/ubi_volume_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/uffd_api_features.h: $(top_srcdir)/xlat/uffd_api_features.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/uffd_api_flags.h: $(top_srcdir)/xlat/uffd_api_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/uffd_copy_flags.h: $(top_srcdir)/xlat/uffd_copy_flags.in $(top_srcdir)/xlat/gen.sh
@@ -698,6 +788,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/xattrflags.h: $(top_srcdir)/xlat/xattrflags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/xdp_flags.h: $(top_srcdir)/xlat/xdp_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/xfs_dqblk_flags.h: $(top_srcdir)/xlat/xfs_dqblk_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/xfs_quota_flags.h: $(top_srcdir)/xlat/xfs_quota_flags.in $(top_srcdir)/xlat/gen.sh
diff --git a/xlat/archvals.h b/xlat/archvals.h
index 75969bb..f8fb9c1 100644
--- a/xlat/archvals.h
+++ b/xlat/archvals.h
@@ -1,4 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/archvals.in; do not edit. */
+#if !(defined(ARCH_SET_GS) || (defined(HAVE_DECL_ARCH_SET_GS) && HAVE_DECL_ARCH_SET_GS))
+# define ARCH_SET_GS 0x1001
+#endif
+#if !(defined(ARCH_SET_FS) || (defined(HAVE_DECL_ARCH_SET_FS) && HAVE_DECL_ARCH_SET_FS))
+# define ARCH_SET_FS 0x1002
+#endif
+#if !(defined(ARCH_GET_FS) || (defined(HAVE_DECL_ARCH_GET_FS) && HAVE_DECL_ARCH_GET_FS))
+# define ARCH_GET_FS 0x1003
+#endif
+#if !(defined(ARCH_GET_GS) || (defined(HAVE_DECL_ARCH_GET_GS) && HAVE_DECL_ARCH_GET_GS))
+# define ARCH_GET_GS 0x1004
+#endif
 #if !(defined(ARCH_GET_CPUID) || (defined(HAVE_DECL_ARCH_GET_CPUID) && HAVE_DECL_ARCH_GET_CPUID))
 # define ARCH_GET_CPUID 0x1011
 #endif
@@ -23,18 +35,10 @@
 
 static
 const struct xlat archvals[] = {
-#if defined(ARCH_SET_GS) || (defined(HAVE_DECL_ARCH_SET_GS) && HAVE_DECL_ARCH_SET_GS)
-  XLAT(ARCH_SET_GS),
-#endif
-#if defined(ARCH_SET_FS) || (defined(HAVE_DECL_ARCH_SET_FS) && HAVE_DECL_ARCH_SET_FS)
-  XLAT(ARCH_SET_FS),
-#endif
-#if defined(ARCH_GET_FS) || (defined(HAVE_DECL_ARCH_GET_FS) && HAVE_DECL_ARCH_GET_FS)
-  XLAT(ARCH_GET_FS),
-#endif
-#if defined(ARCH_GET_GS) || (defined(HAVE_DECL_ARCH_GET_GS) && HAVE_DECL_ARCH_GET_GS)
-  XLAT(ARCH_GET_GS),
-#endif
+ XLAT(ARCH_SET_GS),
+ XLAT(ARCH_SET_FS),
+ XLAT(ARCH_GET_FS),
+ XLAT(ARCH_GET_GS),
  XLAT(ARCH_GET_CPUID),
  XLAT(ARCH_SET_CPUID),
  XLAT(ARCH_MAP_VDSO_X32),
diff --git a/xlat/archvals.in b/xlat/archvals.in
index 4bbcc0a..1dbbb8d 100644
--- a/xlat/archvals.in
+++ b/xlat/archvals.in
@@ -1,7 +1,7 @@
-ARCH_SET_GS
-ARCH_SET_FS
-ARCH_GET_FS
-ARCH_GET_GS
+ARCH_SET_GS	0x1001
+ARCH_SET_FS	0x1002
+ARCH_GET_FS	0x1003
+ARCH_GET_GS	0x1004
 ARCH_GET_CPUID	0x1011
 ARCH_SET_CPUID	0x1012
 ARCH_MAP_VDSO_X32	0x2001
diff --git a/xlat/arp_hardware_types.h b/xlat/arp_hardware_types.h
index c862f2c..45dbc5a 100644
--- a/xlat/arp_hardware_types.h
+++ b/xlat/arp_hardware_types.h
@@ -1,12 +1,7 @@
 /* Generated by ./xlat/gen.sh from ./xlat/arp_hardware_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#ifndef IN_MPERS
 
-# error static const struct xlat arp_hardware_types in mpers mode
-
-#else
-
-static
 const struct xlat arp_hardware_types[] = {
 #if defined(ARPHRD_NETROM) || (defined(HAVE_DECL_ARPHRD_NETROM) && HAVE_DECL_ARPHRD_NETROM)
   XLAT(ARPHRD_NETROM),
diff --git a/xlat/bpf_attach_type.h b/xlat/bpf_attach_type.h
index 2674553..7dbda4b 100644
--- a/xlat/bpf_attach_type.h
+++ b/xlat/bpf_attach_type.h
@@ -8,6 +8,9 @@
 #if !(defined(BPF_CGROUP_INET_SOCK_CREATE) || (defined(HAVE_DECL_BPF_CGROUP_INET_SOCK_CREATE) && HAVE_DECL_BPF_CGROUP_INET_SOCK_CREATE))
 # define BPF_CGROUP_INET_SOCK_CREATE 2
 #endif
+#if !(defined(BPF_CGROUP_SOCK_OPS) || (defined(HAVE_DECL_BPF_CGROUP_SOCK_OPS) && HAVE_DECL_BPF_CGROUP_SOCK_OPS))
+# define BPF_CGROUP_SOCK_OPS 3
+#endif
 
 #ifdef IN_MPERS
 
@@ -20,6 +23,7 @@
  XLAT(BPF_CGROUP_INET_INGRESS),
  XLAT(BPF_CGROUP_INET_EGRESS),
  XLAT(BPF_CGROUP_INET_SOCK_CREATE),
+ XLAT(BPF_CGROUP_SOCK_OPS),
  XLAT_END
 };
 
diff --git a/xlat/bpf_attach_type.in b/xlat/bpf_attach_type.in
index f78bc5b..9f96467 100644
--- a/xlat/bpf_attach_type.in
+++ b/xlat/bpf_attach_type.in
@@ -1,3 +1,4 @@
 BPF_CGROUP_INET_INGRESS 0
 BPF_CGROUP_INET_EGRESS 1
 BPF_CGROUP_INET_SOCK_CREATE 2
+BPF_CGROUP_SOCK_OPS 3
diff --git a/xlat/bpf_commands.h b/xlat/bpf_commands.h
index a498ee3..d51ab1d 100644
--- a/xlat/bpf_commands.h
+++ b/xlat/bpf_commands.h
@@ -29,6 +29,24 @@
 #if !(defined(BPF_PROG_DETACH) || (defined(HAVE_DECL_BPF_PROG_DETACH) && HAVE_DECL_BPF_PROG_DETACH))
 # define BPF_PROG_DETACH 9
 #endif
+#if !(defined(BPF_PROG_TEST_RUN) || (defined(HAVE_DECL_BPF_PROG_TEST_RUN) && HAVE_DECL_BPF_PROG_TEST_RUN))
+# define BPF_PROG_TEST_RUN 10
+#endif
+#if !(defined(BPF_PROG_GET_NEXT_ID) || (defined(HAVE_DECL_BPF_PROG_GET_NEXT_ID) && HAVE_DECL_BPF_PROG_GET_NEXT_ID))
+# define BPF_PROG_GET_NEXT_ID 11
+#endif
+#if !(defined(BPF_MAP_GET_NEXT_ID) || (defined(HAVE_DECL_BPF_MAP_GET_NEXT_ID) && HAVE_DECL_BPF_MAP_GET_NEXT_ID))
+# define BPF_MAP_GET_NEXT_ID 12
+#endif
+#if !(defined(BPF_PROG_GET_FD_BY_ID) || (defined(HAVE_DECL_BPF_PROG_GET_FD_BY_ID) && HAVE_DECL_BPF_PROG_GET_FD_BY_ID))
+# define BPF_PROG_GET_FD_BY_ID 13
+#endif
+#if !(defined(BPF_MAP_GET_FD_BY_ID) || (defined(HAVE_DECL_BPF_MAP_GET_FD_BY_ID) && HAVE_DECL_BPF_MAP_GET_FD_BY_ID))
+# define BPF_MAP_GET_FD_BY_ID 14
+#endif
+#if !(defined(BPF_OBJ_GET_INFO_BY_FD) || (defined(HAVE_DECL_BPF_OBJ_GET_INFO_BY_FD) && HAVE_DECL_BPF_OBJ_GET_INFO_BY_FD))
+# define BPF_OBJ_GET_INFO_BY_FD 15
+#endif
 
 #ifdef IN_MPERS
 
@@ -48,6 +66,12 @@
  XLAT(BPF_OBJ_GET),
  XLAT(BPF_PROG_ATTACH),
  XLAT(BPF_PROG_DETACH),
+ XLAT(BPF_PROG_TEST_RUN),
+ XLAT(BPF_PROG_GET_NEXT_ID),
+ XLAT(BPF_MAP_GET_NEXT_ID),
+ XLAT(BPF_PROG_GET_FD_BY_ID),
+ XLAT(BPF_MAP_GET_FD_BY_ID),
+ XLAT(BPF_OBJ_GET_INFO_BY_FD),
  XLAT_END
 };
 
diff --git a/xlat/bpf_commands.in b/xlat/bpf_commands.in
index bcec9a5..cb7403d 100644
--- a/xlat/bpf_commands.in
+++ b/xlat/bpf_commands.in
@@ -8,3 +8,9 @@
 BPF_OBJ_GET 7
 BPF_PROG_ATTACH 8
 BPF_PROG_DETACH 9
+BPF_PROG_TEST_RUN 10
+BPF_PROG_GET_NEXT_ID 11
+BPF_MAP_GET_NEXT_ID 12
+BPF_PROG_GET_FD_BY_ID 13
+BPF_MAP_GET_FD_BY_ID 14
+BPF_OBJ_GET_INFO_BY_FD 15
diff --git a/xlat/bpf_map_flags.h b/xlat/bpf_map_flags.h
new file mode 100644
index 0000000..f7c0a49
--- /dev/null
+++ b/xlat/bpf_map_flags.h
@@ -0,0 +1,18 @@
+/* Generated by ./xlat/gen.sh from ./xlat/bpf_map_flags.in; do not edit. */
+#if !(defined(BPF_F_NO_PREALLOC) || (defined(HAVE_DECL_BPF_F_NO_PREALLOC) && HAVE_DECL_BPF_F_NO_PREALLOC))
+# define BPF_F_NO_PREALLOC 1
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat bpf_map_flags in mpers mode
+
+#else
+
+static
+const struct xlat bpf_map_flags[] = {
+ XLAT(BPF_F_NO_PREALLOC),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/bpf_map_flags.in b/xlat/bpf_map_flags.in
new file mode 100644
index 0000000..6333800
--- /dev/null
+++ b/xlat/bpf_map_flags.in
@@ -0,0 +1 @@
+BPF_F_NO_PREALLOC	1
diff --git a/xlat/bpf_op_alu.h b/xlat/bpf_op_alu.h
index d20a8c7..047dbe2 100644
--- a/xlat/bpf_op_alu.h
+++ b/xlat/bpf_op_alu.h
@@ -47,6 +47,9 @@
 #if defined(BPF_ARSH) || (defined(HAVE_DECL_BPF_ARSH) && HAVE_DECL_BPF_ARSH)
   XLAT(BPF_ARSH),
 #endif
+#if defined(BPF_END) || (defined(HAVE_DECL_BPF_END) && HAVE_DECL_BPF_END)
+  XLAT(BPF_END),
+#endif
  XLAT_END
 };
 
diff --git a/xlat/bpf_op_alu.in b/xlat/bpf_op_alu.in
index e43aec6..580b68b 100644
--- a/xlat/bpf_op_alu.in
+++ b/xlat/bpf_op_alu.in
@@ -11,3 +11,4 @@
 BPF_XOR
 BPF_MOV
 BPF_ARSH
+BPF_END
diff --git a/xlat/bpf_prog_flags.h b/xlat/bpf_prog_flags.h
new file mode 100644
index 0000000..076f374
--- /dev/null
+++ b/xlat/bpf_prog_flags.h
@@ -0,0 +1,18 @@
+/* Generated by ./xlat/gen.sh from ./xlat/bpf_prog_flags.in; do not edit. */
+#if !(defined(BPF_F_STRICT_ALIGNMENT) || (defined(HAVE_DECL_BPF_F_STRICT_ALIGNMENT) && HAVE_DECL_BPF_F_STRICT_ALIGNMENT))
+# define BPF_F_STRICT_ALIGNMENT 1
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat bpf_prog_flags in mpers mode
+
+#else
+
+static
+const struct xlat bpf_prog_flags[] = {
+ XLAT(BPF_F_STRICT_ALIGNMENT),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/bpf_prog_flags.in b/xlat/bpf_prog_flags.in
new file mode 100644
index 0000000..7fcf3a7
--- /dev/null
+++ b/xlat/bpf_prog_flags.in
@@ -0,0 +1 @@
+BPF_F_STRICT_ALIGNMENT	1
diff --git a/xlat/bpf_prog_types.h b/xlat/bpf_prog_types.h
index 9eac952..4dd0a95 100644
--- a/xlat/bpf_prog_types.h
+++ b/xlat/bpf_prog_types.h
@@ -38,6 +38,9 @@
 #if !(defined(BPF_PROG_TYPE_LWT_XMIT) || (defined(HAVE_DECL_BPF_PROG_TYPE_LWT_XMIT) && HAVE_DECL_BPF_PROG_TYPE_LWT_XMIT))
 # define BPF_PROG_TYPE_LWT_XMIT 12
 #endif
+#if !(defined(BPF_PROG_TYPE_SOCK_OPS) || (defined(HAVE_DECL_BPF_PROG_TYPE_SOCK_OPS) && HAVE_DECL_BPF_PROG_TYPE_SOCK_OPS))
+# define BPF_PROG_TYPE_SOCK_OPS 13
+#endif
 
 #ifdef IN_MPERS
 
@@ -60,6 +63,7 @@
  XLAT(BPF_PROG_TYPE_LWT_IN),
  XLAT(BPF_PROG_TYPE_LWT_OUT),
  XLAT(BPF_PROG_TYPE_LWT_XMIT),
+ XLAT(BPF_PROG_TYPE_SOCK_OPS),
  XLAT_END
 };
 
diff --git a/xlat/bpf_prog_types.in b/xlat/bpf_prog_types.in
index bad608e..5d7057d 100644
--- a/xlat/bpf_prog_types.in
+++ b/xlat/bpf_prog_types.in
@@ -11,3 +11,4 @@
 BPF_PROG_TYPE_LWT_IN 10
 BPF_PROG_TYPE_LWT_OUT 11
 BPF_PROG_TYPE_LWT_XMIT 12
+BPF_PROG_TYPE_SOCK_OPS 13
diff --git a/xlat/crypto_nl_attrs.h b/xlat/crypto_nl_attrs.h
new file mode 100644
index 0000000..aebd38a
--- /dev/null
+++ b/xlat/crypto_nl_attrs.h
@@ -0,0 +1,62 @@
+/* Generated by ./xlat/gen.sh from ./xlat/crypto_nl_attrs.in; do not edit. */
+#if !(defined(CRYPTOCFGA_UNSPEC) || (defined(HAVE_DECL_CRYPTOCFGA_UNSPEC) && HAVE_DECL_CRYPTOCFGA_UNSPEC))
+# define CRYPTOCFGA_UNSPEC 0
+#endif
+#if !(defined(CRYPTOCFGA_PRIORITY_VAL) || (defined(HAVE_DECL_CRYPTOCFGA_PRIORITY_VAL) && HAVE_DECL_CRYPTOCFGA_PRIORITY_VAL))
+# define CRYPTOCFGA_PRIORITY_VAL 1
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_LARVAL) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_LARVAL) && HAVE_DECL_CRYPTOCFGA_REPORT_LARVAL))
+# define CRYPTOCFGA_REPORT_LARVAL 2
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_HASH) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_HASH) && HAVE_DECL_CRYPTOCFGA_REPORT_HASH))
+# define CRYPTOCFGA_REPORT_HASH 3
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_BLKCIPHER) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_BLKCIPHER) && HAVE_DECL_CRYPTOCFGA_REPORT_BLKCIPHER))
+# define CRYPTOCFGA_REPORT_BLKCIPHER 4
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_AEAD) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_AEAD) && HAVE_DECL_CRYPTOCFGA_REPORT_AEAD))
+# define CRYPTOCFGA_REPORT_AEAD 5
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_COMPRESS) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_COMPRESS) && HAVE_DECL_CRYPTOCFGA_REPORT_COMPRESS))
+# define CRYPTOCFGA_REPORT_COMPRESS 6
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_RNG) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_RNG) && HAVE_DECL_CRYPTOCFGA_REPORT_RNG))
+# define CRYPTOCFGA_REPORT_RNG 7
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_CIPHER) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_CIPHER) && HAVE_DECL_CRYPTOCFGA_REPORT_CIPHER))
+# define CRYPTOCFGA_REPORT_CIPHER 8
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_AKCIPHER) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_AKCIPHER) && HAVE_DECL_CRYPTOCFGA_REPORT_AKCIPHER))
+# define CRYPTOCFGA_REPORT_AKCIPHER 9
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_KPP) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_KPP) && HAVE_DECL_CRYPTOCFGA_REPORT_KPP))
+# define CRYPTOCFGA_REPORT_KPP 10
+#endif
+#if !(defined(CRYPTOCFGA_REPORT_ACOMP) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_ACOMP) && HAVE_DECL_CRYPTOCFGA_REPORT_ACOMP))
+# define CRYPTOCFGA_REPORT_ACOMP 11
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat crypto_nl_attrs in mpers mode
+
+#else
+
+static
+const struct xlat crypto_nl_attrs[] = {
+ XLAT(CRYPTOCFGA_UNSPEC),
+ XLAT(CRYPTOCFGA_PRIORITY_VAL),
+ XLAT(CRYPTOCFGA_REPORT_LARVAL),
+ XLAT(CRYPTOCFGA_REPORT_HASH),
+ XLAT(CRYPTOCFGA_REPORT_BLKCIPHER),
+ XLAT(CRYPTOCFGA_REPORT_AEAD),
+ XLAT(CRYPTOCFGA_REPORT_COMPRESS),
+ XLAT(CRYPTOCFGA_REPORT_RNG),
+ XLAT(CRYPTOCFGA_REPORT_CIPHER),
+ XLAT(CRYPTOCFGA_REPORT_AKCIPHER),
+ XLAT(CRYPTOCFGA_REPORT_KPP),
+ XLAT(CRYPTOCFGA_REPORT_ACOMP),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/crypto_nl_attrs.in b/xlat/crypto_nl_attrs.in
new file mode 100644
index 0000000..02b3662
--- /dev/null
+++ b/xlat/crypto_nl_attrs.in
@@ -0,0 +1,12 @@
+CRYPTOCFGA_UNSPEC		0
+CRYPTOCFGA_PRIORITY_VAL		1
+CRYPTOCFGA_REPORT_LARVAL	2
+CRYPTOCFGA_REPORT_HASH		3
+CRYPTOCFGA_REPORT_BLKCIPHER	4
+CRYPTOCFGA_REPORT_AEAD		5
+CRYPTOCFGA_REPORT_COMPRESS	6
+CRYPTOCFGA_REPORT_RNG		7
+CRYPTOCFGA_REPORT_CIPHER	8
+CRYPTOCFGA_REPORT_AKCIPHER	9
+CRYPTOCFGA_REPORT_KPP		10
+CRYPTOCFGA_REPORT_ACOMP		11
diff --git a/xlat/dcb_commands.h b/xlat/dcb_commands.h
new file mode 100644
index 0000000..a6fe22c
--- /dev/null
+++ b/xlat/dcb_commands.h
@@ -0,0 +1,126 @@
+/* Generated by ./xlat/gen.sh from ./xlat/dcb_commands.in; do not edit. */
+#if !(defined(DCB_CMD_UNDEFINED) || (defined(HAVE_DECL_DCB_CMD_UNDEFINED) && HAVE_DECL_DCB_CMD_UNDEFINED))
+# define DCB_CMD_UNDEFINED 0
+#endif
+#if !(defined(DCB_CMD_GSTATE) || (defined(HAVE_DECL_DCB_CMD_GSTATE) && HAVE_DECL_DCB_CMD_GSTATE))
+# define DCB_CMD_GSTATE 1
+#endif
+#if !(defined(DCB_CMD_SSTATE) || (defined(HAVE_DECL_DCB_CMD_SSTATE) && HAVE_DECL_DCB_CMD_SSTATE))
+# define DCB_CMD_SSTATE 2
+#endif
+#if !(defined(DCB_CMD_PGTX_GCFG) || (defined(HAVE_DECL_DCB_CMD_PGTX_GCFG) && HAVE_DECL_DCB_CMD_PGTX_GCFG))
+# define DCB_CMD_PGTX_GCFG 3
+#endif
+#if !(defined(DCB_CMD_PGTX_SCFG) || (defined(HAVE_DECL_DCB_CMD_PGTX_SCFG) && HAVE_DECL_DCB_CMD_PGTX_SCFG))
+# define DCB_CMD_PGTX_SCFG 4
+#endif
+#if !(defined(DCB_CMD_PGRX_GCFG) || (defined(HAVE_DECL_DCB_CMD_PGRX_GCFG) && HAVE_DECL_DCB_CMD_PGRX_GCFG))
+# define DCB_CMD_PGRX_GCFG 5
+#endif
+#if !(defined(DCB_CMD_PGRX_SCFG) || (defined(HAVE_DECL_DCB_CMD_PGRX_SCFG) && HAVE_DECL_DCB_CMD_PGRX_SCFG))
+# define DCB_CMD_PGRX_SCFG 6
+#endif
+#if !(defined(DCB_CMD_PFC_GCFG) || (defined(HAVE_DECL_DCB_CMD_PFC_GCFG) && HAVE_DECL_DCB_CMD_PFC_GCFG))
+# define DCB_CMD_PFC_GCFG 7
+#endif
+#if !(defined(DCB_CMD_PFC_SCFG) || (defined(HAVE_DECL_DCB_CMD_PFC_SCFG) && HAVE_DECL_DCB_CMD_PFC_SCFG))
+# define DCB_CMD_PFC_SCFG 8
+#endif
+#if !(defined(DCB_CMD_SET_ALL) || (defined(HAVE_DECL_DCB_CMD_SET_ALL) && HAVE_DECL_DCB_CMD_SET_ALL))
+# define DCB_CMD_SET_ALL 9
+#endif
+#if !(defined(DCB_CMD_GPERM_HWADDR) || (defined(HAVE_DECL_DCB_CMD_GPERM_HWADDR) && HAVE_DECL_DCB_CMD_GPERM_HWADDR))
+# define DCB_CMD_GPERM_HWADDR 10
+#endif
+#if !(defined(DCB_CMD_GCAP) || (defined(HAVE_DECL_DCB_CMD_GCAP) && HAVE_DECL_DCB_CMD_GCAP))
+# define DCB_CMD_GCAP 11
+#endif
+#if !(defined(DCB_CMD_GNUMTCS) || (defined(HAVE_DECL_DCB_CMD_GNUMTCS) && HAVE_DECL_DCB_CMD_GNUMTCS))
+# define DCB_CMD_GNUMTCS 12
+#endif
+#if !(defined(DCB_CMD_SNUMTCS) || (defined(HAVE_DECL_DCB_CMD_SNUMTCS) && HAVE_DECL_DCB_CMD_SNUMTCS))
+# define DCB_CMD_SNUMTCS 13
+#endif
+#if !(defined(DCB_CMD_PFC_GSTATE) || (defined(HAVE_DECL_DCB_CMD_PFC_GSTATE) && HAVE_DECL_DCB_CMD_PFC_GSTATE))
+# define DCB_CMD_PFC_GSTATE 14
+#endif
+#if !(defined(DCB_CMD_PFC_SSTATE) || (defined(HAVE_DECL_DCB_CMD_PFC_SSTATE) && HAVE_DECL_DCB_CMD_PFC_SSTATE))
+# define DCB_CMD_PFC_SSTATE 15
+#endif
+#if !(defined(DCB_CMD_BCN_GCFG) || (defined(HAVE_DECL_DCB_CMD_BCN_GCFG) && HAVE_DECL_DCB_CMD_BCN_GCFG))
+# define DCB_CMD_BCN_GCFG 16
+#endif
+#if !(defined(DCB_CMD_BCN_SCFG) || (defined(HAVE_DECL_DCB_CMD_BCN_SCFG) && HAVE_DECL_DCB_CMD_BCN_SCFG))
+# define DCB_CMD_BCN_SCFG 17
+#endif
+#if !(defined(DCB_CMD_GAPP) || (defined(HAVE_DECL_DCB_CMD_GAPP) && HAVE_DECL_DCB_CMD_GAPP))
+# define DCB_CMD_GAPP 18
+#endif
+#if !(defined(DCB_CMD_SAPP) || (defined(HAVE_DECL_DCB_CMD_SAPP) && HAVE_DECL_DCB_CMD_SAPP))
+# define DCB_CMD_SAPP 19
+#endif
+#if !(defined(DCB_CMD_IEEE_SET) || (defined(HAVE_DECL_DCB_CMD_IEEE_SET) && HAVE_DECL_DCB_CMD_IEEE_SET))
+# define DCB_CMD_IEEE_SET 20
+#endif
+#if !(defined(DCB_CMD_IEEE_GET) || (defined(HAVE_DECL_DCB_CMD_IEEE_GET) && HAVE_DECL_DCB_CMD_IEEE_GET))
+# define DCB_CMD_IEEE_GET 21
+#endif
+#if !(defined(DCB_CMD_GDCBX) || (defined(HAVE_DECL_DCB_CMD_GDCBX) && HAVE_DECL_DCB_CMD_GDCBX))
+# define DCB_CMD_GDCBX 22
+#endif
+#if !(defined(DCB_CMD_SDCBX) || (defined(HAVE_DECL_DCB_CMD_SDCBX) && HAVE_DECL_DCB_CMD_SDCBX))
+# define DCB_CMD_SDCBX 23
+#endif
+#if !(defined(DCB_CMD_GFEATCFG) || (defined(HAVE_DECL_DCB_CMD_GFEATCFG) && HAVE_DECL_DCB_CMD_GFEATCFG))
+# define DCB_CMD_GFEATCFG 24
+#endif
+#if !(defined(DCB_CMD_SFEATCFG) || (defined(HAVE_DECL_DCB_CMD_SFEATCFG) && HAVE_DECL_DCB_CMD_SFEATCFG))
+# define DCB_CMD_SFEATCFG 25
+#endif
+#if !(defined(DCB_CMD_CEE_GET) || (defined(HAVE_DECL_DCB_CMD_CEE_GET) && HAVE_DECL_DCB_CMD_CEE_GET))
+# define DCB_CMD_CEE_GET 26
+#endif
+#if !(defined(DCB_CMD_IEEE_DEL) || (defined(HAVE_DECL_DCB_CMD_IEEE_DEL) && HAVE_DECL_DCB_CMD_IEEE_DEL))
+# define DCB_CMD_IEEE_DEL 27
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat dcb_commands in mpers mode
+
+#else
+
+static
+const struct xlat dcb_commands[] = {
+ XLAT(DCB_CMD_UNDEFINED),
+ XLAT(DCB_CMD_GSTATE),
+ XLAT(DCB_CMD_SSTATE),
+ XLAT(DCB_CMD_PGTX_GCFG),
+ XLAT(DCB_CMD_PGTX_SCFG),
+ XLAT(DCB_CMD_PGRX_GCFG),
+ XLAT(DCB_CMD_PGRX_SCFG),
+ XLAT(DCB_CMD_PFC_GCFG),
+ XLAT(DCB_CMD_PFC_SCFG),
+ XLAT(DCB_CMD_SET_ALL),
+ XLAT(DCB_CMD_GPERM_HWADDR),
+ XLAT(DCB_CMD_GCAP),
+ XLAT(DCB_CMD_GNUMTCS),
+ XLAT(DCB_CMD_SNUMTCS),
+ XLAT(DCB_CMD_PFC_GSTATE),
+ XLAT(DCB_CMD_PFC_SSTATE),
+ XLAT(DCB_CMD_BCN_GCFG),
+ XLAT(DCB_CMD_BCN_SCFG),
+ XLAT(DCB_CMD_GAPP),
+ XLAT(DCB_CMD_SAPP),
+ XLAT(DCB_CMD_IEEE_SET),
+ XLAT(DCB_CMD_IEEE_GET),
+ XLAT(DCB_CMD_GDCBX),
+ XLAT(DCB_CMD_SDCBX),
+ XLAT(DCB_CMD_GFEATCFG),
+ XLAT(DCB_CMD_SFEATCFG),
+ XLAT(DCB_CMD_CEE_GET),
+ XLAT(DCB_CMD_IEEE_DEL),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/dcb_commands.in b/xlat/dcb_commands.in
new file mode 100644
index 0000000..6a5e613
--- /dev/null
+++ b/xlat/dcb_commands.in
@@ -0,0 +1,28 @@
+DCB_CMD_UNDEFINED	0
+DCB_CMD_GSTATE		1
+DCB_CMD_SSTATE		2
+DCB_CMD_PGTX_GCFG	3
+DCB_CMD_PGTX_SCFG	4
+DCB_CMD_PGRX_GCFG	5
+DCB_CMD_PGRX_SCFG	6
+DCB_CMD_PFC_GCFG	7
+DCB_CMD_PFC_SCFG	8
+DCB_CMD_SET_ALL		9
+DCB_CMD_GPERM_HWADDR	10
+DCB_CMD_GCAP		11
+DCB_CMD_GNUMTCS		12
+DCB_CMD_SNUMTCS		13
+DCB_CMD_PFC_GSTATE	14
+DCB_CMD_PFC_SSTATE	15
+DCB_CMD_BCN_GCFG	16
+DCB_CMD_BCN_SCFG	17
+DCB_CMD_GAPP		18
+DCB_CMD_SAPP		19
+DCB_CMD_IEEE_SET	20
+DCB_CMD_IEEE_GET	21
+DCB_CMD_GDCBX		22
+DCB_CMD_SDCBX		23
+DCB_CMD_GFEATCFG	24
+DCB_CMD_SFEATCFG	25
+DCB_CMD_CEE_GET		26
+DCB_CMD_IEEE_DEL	27
diff --git a/xlat/evdev_keycode.h b/xlat/evdev_keycode.h
index c4efd2c..2ba214e 100644
--- a/xlat/evdev_keycode.h
+++ b/xlat/evdev_keycode.h
@@ -1511,6 +1511,9 @@
 #if defined(KEY_VOICECOMMAND) || (defined(HAVE_DECL_KEY_VOICECOMMAND) && HAVE_DECL_KEY_VOICECOMMAND)
   XLAT(KEY_VOICECOMMAND),
 #endif
+#if defined(KEY_ASSISTANT) || (defined(HAVE_DECL_KEY_ASSISTANT) && HAVE_DECL_KEY_ASSISTANT)
+  XLAT(KEY_ASSISTANT),
+#endif
 
 #if defined(KEY_BRIGHTNESS_MIN) || (defined(HAVE_DECL_KEY_BRIGHTNESS_MIN) && HAVE_DECL_KEY_BRIGHTNESS_MIN)
   XLAT(KEY_BRIGHTNESS_MIN),
diff --git a/xlat/evdev_keycode.in b/xlat/evdev_keycode.in
index 15c829a..5a0eb20 100644
--- a/xlat/evdev_keycode.in
+++ b/xlat/evdev_keycode.in
@@ -521,6 +521,7 @@
 KEY_APPSELECT
 KEY_SCREENSAVER
 KEY_VOICECOMMAND
+KEY_ASSISTANT
 
 KEY_BRIGHTNESS_MIN
 KEY_BRIGHTNESS_MAX
diff --git a/xlat/fib_rule_actions.h b/xlat/fib_rule_actions.h
new file mode 100644
index 0000000..741b36d
--- /dev/null
+++ b/xlat/fib_rule_actions.h
@@ -0,0 +1,50 @@
+/* Generated by ./xlat/gen.sh from ./xlat/fib_rule_actions.in; do not edit. */
+#if !(defined(FR_ACT_UNSPEC) || (defined(HAVE_DECL_FR_ACT_UNSPEC) && HAVE_DECL_FR_ACT_UNSPEC))
+# define FR_ACT_UNSPEC 0
+#endif
+#if !(defined(FR_ACT_TO_TBL) || (defined(HAVE_DECL_FR_ACT_TO_TBL) && HAVE_DECL_FR_ACT_TO_TBL))
+# define FR_ACT_TO_TBL 1
+#endif
+#if !(defined(FR_ACT_GOTO) || (defined(HAVE_DECL_FR_ACT_GOTO) && HAVE_DECL_FR_ACT_GOTO))
+# define FR_ACT_GOTO 2
+#endif
+#if !(defined(FR_ACT_NOP) || (defined(HAVE_DECL_FR_ACT_NOP) && HAVE_DECL_FR_ACT_NOP))
+# define FR_ACT_NOP 3
+#endif
+#if !(defined(FR_ACT_RES3) || (defined(HAVE_DECL_FR_ACT_RES3) && HAVE_DECL_FR_ACT_RES3))
+# define FR_ACT_RES3 4
+#endif
+#if !(defined(FR_ACT_RES4) || (defined(HAVE_DECL_FR_ACT_RES4) && HAVE_DECL_FR_ACT_RES4))
+# define FR_ACT_RES4 5
+#endif
+#if !(defined(FR_ACT_BLACKHOLE) || (defined(HAVE_DECL_FR_ACT_BLACKHOLE) && HAVE_DECL_FR_ACT_BLACKHOLE))
+# define FR_ACT_BLACKHOLE 6
+#endif
+#if !(defined(FR_ACT_UNREACHABLE) || (defined(HAVE_DECL_FR_ACT_UNREACHABLE) && HAVE_DECL_FR_ACT_UNREACHABLE))
+# define FR_ACT_UNREACHABLE 7
+#endif
+#if !(defined(FR_ACT_PROHIBIT) || (defined(HAVE_DECL_FR_ACT_PROHIBIT) && HAVE_DECL_FR_ACT_PROHIBIT))
+# define FR_ACT_PROHIBIT 8
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat fib_rule_actions in mpers mode
+
+#else
+
+static
+const struct xlat fib_rule_actions[] = {
+ XLAT(FR_ACT_UNSPEC),
+ XLAT(FR_ACT_TO_TBL),
+ XLAT(FR_ACT_GOTO),
+ XLAT(FR_ACT_NOP),
+ XLAT(FR_ACT_RES3),
+ XLAT(FR_ACT_RES4),
+ XLAT(FR_ACT_BLACKHOLE),
+ XLAT(FR_ACT_UNREACHABLE),
+ XLAT(FR_ACT_PROHIBIT),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/fib_rule_actions.in b/xlat/fib_rule_actions.in
new file mode 100644
index 0000000..55d5912
--- /dev/null
+++ b/xlat/fib_rule_actions.in
@@ -0,0 +1,9 @@
+FR_ACT_UNSPEC		0
+FR_ACT_TO_TBL		1
+FR_ACT_GOTO		2
+FR_ACT_NOP		3
+FR_ACT_RES3		4
+FR_ACT_RES4		5
+FR_ACT_BLACKHOLE	6
+FR_ACT_UNREACHABLE	7
+FR_ACT_PROHIBIT		8
diff --git a/xlat/fib_rule_flags.h b/xlat/fib_rule_flags.h
new file mode 100644
index 0000000..4f40da1
--- /dev/null
+++ b/xlat/fib_rule_flags.h
@@ -0,0 +1,32 @@
+/* Generated by ./xlat/gen.sh from ./xlat/fib_rule_flags.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat fib_rule_flags in mpers mode
+
+#else
+
+static
+const struct xlat fib_rule_flags[] = {
+#if defined(FIB_RULE_PERMANENT) || (defined(HAVE_DECL_FIB_RULE_PERMANENT) && HAVE_DECL_FIB_RULE_PERMANENT)
+  XLAT(FIB_RULE_PERMANENT),
+#endif
+#if defined(FIB_RULE_INVERT) || (defined(HAVE_DECL_FIB_RULE_INVERT) && HAVE_DECL_FIB_RULE_INVERT)
+  XLAT(FIB_RULE_INVERT),
+#endif
+#if defined(FIB_RULE_UNRESOLVED) || (defined(HAVE_DECL_FIB_RULE_UNRESOLVED) && HAVE_DECL_FIB_RULE_UNRESOLVED)
+  XLAT(FIB_RULE_UNRESOLVED),
+#endif
+#if defined(FIB_RULE_IIF_DETACHED) || (defined(HAVE_DECL_FIB_RULE_IIF_DETACHED) && HAVE_DECL_FIB_RULE_IIF_DETACHED)
+  XLAT(FIB_RULE_IIF_DETACHED),
+#endif
+#if defined(FIB_RULE_OIF_DETACHED) || (defined(HAVE_DECL_FIB_RULE_OIF_DETACHED) && HAVE_DECL_FIB_RULE_OIF_DETACHED)
+  XLAT(FIB_RULE_OIF_DETACHED),
+#endif
+#if defined(FIB_RULE_FIND_SADDR) || (defined(HAVE_DECL_FIB_RULE_FIND_SADDR) && HAVE_DECL_FIB_RULE_FIND_SADDR)
+  XLAT(FIB_RULE_FIND_SADDR),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/fib_rule_flags.in b/xlat/fib_rule_flags.in
new file mode 100644
index 0000000..8f4d42c
--- /dev/null
+++ b/xlat/fib_rule_flags.in
@@ -0,0 +1,6 @@
+FIB_RULE_PERMANENT
+FIB_RULE_INVERT
+FIB_RULE_UNRESOLVED
+FIB_RULE_IIF_DETACHED
+FIB_RULE_OIF_DETACHED
+FIB_RULE_FIND_SADDR
diff --git a/xlat/fsmagic.h b/xlat/fsmagic.h
index b419ee9..7a57046 100644
--- a/xlat/fsmagic.h
+++ b/xlat/fsmagic.h
@@ -77,6 +77,7 @@
 { 0x57ac6e9d,	"STACK_END_MAGIC"	},
 { 0x58295829,	"ZSMALLOC_MAGIC"	},
 { 0x58465342,	"XFS_SB_MAGIC"		},
+{ 0x5a3c69f0,	"AAFS_MAGIC"		},
 { 0x6165676c,	"PSTOREFS_MAGIC"	},
 { 0x61756673,	"AUFS_SUPER_MAGIC"	},
 { 0x62646576,	"BDEVFS_MAGIC"		},
diff --git a/xlat/fsmagic.in b/xlat/fsmagic.in
index 78fe16c..a5e6140 100644
--- a/xlat/fsmagic.in
+++ b/xlat/fsmagic.in
@@ -67,6 +67,7 @@
 { 0x57ac6e9d,	"STACK_END_MAGIC"	},
 { 0x58295829,	"ZSMALLOC_MAGIC"	},
 { 0x58465342,	"XFS_SB_MAGIC"		},
+{ 0x5a3c69f0,	"AAFS_MAGIC"		},
 { 0x6165676c,	"PSTOREFS_MAGIC"	},
 { 0x61756673,	"AUFS_SUPER_MAGIC"	},
 { 0x62646576,	"BDEVFS_MAGIC"		},
diff --git a/xlat/ifaddrflags.h b/xlat/ifaddrflags.h
new file mode 100644
index 0000000..95aa830
--- /dev/null
+++ b/xlat/ifaddrflags.h
@@ -0,0 +1,50 @@
+/* Generated by ./xlat/gen.sh from ./xlat/ifaddrflags.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat ifaddrflags in mpers mode
+
+#else
+
+static
+const struct xlat ifaddrflags[] = {
+#if defined(IFA_F_SECONDARY) || (defined(HAVE_DECL_IFA_F_SECONDARY) && HAVE_DECL_IFA_F_SECONDARY)
+  XLAT(IFA_F_SECONDARY),
+#endif
+#if defined(IFA_F_NODAD) || (defined(HAVE_DECL_IFA_F_NODAD) && HAVE_DECL_IFA_F_NODAD)
+  XLAT(IFA_F_NODAD),
+#endif
+#if defined(IFA_F_OPTIMISTIC) || (defined(HAVE_DECL_IFA_F_OPTIMISTIC) && HAVE_DECL_IFA_F_OPTIMISTIC)
+  XLAT(IFA_F_OPTIMISTIC),
+#endif
+#if defined(IFA_F_DADFAILED) || (defined(HAVE_DECL_IFA_F_DADFAILED) && HAVE_DECL_IFA_F_DADFAILED)
+  XLAT(IFA_F_DADFAILED),
+#endif
+#if defined(IFA_F_HOMEADDRESS) || (defined(HAVE_DECL_IFA_F_HOMEADDRESS) && HAVE_DECL_IFA_F_HOMEADDRESS)
+  XLAT(IFA_F_HOMEADDRESS),
+#endif
+#if defined(IFA_F_DEPRECATED) || (defined(HAVE_DECL_IFA_F_DEPRECATED) && HAVE_DECL_IFA_F_DEPRECATED)
+  XLAT(IFA_F_DEPRECATED),
+#endif
+#if defined(IFA_F_TENTATIVE) || (defined(HAVE_DECL_IFA_F_TENTATIVE) && HAVE_DECL_IFA_F_TENTATIVE)
+  XLAT(IFA_F_TENTATIVE),
+#endif
+#if defined(IFA_F_PERMANENT) || (defined(HAVE_DECL_IFA_F_PERMANENT) && HAVE_DECL_IFA_F_PERMANENT)
+  XLAT(IFA_F_PERMANENT),
+#endif
+#if defined(IFA_F_MANAGETEMPADDR) || (defined(HAVE_DECL_IFA_F_MANAGETEMPADDR) && HAVE_DECL_IFA_F_MANAGETEMPADDR)
+  XLAT(IFA_F_MANAGETEMPADDR),
+#endif
+#if defined(IFA_F_NOPREFIXROUTE) || (defined(HAVE_DECL_IFA_F_NOPREFIXROUTE) && HAVE_DECL_IFA_F_NOPREFIXROUTE)
+  XLAT(IFA_F_NOPREFIXROUTE),
+#endif
+#if defined(IFA_F_MCAUTOJOIN) || (defined(HAVE_DECL_IFA_F_MCAUTOJOIN) && HAVE_DECL_IFA_F_MCAUTOJOIN)
+  XLAT(IFA_F_MCAUTOJOIN),
+#endif
+#if defined(IFA_F_STABLE_PRIVACY) || (defined(HAVE_DECL_IFA_F_STABLE_PRIVACY) && HAVE_DECL_IFA_F_STABLE_PRIVACY)
+  XLAT(IFA_F_STABLE_PRIVACY),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/ifaddrflags.in b/xlat/ifaddrflags.in
new file mode 100644
index 0000000..19df46b
--- /dev/null
+++ b/xlat/ifaddrflags.in
@@ -0,0 +1,12 @@
+IFA_F_SECONDARY
+IFA_F_NODAD
+IFA_F_OPTIMISTIC
+IFA_F_DADFAILED
+IFA_F_HOMEADDRESS
+IFA_F_DEPRECATED
+IFA_F_TENTATIVE
+IFA_F_PERMANENT
+IFA_F_MANAGETEMPADDR
+IFA_F_NOPREFIXROUTE
+IFA_F_MCAUTOJOIN
+IFA_F_STABLE_PRIVACY
diff --git a/xlat/iffflags.h b/xlat/iffflags.h
index 7aaee51..b197e08 100644
--- a/xlat/iffflags.h
+++ b/xlat/iffflags.h
@@ -1,14 +1,7 @@
 /* Generated by ./xlat/gen.sh from ./xlat/iffflags.in; do not edit. */
 
-#ifdef IN_MPERS
+#ifndef IN_MPERS
 
-extern const struct xlat iffflags[];
-
-#else
-
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
-static
-# endif
 const struct xlat iffflags[] = {
 #if defined(IFF_UP) || (defined(HAVE_DECL_IFF_UP) && HAVE_DECL_IFF_UP)
   XLAT(IFF_UP),
diff --git a/xlat/inet_diag_bytecodes.h b/xlat/inet_diag_bytecodes.h
new file mode 100644
index 0000000..a024d2a
--- /dev/null
+++ b/xlat/inet_diag_bytecodes.h
@@ -0,0 +1,25 @@
+/* Generated by ./xlat/gen.sh from ./xlat/inet_diag_bytecodes.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat inet_diag_bytecodes in mpers mode
+
+#else
+
+static
+const struct xlat inet_diag_bytecodes[] = {
+ XLAT(INET_DIAG_BC_NOP),
+ XLAT(INET_DIAG_BC_JMP),
+ XLAT(INET_DIAG_BC_S_GE),
+ XLAT(INET_DIAG_BC_S_LE),
+ XLAT(INET_DIAG_BC_D_GE),
+ XLAT(INET_DIAG_BC_D_LE),
+ XLAT(INET_DIAG_BC_AUTO),
+ XLAT(INET_DIAG_BC_S_COND),
+ XLAT(INET_DIAG_BC_D_COND),
+ XLAT(INET_DIAG_BC_DEV_COND),
+ XLAT(INET_DIAG_BC_MARK_COND),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/inet_diag_bytecodes.in b/xlat/inet_diag_bytecodes.in
new file mode 100644
index 0000000..ccaf0da
--- /dev/null
+++ b/xlat/inet_diag_bytecodes.in
@@ -0,0 +1,12 @@
+#unconditional
+INET_DIAG_BC_NOP
+INET_DIAG_BC_JMP
+INET_DIAG_BC_S_GE
+INET_DIAG_BC_S_LE
+INET_DIAG_BC_D_GE
+INET_DIAG_BC_D_LE
+INET_DIAG_BC_AUTO
+INET_DIAG_BC_S_COND
+INET_DIAG_BC_D_COND
+INET_DIAG_BC_DEV_COND
+INET_DIAG_BC_MARK_COND
diff --git a/xlat/ip_type_of_services.h b/xlat/ip_type_of_services.h
new file mode 100644
index 0000000..9a327fa
--- /dev/null
+++ b/xlat/ip_type_of_services.h
@@ -0,0 +1,21 @@
+/* Generated by ./xlat/gen.sh from ./xlat/ip_type_of_services.in; do not edit. */
+
+#ifndef IN_MPERS
+
+const struct xlat ip_type_of_services[] = {
+#if defined(IPTOS_LOWDELAY) || (defined(HAVE_DECL_IPTOS_LOWDELAY) && HAVE_DECL_IPTOS_LOWDELAY)
+  XLAT(IPTOS_LOWDELAY),
+#endif
+#if defined(IPTOS_THROUGHPUT) || (defined(HAVE_DECL_IPTOS_THROUGHPUT) && HAVE_DECL_IPTOS_THROUGHPUT)
+  XLAT(IPTOS_THROUGHPUT),
+#endif
+#if defined(IPTOS_RELIABILITY) || (defined(HAVE_DECL_IPTOS_RELIABILITY) && HAVE_DECL_IPTOS_RELIABILITY)
+  XLAT(IPTOS_RELIABILITY),
+#endif
+#if defined(IPTOS_MINCOST) || (defined(HAVE_DECL_IPTOS_MINCOST) && HAVE_DECL_IPTOS_MINCOST)
+  XLAT(IPTOS_MINCOST),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/ip_type_of_services.in b/xlat/ip_type_of_services.in
new file mode 100644
index 0000000..41c526a
--- /dev/null
+++ b/xlat/ip_type_of_services.in
@@ -0,0 +1,4 @@
+IPTOS_LOWDELAY
+IPTOS_THROUGHPUT
+IPTOS_RELIABILITY
+IPTOS_MINCOST
diff --git a/xlat/lwtunnel_encap_types.h b/xlat/lwtunnel_encap_types.h
new file mode 100644
index 0000000..ce29b6f
--- /dev/null
+++ b/xlat/lwtunnel_encap_types.h
@@ -0,0 +1,42 @@
+/* Generated by ./xlat/gen.sh from ./xlat/lwtunnel_encap_types.in; do not edit. */
+#if !(defined(LWTUNNEL_ENCAP_NONE) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_NONE) && HAVE_DECL_LWTUNNEL_ENCAP_NONE))
+# define LWTUNNEL_ENCAP_NONE 0
+#endif
+#if !(defined(LWTUNNEL_ENCAP_MPLS) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_MPLS) && HAVE_DECL_LWTUNNEL_ENCAP_MPLS))
+# define LWTUNNEL_ENCAP_MPLS 1
+#endif
+#if !(defined(LWTUNNEL_ENCAP_IP) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_IP) && HAVE_DECL_LWTUNNEL_ENCAP_IP))
+# define LWTUNNEL_ENCAP_IP 2
+#endif
+#if !(defined(LWTUNNEL_ENCAP_ILA) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_ILA) && HAVE_DECL_LWTUNNEL_ENCAP_ILA))
+# define LWTUNNEL_ENCAP_ILA 3
+#endif
+#if !(defined(LWTUNNEL_ENCAP_IP6) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_IP6) && HAVE_DECL_LWTUNNEL_ENCAP_IP6))
+# define LWTUNNEL_ENCAP_IP6 4
+#endif
+#if !(defined(LWTUNNEL_ENCAP_SEG6) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_SEG6) && HAVE_DECL_LWTUNNEL_ENCAP_SEG6))
+# define LWTUNNEL_ENCAP_SEG6 5
+#endif
+#if !(defined(LWTUNNEL_ENCAP_BPF) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_BPF) && HAVE_DECL_LWTUNNEL_ENCAP_BPF))
+# define LWTUNNEL_ENCAP_BPF 6
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat lwtunnel_encap_types in mpers mode
+
+#else
+
+static
+const struct xlat lwtunnel_encap_types[] = {
+ XLAT(LWTUNNEL_ENCAP_NONE),
+ XLAT(LWTUNNEL_ENCAP_MPLS),
+ XLAT(LWTUNNEL_ENCAP_IP),
+ XLAT(LWTUNNEL_ENCAP_ILA),
+ XLAT(LWTUNNEL_ENCAP_IP6),
+ XLAT(LWTUNNEL_ENCAP_SEG6),
+ XLAT(LWTUNNEL_ENCAP_BPF),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/lwtunnel_encap_types.in b/xlat/lwtunnel_encap_types.in
new file mode 100644
index 0000000..4654bd4
--- /dev/null
+++ b/xlat/lwtunnel_encap_types.in
@@ -0,0 +1,7 @@
+LWTUNNEL_ENCAP_NONE	0
+LWTUNNEL_ENCAP_MPLS	1
+LWTUNNEL_ENCAP_IP	2
+LWTUNNEL_ENCAP_ILA	3
+LWTUNNEL_ENCAP_IP6	4
+LWTUNNEL_ENCAP_SEG6	5
+LWTUNNEL_ENCAP_BPF	6
diff --git a/xlat/neighbor_cache_entry_flags.h b/xlat/neighbor_cache_entry_flags.h
new file mode 100644
index 0000000..3bf2652
--- /dev/null
+++ b/xlat/neighbor_cache_entry_flags.h
@@ -0,0 +1,32 @@
+/* Generated by ./xlat/gen.sh from ./xlat/neighbor_cache_entry_flags.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat neighbor_cache_entry_flags in mpers mode
+
+#else
+
+static
+const struct xlat neighbor_cache_entry_flags[] = {
+#if defined(NTF_USE) || (defined(HAVE_DECL_NTF_USE) && HAVE_DECL_NTF_USE)
+  XLAT(NTF_USE),
+#endif
+#if defined(NTF_SELF) || (defined(HAVE_DECL_NTF_SELF) && HAVE_DECL_NTF_SELF)
+  XLAT(NTF_SELF),
+#endif
+#if defined(NTF_MASTER) || (defined(HAVE_DECL_NTF_MASTER) && HAVE_DECL_NTF_MASTER)
+  XLAT(NTF_MASTER),
+#endif
+#if defined(NTF_PROXY) || (defined(HAVE_DECL_NTF_PROXY) && HAVE_DECL_NTF_PROXY)
+  XLAT(NTF_PROXY),
+#endif
+#if defined(NTF_EXT_LEARNED) || (defined(HAVE_DECL_NTF_EXT_LEARNED) && HAVE_DECL_NTF_EXT_LEARNED)
+  XLAT(NTF_EXT_LEARNED),
+#endif
+#if defined(NTF_ROUTER) || (defined(HAVE_DECL_NTF_ROUTER) && HAVE_DECL_NTF_ROUTER)
+  XLAT(NTF_ROUTER),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/neighbor_cache_entry_flags.in b/xlat/neighbor_cache_entry_flags.in
new file mode 100644
index 0000000..6a210f5
--- /dev/null
+++ b/xlat/neighbor_cache_entry_flags.in
@@ -0,0 +1,6 @@
+NTF_USE
+NTF_SELF
+NTF_MASTER
+NTF_PROXY
+NTF_EXT_LEARNED
+NTF_ROUTER
diff --git a/xlat/neighbor_cache_entry_states.h b/xlat/neighbor_cache_entry_states.h
new file mode 100644
index 0000000..40454eb
--- /dev/null
+++ b/xlat/neighbor_cache_entry_states.h
@@ -0,0 +1,41 @@
+/* Generated by ./xlat/gen.sh from ./xlat/neighbor_cache_entry_states.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat neighbor_cache_entry_states in mpers mode
+
+#else
+
+static
+const struct xlat neighbor_cache_entry_states[] = {
+#if defined(NUD_INCOMPLETE) || (defined(HAVE_DECL_NUD_INCOMPLETE) && HAVE_DECL_NUD_INCOMPLETE)
+  XLAT(NUD_INCOMPLETE),
+#endif
+#if defined(NUD_REACHABLE) || (defined(HAVE_DECL_NUD_REACHABLE) && HAVE_DECL_NUD_REACHABLE)
+  XLAT(NUD_REACHABLE),
+#endif
+#if defined(NUD_STALE) || (defined(HAVE_DECL_NUD_STALE) && HAVE_DECL_NUD_STALE)
+  XLAT(NUD_STALE),
+#endif
+#if defined(NUD_DELAY) || (defined(HAVE_DECL_NUD_DELAY) && HAVE_DECL_NUD_DELAY)
+  XLAT(NUD_DELAY),
+#endif
+#if defined(NUD_PROBE) || (defined(HAVE_DECL_NUD_PROBE) && HAVE_DECL_NUD_PROBE)
+  XLAT(NUD_PROBE),
+#endif
+#if defined(NUD_FAILED) || (defined(HAVE_DECL_NUD_FAILED) && HAVE_DECL_NUD_FAILED)
+  XLAT(NUD_FAILED),
+#endif
+#if defined(NUD_NOARP) || (defined(HAVE_DECL_NUD_NOARP) && HAVE_DECL_NUD_NOARP)
+  XLAT(NUD_NOARP),
+#endif
+#if defined(NUD_PERMANENT) || (defined(HAVE_DECL_NUD_PERMANENT) && HAVE_DECL_NUD_PERMANENT)
+  XLAT(NUD_PERMANENT),
+#endif
+#if defined(NUD_NONE) || (defined(HAVE_DECL_NUD_NONE) && HAVE_DECL_NUD_NONE)
+  XLAT(NUD_NONE),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/neighbor_cache_entry_states.in b/xlat/neighbor_cache_entry_states.in
new file mode 100644
index 0000000..5ae9c4d
--- /dev/null
+++ b/xlat/neighbor_cache_entry_states.in
@@ -0,0 +1,9 @@
+NUD_INCOMPLETE
+NUD_REACHABLE
+NUD_STALE
+NUD_DELAY
+NUD_PROBE
+NUD_FAILED
+NUD_NOARP
+NUD_PERMANENT
+NUD_NONE
diff --git a/xlat/netlink_ack_flags.h b/xlat/netlink_ack_flags.h
new file mode 100644
index 0000000..bb8c9d8
--- /dev/null
+++ b/xlat/netlink_ack_flags.h
@@ -0,0 +1,20 @@
+/* Generated by ./xlat/gen.sh from ./xlat/netlink_ack_flags.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat netlink_ack_flags in mpers mode
+
+#else
+
+static
+const struct xlat netlink_ack_flags[] = {
+#if defined(NLM_F_CAPPED) || (defined(HAVE_DECL_NLM_F_CAPPED) && HAVE_DECL_NLM_F_CAPPED)
+  XLAT(NLM_F_CAPPED),
+#endif
+#if defined(NLM_F_ACK_TLVS) || (defined(HAVE_DECL_NLM_F_ACK_TLVS) && HAVE_DECL_NLM_F_ACK_TLVS)
+  XLAT(NLM_F_ACK_TLVS),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/netlink_ack_flags.in b/xlat/netlink_ack_flags.in
new file mode 100644
index 0000000..2aabb84
--- /dev/null
+++ b/xlat/netlink_ack_flags.in
@@ -0,0 +1,2 @@
+NLM_F_CAPPED
+NLM_F_ACK_TLVS
diff --git a/xlat/nl_crypto_types.h b/xlat/nl_crypto_types.h
new file mode 100644
index 0000000..4e15ec6
--- /dev/null
+++ b/xlat/nl_crypto_types.h
@@ -0,0 +1,34 @@
+/* Generated by ./xlat/gen.sh from ./xlat/nl_crypto_types.in; do not edit. */
+#if !(defined(CRYPTO_MSG_NEWALG) || (defined(HAVE_DECL_CRYPTO_MSG_NEWALG) && HAVE_DECL_CRYPTO_MSG_NEWALG))
+# define CRYPTO_MSG_NEWALG 0x10
+#endif
+#if !(defined(CRYPTO_MSG_DELALG) || (defined(HAVE_DECL_CRYPTO_MSG_DELALG) && HAVE_DECL_CRYPTO_MSG_DELALG))
+# define CRYPTO_MSG_DELALG 0x11
+#endif
+#if !(defined(CRYPTO_MSG_UPDATEALG) || (defined(HAVE_DECL_CRYPTO_MSG_UPDATEALG) && HAVE_DECL_CRYPTO_MSG_UPDATEALG))
+# define CRYPTO_MSG_UPDATEALG 0x12
+#endif
+#if !(defined(CRYPTO_MSG_GETALG) || (defined(HAVE_DECL_CRYPTO_MSG_GETALG) && HAVE_DECL_CRYPTO_MSG_GETALG))
+# define CRYPTO_MSG_GETALG 0x13
+#endif
+#if !(defined(CRYPTO_MSG_DELRNG) || (defined(HAVE_DECL_CRYPTO_MSG_DELRNG) && HAVE_DECL_CRYPTO_MSG_DELRNG))
+# define CRYPTO_MSG_DELRNG 0x14
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat nl_crypto_types in mpers mode
+
+#else
+
+static
+const struct xlat nl_crypto_types[] = {
+ XLAT(CRYPTO_MSG_NEWALG),
+ XLAT(CRYPTO_MSG_DELALG),
+ XLAT(CRYPTO_MSG_UPDATEALG),
+ XLAT(CRYPTO_MSG_GETALG),
+ XLAT(CRYPTO_MSG_DELRNG),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/nl_crypto_types.in b/xlat/nl_crypto_types.in
new file mode 100644
index 0000000..021f85f
--- /dev/null
+++ b/xlat/nl_crypto_types.in
@@ -0,0 +1,5 @@
+CRYPTO_MSG_NEWALG	0x10
+CRYPTO_MSG_DELALG	0x11
+CRYPTO_MSG_UPDATEALG	0x12
+CRYPTO_MSG_GETALG	0x13
+CRYPTO_MSG_DELRNG	0x14
diff --git a/xlat/nl_route_types.h b/xlat/nl_route_types.h
index b9ab36d..5f8159f 100644
--- a/xlat/nl_route_types.h
+++ b/xlat/nl_route_types.h
@@ -156,13 +156,8 @@
 # define RTM_GETSTATS 94
 #endif
 
-#ifdef IN_MPERS
+#ifndef IN_MPERS
 
-# error static const struct xlat nl_route_types in mpers mode
-
-#else
-
-static
 const struct xlat nl_route_types[] = {
  XLAT(RTM_NEWLINK),
  XLAT(RTM_DELLINK),
diff --git a/xlat/nlmsgerr_attrs.h b/xlat/nlmsgerr_attrs.h
new file mode 100644
index 0000000..3772db9
--- /dev/null
+++ b/xlat/nlmsgerr_attrs.h
@@ -0,0 +1,30 @@
+/* Generated by ./xlat/gen.sh from ./xlat/nlmsgerr_attrs.in; do not edit. */
+#if !(defined(NLMSGERR_ATTR_UNUSED) || (defined(HAVE_DECL_NLMSGERR_ATTR_UNUSED) && HAVE_DECL_NLMSGERR_ATTR_UNUSED))
+# define NLMSGERR_ATTR_UNUSED 0
+#endif
+#if !(defined(NLMSGERR_ATTR_MSG) || (defined(HAVE_DECL_NLMSGERR_ATTR_MSG) && HAVE_DECL_NLMSGERR_ATTR_MSG))
+# define NLMSGERR_ATTR_MSG 1
+#endif
+#if !(defined(NLMSGERR_ATTR_OFFS) || (defined(HAVE_DECL_NLMSGERR_ATTR_OFFS) && HAVE_DECL_NLMSGERR_ATTR_OFFS))
+# define NLMSGERR_ATTR_OFFS 2
+#endif
+#if !(defined(NLMSGERR_ATTR_COOKIE) || (defined(HAVE_DECL_NLMSGERR_ATTR_COOKIE) && HAVE_DECL_NLMSGERR_ATTR_COOKIE))
+# define NLMSGERR_ATTR_COOKIE 3
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat nlmsgerr_attrs in mpers mode
+
+#else
+
+static
+const struct xlat nlmsgerr_attrs[] = {
+ XLAT(NLMSGERR_ATTR_UNUSED),
+ XLAT(NLMSGERR_ATTR_MSG),
+ XLAT(NLMSGERR_ATTR_OFFS),
+ XLAT(NLMSGERR_ATTR_COOKIE),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/nlmsgerr_attrs.in b/xlat/nlmsgerr_attrs.in
new file mode 100644
index 0000000..589bc55
--- /dev/null
+++ b/xlat/nlmsgerr_attrs.in
@@ -0,0 +1,4 @@
+NLMSGERR_ATTR_UNUSED	0
+NLMSGERR_ATTR_MSG	1
+NLMSGERR_ATTR_OFFS	2
+NLMSGERR_ATTR_COOKIE	3
diff --git a/xlat/packet_diag_info_flags.h b/xlat/packet_diag_info_flags.h
new file mode 100644
index 0000000..b7a1a7b
--- /dev/null
+++ b/xlat/packet_diag_info_flags.h
@@ -0,0 +1,29 @@
+/* Generated by ./xlat/gen.sh from ./xlat/packet_diag_info_flags.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat packet_diag_info_flags in mpers mode
+
+#else
+
+static
+const struct xlat packet_diag_info_flags[] = {
+#if defined(PDI_RUNNING) || (defined(HAVE_DECL_PDI_RUNNING) && HAVE_DECL_PDI_RUNNING)
+  XLAT(PDI_RUNNING),
+#endif
+#if defined(PDI_AUXDATA) || (defined(HAVE_DECL_PDI_AUXDATA) && HAVE_DECL_PDI_AUXDATA)
+  XLAT(PDI_AUXDATA),
+#endif
+#if defined(PDI_ORIGDEV) || (defined(HAVE_DECL_PDI_ORIGDEV) && HAVE_DECL_PDI_ORIGDEV)
+  XLAT(PDI_ORIGDEV),
+#endif
+#if defined(PDI_VNETHDR) || (defined(HAVE_DECL_PDI_VNETHDR) && HAVE_DECL_PDI_VNETHDR)
+  XLAT(PDI_VNETHDR),
+#endif
+#if defined(PDI_LOSS) || (defined(HAVE_DECL_PDI_LOSS) && HAVE_DECL_PDI_LOSS)
+  XLAT(PDI_LOSS),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/packet_diag_info_flags.in b/xlat/packet_diag_info_flags.in
new file mode 100644
index 0000000..7e591d8
--- /dev/null
+++ b/xlat/packet_diag_info_flags.in
@@ -0,0 +1,5 @@
+PDI_RUNNING
+PDI_AUXDATA
+PDI_ORIGDEV
+PDI_VNETHDR
+PDI_LOSS
diff --git a/xlat/route_nexthop_flags.h b/xlat/route_nexthop_flags.h
new file mode 100644
index 0000000..8939416
--- /dev/null
+++ b/xlat/route_nexthop_flags.h
@@ -0,0 +1,32 @@
+/* Generated by ./xlat/gen.sh from ./xlat/route_nexthop_flags.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat route_nexthop_flags in mpers mode
+
+#else
+
+static
+const struct xlat route_nexthop_flags[] = {
+#if defined(RTNH_F_DEAD) || (defined(HAVE_DECL_RTNH_F_DEAD) && HAVE_DECL_RTNH_F_DEAD)
+  XLAT(RTNH_F_DEAD),
+#endif
+#if defined(RTNH_F_PERVASIVE) || (defined(HAVE_DECL_RTNH_F_PERVASIVE) && HAVE_DECL_RTNH_F_PERVASIVE)
+  XLAT(RTNH_F_PERVASIVE),
+#endif
+#if defined(RTNH_F_ONLINK) || (defined(HAVE_DECL_RTNH_F_ONLINK) && HAVE_DECL_RTNH_F_ONLINK)
+  XLAT(RTNH_F_ONLINK),
+#endif
+#if defined(RTNH_F_OFFLOAD) || (defined(HAVE_DECL_RTNH_F_OFFLOAD) && HAVE_DECL_RTNH_F_OFFLOAD)
+  XLAT(RTNH_F_OFFLOAD),
+#endif
+#if defined(RTNH_F_LINKDOWN) || (defined(HAVE_DECL_RTNH_F_LINKDOWN) && HAVE_DECL_RTNH_F_LINKDOWN)
+  XLAT(RTNH_F_LINKDOWN),
+#endif
+#if defined(RTNH_F_UNRESOLVED) || (defined(HAVE_DECL_RTNH_F_UNRESOLVED) && HAVE_DECL_RTNH_F_UNRESOLVED)
+  XLAT(RTNH_F_UNRESOLVED),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/route_nexthop_flags.in b/xlat/route_nexthop_flags.in
new file mode 100644
index 0000000..907515e
--- /dev/null
+++ b/xlat/route_nexthop_flags.in
@@ -0,0 +1,6 @@
+RTNH_F_DEAD
+RTNH_F_PERVASIVE
+RTNH_F_ONLINK
+RTNH_F_OFFLOAD
+RTNH_F_LINKDOWN
+RTNH_F_UNRESOLVED
diff --git a/xlat/routing_flags.h b/xlat/routing_flags.h
new file mode 100644
index 0000000..51cc689
--- /dev/null
+++ b/xlat/routing_flags.h
@@ -0,0 +1,29 @@
+/* Generated by ./xlat/gen.sh from ./xlat/routing_flags.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat routing_flags in mpers mode
+
+#else
+
+static
+const struct xlat routing_flags[] = {
+#if defined(RTM_F_NOTIFY) || (defined(HAVE_DECL_RTM_F_NOTIFY) && HAVE_DECL_RTM_F_NOTIFY)
+  XLAT(RTM_F_NOTIFY),
+#endif
+#if defined(RTM_F_CLONED) || (defined(HAVE_DECL_RTM_F_CLONED) && HAVE_DECL_RTM_F_CLONED)
+  XLAT(RTM_F_CLONED),
+#endif
+#if defined(RTM_F_EQUALIZE) || (defined(HAVE_DECL_RTM_F_EQUALIZE) && HAVE_DECL_RTM_F_EQUALIZE)
+  XLAT(RTM_F_EQUALIZE),
+#endif
+#if defined(RTM_F_PREFIX) || (defined(HAVE_DECL_RTM_F_PREFIX) && HAVE_DECL_RTM_F_PREFIX)
+  XLAT(RTM_F_PREFIX),
+#endif
+#if defined(RTM_F_LOOKUP_TABLE) || (defined(HAVE_DECL_RTM_F_LOOKUP_TABLE) && HAVE_DECL_RTM_F_LOOKUP_TABLE)
+  XLAT(RTM_F_LOOKUP_TABLE),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/routing_flags.in b/xlat/routing_flags.in
new file mode 100644
index 0000000..fe66b67
--- /dev/null
+++ b/xlat/routing_flags.in
@@ -0,0 +1,5 @@
+RTM_F_NOTIFY
+RTM_F_CLONED
+RTM_F_EQUALIZE
+RTM_F_PREFIX
+RTM_F_LOOKUP_TABLE
diff --git a/xlat/routing_protocols.h b/xlat/routing_protocols.h
new file mode 100644
index 0000000..97f1b2b
--- /dev/null
+++ b/xlat/routing_protocols.h
@@ -0,0 +1,62 @@
+/* Generated by ./xlat/gen.sh from ./xlat/routing_protocols.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat routing_protocols in mpers mode
+
+#else
+
+static
+const struct xlat routing_protocols[] = {
+#if defined(RTPROT_UNSPEC) || (defined(HAVE_DECL_RTPROT_UNSPEC) && HAVE_DECL_RTPROT_UNSPEC)
+  XLAT(RTPROT_UNSPEC),
+#endif
+#if defined(RTPROT_REDIRECT) || (defined(HAVE_DECL_RTPROT_REDIRECT) && HAVE_DECL_RTPROT_REDIRECT)
+  XLAT(RTPROT_REDIRECT),
+#endif
+#if defined(RTPROT_KERNEL) || (defined(HAVE_DECL_RTPROT_KERNEL) && HAVE_DECL_RTPROT_KERNEL)
+  XLAT(RTPROT_KERNEL),
+#endif
+#if defined(RTPROT_BOOT) || (defined(HAVE_DECL_RTPROT_BOOT) && HAVE_DECL_RTPROT_BOOT)
+  XLAT(RTPROT_BOOT),
+#endif
+#if defined(RTPROT_STATIC) || (defined(HAVE_DECL_RTPROT_STATIC) && HAVE_DECL_RTPROT_STATIC)
+  XLAT(RTPROT_STATIC),
+#endif
+#if defined(RTPROT_GATED) || (defined(HAVE_DECL_RTPROT_GATED) && HAVE_DECL_RTPROT_GATED)
+  XLAT(RTPROT_GATED),
+#endif
+#if defined(RTPROT_RA) || (defined(HAVE_DECL_RTPROT_RA) && HAVE_DECL_RTPROT_RA)
+  XLAT(RTPROT_RA),
+#endif
+#if defined(RTPROT_MRT) || (defined(HAVE_DECL_RTPROT_MRT) && HAVE_DECL_RTPROT_MRT)
+  XLAT(RTPROT_MRT),
+#endif
+#if defined(RTPROT_ZEBRA) || (defined(HAVE_DECL_RTPROT_ZEBRA) && HAVE_DECL_RTPROT_ZEBRA)
+  XLAT(RTPROT_ZEBRA),
+#endif
+#if defined(RTPROT_BIRD) || (defined(HAVE_DECL_RTPROT_BIRD) && HAVE_DECL_RTPROT_BIRD)
+  XLAT(RTPROT_BIRD),
+#endif
+#if defined(RTPROT_DNROUTED) || (defined(HAVE_DECL_RTPROT_DNROUTED) && HAVE_DECL_RTPROT_DNROUTED)
+  XLAT(RTPROT_DNROUTED),
+#endif
+#if defined(RTPROT_XORP) || (defined(HAVE_DECL_RTPROT_XORP) && HAVE_DECL_RTPROT_XORP)
+  XLAT(RTPROT_XORP),
+#endif
+#if defined(RTPROT_NTK) || (defined(HAVE_DECL_RTPROT_NTK) && HAVE_DECL_RTPROT_NTK)
+  XLAT(RTPROT_NTK),
+#endif
+#if defined(RTPROT_DHCP) || (defined(HAVE_DECL_RTPROT_DHCP) && HAVE_DECL_RTPROT_DHCP)
+  XLAT(RTPROT_DHCP),
+#endif
+#if defined(RTPROT_MROUTED) || (defined(HAVE_DECL_RTPROT_MROUTED) && HAVE_DECL_RTPROT_MROUTED)
+  XLAT(RTPROT_MROUTED),
+#endif
+#if defined(RTPROT_BABEL) || (defined(HAVE_DECL_RTPROT_BABEL) && HAVE_DECL_RTPROT_BABEL)
+  XLAT(RTPROT_BABEL),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/routing_protocols.in b/xlat/routing_protocols.in
new file mode 100644
index 0000000..d366b67
--- /dev/null
+++ b/xlat/routing_protocols.in
@@ -0,0 +1,16 @@
+RTPROT_UNSPEC
+RTPROT_REDIRECT
+RTPROT_KERNEL
+RTPROT_BOOT
+RTPROT_STATIC
+RTPROT_GATED
+RTPROT_RA
+RTPROT_MRT
+RTPROT_ZEBRA
+RTPROT_BIRD
+RTPROT_DNROUTED
+RTPROT_XORP
+RTPROT_NTK
+RTPROT_DHCP
+RTPROT_MROUTED
+RTPROT_BABEL
diff --git a/xlat/routing_scopes.h b/xlat/routing_scopes.h
new file mode 100644
index 0000000..51fb1a2
--- /dev/null
+++ b/xlat/routing_scopes.h
@@ -0,0 +1,29 @@
+/* Generated by ./xlat/gen.sh from ./xlat/routing_scopes.in; do not edit. */
+#if !(defined(RT_SCOPE_UNIVERSE) || (defined(HAVE_DECL_RT_SCOPE_UNIVERSE) && HAVE_DECL_RT_SCOPE_UNIVERSE))
+# define RT_SCOPE_UNIVERSE 0
+#endif
+#if !(defined(RT_SCOPE_SITE) || (defined(HAVE_DECL_RT_SCOPE_SITE) && HAVE_DECL_RT_SCOPE_SITE))
+# define RT_SCOPE_SITE 200
+#endif
+#if !(defined(RT_SCOPE_LINK) || (defined(HAVE_DECL_RT_SCOPE_LINK) && HAVE_DECL_RT_SCOPE_LINK))
+# define RT_SCOPE_LINK 253
+#endif
+#if !(defined(RT_SCOPE_HOST) || (defined(HAVE_DECL_RT_SCOPE_HOST) && HAVE_DECL_RT_SCOPE_HOST))
+# define RT_SCOPE_HOST 254
+#endif
+#if !(defined(RT_SCOPE_NOWHERE) || (defined(HAVE_DECL_RT_SCOPE_NOWHERE) && HAVE_DECL_RT_SCOPE_NOWHERE))
+# define RT_SCOPE_NOWHERE 255
+#endif
+
+#ifndef IN_MPERS
+
+const struct xlat routing_scopes[] = {
+ XLAT(RT_SCOPE_UNIVERSE),
+ XLAT(RT_SCOPE_SITE),
+ XLAT(RT_SCOPE_LINK),
+ XLAT(RT_SCOPE_HOST),
+ XLAT(RT_SCOPE_NOWHERE),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/routing_scopes.in b/xlat/routing_scopes.in
new file mode 100644
index 0000000..c431e9f
--- /dev/null
+++ b/xlat/routing_scopes.in
@@ -0,0 +1,5 @@
+RT_SCOPE_UNIVERSE	0
+RT_SCOPE_SITE		200
+RT_SCOPE_LINK		253
+RT_SCOPE_HOST		254
+RT_SCOPE_NOWHERE	255
diff --git a/xlat/routing_table_ids.h b/xlat/routing_table_ids.h
new file mode 100644
index 0000000..a3b6164
--- /dev/null
+++ b/xlat/routing_table_ids.h
@@ -0,0 +1,29 @@
+/* Generated by ./xlat/gen.sh from ./xlat/routing_table_ids.in; do not edit. */
+#if !(defined(RT_TABLE_UNSPEC) || (defined(HAVE_DECL_RT_TABLE_UNSPEC) && HAVE_DECL_RT_TABLE_UNSPEC))
+# define RT_TABLE_UNSPEC 0
+#endif
+#if !(defined(RT_TABLE_COMPAT) || (defined(HAVE_DECL_RT_TABLE_COMPAT) && HAVE_DECL_RT_TABLE_COMPAT))
+# define RT_TABLE_COMPAT 252
+#endif
+#if !(defined(RT_TABLE_DEFAULT) || (defined(HAVE_DECL_RT_TABLE_DEFAULT) && HAVE_DECL_RT_TABLE_DEFAULT))
+# define RT_TABLE_DEFAULT 253
+#endif
+#if !(defined(RT_TABLE_MAIN) || (defined(HAVE_DECL_RT_TABLE_MAIN) && HAVE_DECL_RT_TABLE_MAIN))
+# define RT_TABLE_MAIN 254
+#endif
+#if !(defined(RT_TABLE_LOCAL) || (defined(HAVE_DECL_RT_TABLE_LOCAL) && HAVE_DECL_RT_TABLE_LOCAL))
+# define RT_TABLE_LOCAL 255
+#endif
+
+#ifndef IN_MPERS
+
+const struct xlat routing_table_ids[] = {
+ XLAT(RT_TABLE_UNSPEC),
+ XLAT(RT_TABLE_COMPAT),
+ XLAT(RT_TABLE_DEFAULT),
+ XLAT(RT_TABLE_MAIN),
+ XLAT(RT_TABLE_LOCAL),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/routing_table_ids.in b/xlat/routing_table_ids.in
new file mode 100644
index 0000000..6a1f797
--- /dev/null
+++ b/xlat/routing_table_ids.in
@@ -0,0 +1,5 @@
+RT_TABLE_UNSPEC		0
+RT_TABLE_COMPAT		252
+RT_TABLE_DEFAULT	253
+RT_TABLE_MAIN		254
+RT_TABLE_LOCAL		255
diff --git a/xlat/routing_types.h b/xlat/routing_types.h
new file mode 100644
index 0000000..5e96373
--- /dev/null
+++ b/xlat/routing_types.h
@@ -0,0 +1,57 @@
+/* Generated by ./xlat/gen.sh from ./xlat/routing_types.in; do not edit. */
+#if !(defined(RTN_UNSPEC) || (defined(HAVE_DECL_RTN_UNSPEC) && HAVE_DECL_RTN_UNSPEC))
+# define RTN_UNSPEC 0
+#endif
+#if !(defined(RTN_UNICAST) || (defined(HAVE_DECL_RTN_UNICAST) && HAVE_DECL_RTN_UNICAST))
+# define RTN_UNICAST 1
+#endif
+#if !(defined(RTN_LOCAL) || (defined(HAVE_DECL_RTN_LOCAL) && HAVE_DECL_RTN_LOCAL))
+# define RTN_LOCAL 2
+#endif
+#if !(defined(RTN_BROADCAST) || (defined(HAVE_DECL_RTN_BROADCAST) && HAVE_DECL_RTN_BROADCAST))
+# define RTN_BROADCAST 3
+#endif
+#if !(defined(RTN_ANYCAST) || (defined(HAVE_DECL_RTN_ANYCAST) && HAVE_DECL_RTN_ANYCAST))
+# define RTN_ANYCAST 4
+#endif
+#if !(defined(RTN_MULTICAST) || (defined(HAVE_DECL_RTN_MULTICAST) && HAVE_DECL_RTN_MULTICAST))
+# define RTN_MULTICAST 5
+#endif
+#if !(defined(RTN_BLACKHOLE) || (defined(HAVE_DECL_RTN_BLACKHOLE) && HAVE_DECL_RTN_BLACKHOLE))
+# define RTN_BLACKHOLE 6
+#endif
+#if !(defined(RTN_UNREACHABLE) || (defined(HAVE_DECL_RTN_UNREACHABLE) && HAVE_DECL_RTN_UNREACHABLE))
+# define RTN_UNREACHABLE 7
+#endif
+#if !(defined(RTN_PROHIBIT) || (defined(HAVE_DECL_RTN_PROHIBIT) && HAVE_DECL_RTN_PROHIBIT))
+# define RTN_PROHIBIT 8
+#endif
+#if !(defined(RTN_THROW) || (defined(HAVE_DECL_RTN_THROW) && HAVE_DECL_RTN_THROW))
+# define RTN_THROW 9
+#endif
+#if !(defined(RTN_NAT) || (defined(HAVE_DECL_RTN_NAT) && HAVE_DECL_RTN_NAT))
+# define RTN_NAT 10
+#endif
+#if !(defined(RTN_XRESOLVE) || (defined(HAVE_DECL_RTN_XRESOLVE) && HAVE_DECL_RTN_XRESOLVE))
+# define RTN_XRESOLVE 11
+#endif
+
+#ifndef IN_MPERS
+
+const struct xlat routing_types[] = {
+ XLAT(RTN_UNSPEC),
+ XLAT(RTN_UNICAST),
+ XLAT(RTN_LOCAL),
+ XLAT(RTN_BROADCAST),
+ XLAT(RTN_ANYCAST),
+ XLAT(RTN_MULTICAST),
+ XLAT(RTN_BLACKHOLE),
+ XLAT(RTN_UNREACHABLE),
+ XLAT(RTN_PROHIBIT),
+ XLAT(RTN_THROW),
+ XLAT(RTN_NAT),
+ XLAT(RTN_XRESOLVE),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/routing_types.in b/xlat/routing_types.in
new file mode 100644
index 0000000..f7079d4
--- /dev/null
+++ b/xlat/routing_types.in
@@ -0,0 +1,12 @@
+RTN_UNSPEC	0
+RTN_UNICAST	1
+RTN_LOCAL	2
+RTN_BROADCAST	3
+RTN_ANYCAST	4
+RTN_MULTICAST	5
+RTN_BLACKHOLE	6
+RTN_UNREACHABLE	7
+RTN_PROHIBIT	8
+RTN_THROW	9
+RTN_NAT		10
+RTN_XRESOLVE	11
diff --git a/xlat/rtnl_addr_attrs.h b/xlat/rtnl_addr_attrs.h
new file mode 100644
index 0000000..b9579b0
--- /dev/null
+++ b/xlat/rtnl_addr_attrs.h
@@ -0,0 +1,50 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_addr_attrs.in; do not edit. */
+#if !(defined(IFA_UNSPEC) || (defined(HAVE_DECL_IFA_UNSPEC) && HAVE_DECL_IFA_UNSPEC))
+# define IFA_UNSPEC 0
+#endif
+#if !(defined(IFA_ADDRESS) || (defined(HAVE_DECL_IFA_ADDRESS) && HAVE_DECL_IFA_ADDRESS))
+# define IFA_ADDRESS 1
+#endif
+#if !(defined(IFA_LOCAL) || (defined(HAVE_DECL_IFA_LOCAL) && HAVE_DECL_IFA_LOCAL))
+# define IFA_LOCAL 2
+#endif
+#if !(defined(IFA_LABEL) || (defined(HAVE_DECL_IFA_LABEL) && HAVE_DECL_IFA_LABEL))
+# define IFA_LABEL 3
+#endif
+#if !(defined(IFA_BROADCAST) || (defined(HAVE_DECL_IFA_BROADCAST) && HAVE_DECL_IFA_BROADCAST))
+# define IFA_BROADCAST 4
+#endif
+#if !(defined(IFA_ANYCAST) || (defined(HAVE_DECL_IFA_ANYCAST) && HAVE_DECL_IFA_ANYCAST))
+# define IFA_ANYCAST 5
+#endif
+#if !(defined(IFA_CACHEINFO) || (defined(HAVE_DECL_IFA_CACHEINFO) && HAVE_DECL_IFA_CACHEINFO))
+# define IFA_CACHEINFO 6
+#endif
+#if !(defined(IFA_MULTICAST) || (defined(HAVE_DECL_IFA_MULTICAST) && HAVE_DECL_IFA_MULTICAST))
+# define IFA_MULTICAST 7
+#endif
+#if !(defined(IFA_FLAGS) || (defined(HAVE_DECL_IFA_FLAGS) && HAVE_DECL_IFA_FLAGS))
+# define IFA_FLAGS 8
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_addr_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_addr_attrs[] = {
+ XLAT(IFA_UNSPEC),
+ XLAT(IFA_ADDRESS),
+ XLAT(IFA_LOCAL),
+ XLAT(IFA_LABEL),
+ XLAT(IFA_BROADCAST),
+ XLAT(IFA_ANYCAST),
+ XLAT(IFA_CACHEINFO),
+ XLAT(IFA_MULTICAST),
+ XLAT(IFA_FLAGS),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_addr_attrs.in b/xlat/rtnl_addr_attrs.in
new file mode 100644
index 0000000..df65905
--- /dev/null
+++ b/xlat/rtnl_addr_attrs.in
@@ -0,0 +1,9 @@
+IFA_UNSPEC		0
+IFA_ADDRESS		1
+IFA_LOCAL		2
+IFA_LABEL		3
+IFA_BROADCAST		4
+IFA_ANYCAST		5
+IFA_CACHEINFO		6
+IFA_MULTICAST		7
+IFA_FLAGS		8
diff --git a/xlat/rtnl_addrlabel_attrs.h b/xlat/rtnl_addrlabel_attrs.h
new file mode 100644
index 0000000..eab9b6c
--- /dev/null
+++ b/xlat/rtnl_addrlabel_attrs.h
@@ -0,0 +1,22 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_addrlabel_attrs.in; do not edit. */
+#if !(defined(IFAL_ADDRESS) || (defined(HAVE_DECL_IFAL_ADDRESS) && HAVE_DECL_IFAL_ADDRESS))
+# define IFAL_ADDRESS 1
+#endif
+#if !(defined(IFAL_LABEL) || (defined(HAVE_DECL_IFAL_LABEL) && HAVE_DECL_IFAL_LABEL))
+# define IFAL_LABEL 2
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_addrlabel_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_addrlabel_attrs[] = {
+ XLAT(IFAL_ADDRESS),
+ XLAT(IFAL_LABEL),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_addrlabel_attrs.in b/xlat/rtnl_addrlabel_attrs.in
new file mode 100644
index 0000000..0dc464d
--- /dev/null
+++ b/xlat/rtnl_addrlabel_attrs.in
@@ -0,0 +1,2 @@
+IFAL_ADDRESS		1
+IFAL_LABEL		2
diff --git a/xlat/rtnl_dcb_attrs.h b/xlat/rtnl_dcb_attrs.h
new file mode 100644
index 0000000..e91bdf4
--- /dev/null
+++ b/xlat/rtnl_dcb_attrs.h
@@ -0,0 +1,82 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_dcb_attrs.in; do not edit. */
+#if !(defined(DCB_ATTR_UNDEFINED) || (defined(HAVE_DECL_DCB_ATTR_UNDEFINED) && HAVE_DECL_DCB_ATTR_UNDEFINED))
+# define DCB_ATTR_UNDEFINED 0
+#endif
+#if !(defined(DCB_ATTR_IFNAME) || (defined(HAVE_DECL_DCB_ATTR_IFNAME) && HAVE_DECL_DCB_ATTR_IFNAME))
+# define DCB_ATTR_IFNAME 1
+#endif
+#if !(defined(DCB_ATTR_STATE) || (defined(HAVE_DECL_DCB_ATTR_STATE) && HAVE_DECL_DCB_ATTR_STATE))
+# define DCB_ATTR_STATE 2
+#endif
+#if !(defined(DCB_ATTR_PFC_STATE) || (defined(HAVE_DECL_DCB_ATTR_PFC_STATE) && HAVE_DECL_DCB_ATTR_PFC_STATE))
+# define DCB_ATTR_PFC_STATE 3
+#endif
+#if !(defined(DCB_ATTR_PFC_CFG) || (defined(HAVE_DECL_DCB_ATTR_PFC_CFG) && HAVE_DECL_DCB_ATTR_PFC_CFG))
+# define DCB_ATTR_PFC_CFG 4
+#endif
+#if !(defined(DCB_ATTR_NUM_TC) || (defined(HAVE_DECL_DCB_ATTR_NUM_TC) && HAVE_DECL_DCB_ATTR_NUM_TC))
+# define DCB_ATTR_NUM_TC 5
+#endif
+#if !(defined(DCB_ATTR_PG_CFG) || (defined(HAVE_DECL_DCB_ATTR_PG_CFG) && HAVE_DECL_DCB_ATTR_PG_CFG))
+# define DCB_ATTR_PG_CFG 6
+#endif
+#if !(defined(DCB_ATTR_SET_ALL) || (defined(HAVE_DECL_DCB_ATTR_SET_ALL) && HAVE_DECL_DCB_ATTR_SET_ALL))
+# define DCB_ATTR_SET_ALL 7
+#endif
+#if !(defined(DCB_ATTR_PERM_HWADDR) || (defined(HAVE_DECL_DCB_ATTR_PERM_HWADDR) && HAVE_DECL_DCB_ATTR_PERM_HWADDR))
+# define DCB_ATTR_PERM_HWADDR 8
+#endif
+#if !(defined(DCB_ATTR_CAP) || (defined(HAVE_DECL_DCB_ATTR_CAP) && HAVE_DECL_DCB_ATTR_CAP))
+# define DCB_ATTR_CAP 9
+#endif
+#if !(defined(DCB_ATTR_NUMTCS) || (defined(HAVE_DECL_DCB_ATTR_NUMTCS) && HAVE_DECL_DCB_ATTR_NUMTCS))
+# define DCB_ATTR_NUMTCS 10
+#endif
+#if !(defined(DCB_ATTR_BCN) || (defined(HAVE_DECL_DCB_ATTR_BCN) && HAVE_DECL_DCB_ATTR_BCN))
+# define DCB_ATTR_BCN 11
+#endif
+#if !(defined(DCB_ATTR_APP) || (defined(HAVE_DECL_DCB_ATTR_APP) && HAVE_DECL_DCB_ATTR_APP))
+# define DCB_ATTR_APP 12
+#endif
+#if !(defined(DCB_ATTR_IEEE) || (defined(HAVE_DECL_DCB_ATTR_IEEE) && HAVE_DECL_DCB_ATTR_IEEE))
+# define DCB_ATTR_IEEE 13
+#endif
+#if !(defined(DCB_ATTR_DCBX) || (defined(HAVE_DECL_DCB_ATTR_DCBX) && HAVE_DECL_DCB_ATTR_DCBX))
+# define DCB_ATTR_DCBX 14
+#endif
+#if !(defined(DCB_ATTR_FEATCFG) || (defined(HAVE_DECL_DCB_ATTR_FEATCFG) && HAVE_DECL_DCB_ATTR_FEATCFG))
+# define DCB_ATTR_FEATCFG 15
+#endif
+#if !(defined(DCB_ATTR_CEE) || (defined(HAVE_DECL_DCB_ATTR_CEE) && HAVE_DECL_DCB_ATTR_CEE))
+# define DCB_ATTR_CEE 16
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_dcb_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_dcb_attrs[] = {
+ XLAT(DCB_ATTR_UNDEFINED),
+ XLAT(DCB_ATTR_IFNAME),
+ XLAT(DCB_ATTR_STATE),
+ XLAT(DCB_ATTR_PFC_STATE),
+ XLAT(DCB_ATTR_PFC_CFG),
+ XLAT(DCB_ATTR_NUM_TC),
+ XLAT(DCB_ATTR_PG_CFG),
+ XLAT(DCB_ATTR_SET_ALL),
+ XLAT(DCB_ATTR_PERM_HWADDR),
+ XLAT(DCB_ATTR_CAP),
+ XLAT(DCB_ATTR_NUMTCS),
+ XLAT(DCB_ATTR_BCN),
+ XLAT(DCB_ATTR_APP),
+ XLAT(DCB_ATTR_IEEE),
+ XLAT(DCB_ATTR_DCBX),
+ XLAT(DCB_ATTR_FEATCFG),
+ XLAT(DCB_ATTR_CEE),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_dcb_attrs.in b/xlat/rtnl_dcb_attrs.in
new file mode 100644
index 0000000..dd2ddf7
--- /dev/null
+++ b/xlat/rtnl_dcb_attrs.in
@@ -0,0 +1,17 @@
+DCB_ATTR_UNDEFINED	0
+DCB_ATTR_IFNAME		1
+DCB_ATTR_STATE		2
+DCB_ATTR_PFC_STATE	3
+DCB_ATTR_PFC_CFG	4
+DCB_ATTR_NUM_TC		5
+DCB_ATTR_PG_CFG		6
+DCB_ATTR_SET_ALL	7
+DCB_ATTR_PERM_HWADDR	8
+DCB_ATTR_CAP		9
+DCB_ATTR_NUMTCS		10
+DCB_ATTR_BCN		11
+DCB_ATTR_APP		12
+DCB_ATTR_IEEE		13
+DCB_ATTR_DCBX		14
+DCB_ATTR_FEATCFG	15
+DCB_ATTR_CEE		16
diff --git a/xlat/rtnl_ifla_brport_attrs.h b/xlat/rtnl_ifla_brport_attrs.h
new file mode 100644
index 0000000..8b4bd1d
--- /dev/null
+++ b/xlat/rtnl_ifla_brport_attrs.h
@@ -0,0 +1,138 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_brport_attrs.in; do not edit. */
+#if !(defined(IFLA_BRPORT_UNSPEC) || (defined(HAVE_DECL_IFLA_BRPORT_UNSPEC) && HAVE_DECL_IFLA_BRPORT_UNSPEC))
+# define IFLA_BRPORT_UNSPEC 0
+#endif
+#if !(defined(IFLA_BRPORT_STATE) || (defined(HAVE_DECL_IFLA_BRPORT_STATE) && HAVE_DECL_IFLA_BRPORT_STATE))
+# define IFLA_BRPORT_STATE 1
+#endif
+#if !(defined(IFLA_BRPORT_PRIORITY) || (defined(HAVE_DECL_IFLA_BRPORT_PRIORITY) && HAVE_DECL_IFLA_BRPORT_PRIORITY))
+# define IFLA_BRPORT_PRIORITY 2
+#endif
+#if !(defined(IFLA_BRPORT_COST) || (defined(HAVE_DECL_IFLA_BRPORT_COST) && HAVE_DECL_IFLA_BRPORT_COST))
+# define IFLA_BRPORT_COST 3
+#endif
+#if !(defined(IFLA_BRPORT_MODE) || (defined(HAVE_DECL_IFLA_BRPORT_MODE) && HAVE_DECL_IFLA_BRPORT_MODE))
+# define IFLA_BRPORT_MODE 4
+#endif
+#if !(defined(IFLA_BRPORT_GUARD) || (defined(HAVE_DECL_IFLA_BRPORT_GUARD) && HAVE_DECL_IFLA_BRPORT_GUARD))
+# define IFLA_BRPORT_GUARD 5
+#endif
+#if !(defined(IFLA_BRPORT_PROTECT) || (defined(HAVE_DECL_IFLA_BRPORT_PROTECT) && HAVE_DECL_IFLA_BRPORT_PROTECT))
+# define IFLA_BRPORT_PROTECT 6
+#endif
+#if !(defined(IFLA_BRPORT_FAST_LEAVE) || (defined(HAVE_DECL_IFLA_BRPORT_FAST_LEAVE) && HAVE_DECL_IFLA_BRPORT_FAST_LEAVE))
+# define IFLA_BRPORT_FAST_LEAVE 7
+#endif
+#if !(defined(IFLA_BRPORT_LEARNING) || (defined(HAVE_DECL_IFLA_BRPORT_LEARNING) && HAVE_DECL_IFLA_BRPORT_LEARNING))
+# define IFLA_BRPORT_LEARNING 8
+#endif
+#if !(defined(IFLA_BRPORT_UNICAST_FLOOD) || (defined(HAVE_DECL_IFLA_BRPORT_UNICAST_FLOOD) && HAVE_DECL_IFLA_BRPORT_UNICAST_FLOOD))
+# define IFLA_BRPORT_UNICAST_FLOOD 9
+#endif
+#if !(defined(IFLA_BRPORT_PROXYARP) || (defined(HAVE_DECL_IFLA_BRPORT_PROXYARP) && HAVE_DECL_IFLA_BRPORT_PROXYARP))
+# define IFLA_BRPORT_PROXYARP 10
+#endif
+#if !(defined(IFLA_BRPORT_LEARNING_SYNC) || (defined(HAVE_DECL_IFLA_BRPORT_LEARNING_SYNC) && HAVE_DECL_IFLA_BRPORT_LEARNING_SYNC))
+# define IFLA_BRPORT_LEARNING_SYNC 11
+#endif
+#if !(defined(IFLA_BRPORT_PROXYARP_WIFI) || (defined(HAVE_DECL_IFLA_BRPORT_PROXYARP_WIFI) && HAVE_DECL_IFLA_BRPORT_PROXYARP_WIFI))
+# define IFLA_BRPORT_PROXYARP_WIFI 12
+#endif
+#if !(defined(IFLA_BRPORT_ROOT_ID) || (defined(HAVE_DECL_IFLA_BRPORT_ROOT_ID) && HAVE_DECL_IFLA_BRPORT_ROOT_ID))
+# define IFLA_BRPORT_ROOT_ID 13
+#endif
+#if !(defined(IFLA_BRPORT_BRIDGE_ID) || (defined(HAVE_DECL_IFLA_BRPORT_BRIDGE_ID) && HAVE_DECL_IFLA_BRPORT_BRIDGE_ID))
+# define IFLA_BRPORT_BRIDGE_ID 14
+#endif
+#if !(defined(IFLA_BRPORT_DESIGNATED_PORT) || (defined(HAVE_DECL_IFLA_BRPORT_DESIGNATED_PORT) && HAVE_DECL_IFLA_BRPORT_DESIGNATED_PORT))
+# define IFLA_BRPORT_DESIGNATED_PORT 15
+#endif
+#if !(defined(IFLA_BRPORT_DESIGNATED_COST) || (defined(HAVE_DECL_IFLA_BRPORT_DESIGNATED_COST) && HAVE_DECL_IFLA_BRPORT_DESIGNATED_COST))
+# define IFLA_BRPORT_DESIGNATED_COST 16
+#endif
+#if !(defined(IFLA_BRPORT_ID) || (defined(HAVE_DECL_IFLA_BRPORT_ID) && HAVE_DECL_IFLA_BRPORT_ID))
+# define IFLA_BRPORT_ID 17
+#endif
+#if !(defined(IFLA_BRPORT_NO) || (defined(HAVE_DECL_IFLA_BRPORT_NO) && HAVE_DECL_IFLA_BRPORT_NO))
+# define IFLA_BRPORT_NO 18
+#endif
+#if !(defined(IFLA_BRPORT_TOPOLOGY_CHANGE_ACK) || (defined(HAVE_DECL_IFLA_BRPORT_TOPOLOGY_CHANGE_ACK) && HAVE_DECL_IFLA_BRPORT_TOPOLOGY_CHANGE_ACK))
+# define IFLA_BRPORT_TOPOLOGY_CHANGE_ACK 19
+#endif
+#if !(defined(IFLA_BRPORT_CONFIG_PENDING) || (defined(HAVE_DECL_IFLA_BRPORT_CONFIG_PENDING) && HAVE_DECL_IFLA_BRPORT_CONFIG_PENDING))
+# define IFLA_BRPORT_CONFIG_PENDING 20
+#endif
+#if !(defined(IFLA_BRPORT_MESSAGE_AGE_TIMER) || (defined(HAVE_DECL_IFLA_BRPORT_MESSAGE_AGE_TIMER) && HAVE_DECL_IFLA_BRPORT_MESSAGE_AGE_TIMER))
+# define IFLA_BRPORT_MESSAGE_AGE_TIMER 21
+#endif
+#if !(defined(IFLA_BRPORT_FORWARD_DELAY_TIMER) || (defined(HAVE_DECL_IFLA_BRPORT_FORWARD_DELAY_TIMER) && HAVE_DECL_IFLA_BRPORT_FORWARD_DELAY_TIMER))
+# define IFLA_BRPORT_FORWARD_DELAY_TIMER 22
+#endif
+#if !(defined(IFLA_BRPORT_HOLD_TIMER) || (defined(HAVE_DECL_IFLA_BRPORT_HOLD_TIMER) && HAVE_DECL_IFLA_BRPORT_HOLD_TIMER))
+# define IFLA_BRPORT_HOLD_TIMER 23
+#endif
+#if !(defined(IFLA_BRPORT_FLUSH) || (defined(HAVE_DECL_IFLA_BRPORT_FLUSH) && HAVE_DECL_IFLA_BRPORT_FLUSH))
+# define IFLA_BRPORT_FLUSH 24
+#endif
+#if !(defined(IFLA_BRPORT_MULTICAST_ROUTER) || (defined(HAVE_DECL_IFLA_BRPORT_MULTICAST_ROUTER) && HAVE_DECL_IFLA_BRPORT_MULTICAST_ROUTER))
+# define IFLA_BRPORT_MULTICAST_ROUTER 25
+#endif
+#if !(defined(IFLA_BRPORT_PAD) || (defined(HAVE_DECL_IFLA_BRPORT_PAD) && HAVE_DECL_IFLA_BRPORT_PAD))
+# define IFLA_BRPORT_PAD 26
+#endif
+#if !(defined(IFLA_BRPORT_MCAST_FLOOD) || (defined(HAVE_DECL_IFLA_BRPORT_MCAST_FLOOD) && HAVE_DECL_IFLA_BRPORT_MCAST_FLOOD))
+# define IFLA_BRPORT_MCAST_FLOOD 27
+#endif
+#if !(defined(IFLA_BRPORT_MCAST_TO_UCAST) || (defined(HAVE_DECL_IFLA_BRPORT_MCAST_TO_UCAST) && HAVE_DECL_IFLA_BRPORT_MCAST_TO_UCAST))
+# define IFLA_BRPORT_MCAST_TO_UCAST 28
+#endif
+#if !(defined(IFLA_BRPORT_VLAN_TUNNEL) || (defined(HAVE_DECL_IFLA_BRPORT_VLAN_TUNNEL) && HAVE_DECL_IFLA_BRPORT_VLAN_TUNNEL))
+# define IFLA_BRPORT_VLAN_TUNNEL 29
+#endif
+#if !(defined(IFLA_BRPORT_BCAST_FLOOD) || (defined(HAVE_DECL_IFLA_BRPORT_BCAST_FLOOD) && HAVE_DECL_IFLA_BRPORT_BCAST_FLOOD))
+# define IFLA_BRPORT_BCAST_FLOOD 30
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_ifla_brport_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_ifla_brport_attrs[] = {
+ XLAT(IFLA_BRPORT_UNSPEC),
+ XLAT(IFLA_BRPORT_STATE),
+ XLAT(IFLA_BRPORT_PRIORITY),
+ XLAT(IFLA_BRPORT_COST),
+ XLAT(IFLA_BRPORT_MODE),
+ XLAT(IFLA_BRPORT_GUARD),
+ XLAT(IFLA_BRPORT_PROTECT),
+ XLAT(IFLA_BRPORT_FAST_LEAVE),
+ XLAT(IFLA_BRPORT_LEARNING),
+ XLAT(IFLA_BRPORT_UNICAST_FLOOD),
+ XLAT(IFLA_BRPORT_PROXYARP),
+ XLAT(IFLA_BRPORT_LEARNING_SYNC),
+ XLAT(IFLA_BRPORT_PROXYARP_WIFI),
+ XLAT(IFLA_BRPORT_ROOT_ID),
+ XLAT(IFLA_BRPORT_BRIDGE_ID),
+ XLAT(IFLA_BRPORT_DESIGNATED_PORT),
+ XLAT(IFLA_BRPORT_DESIGNATED_COST),
+ XLAT(IFLA_BRPORT_ID),
+ XLAT(IFLA_BRPORT_NO),
+ XLAT(IFLA_BRPORT_TOPOLOGY_CHANGE_ACK),
+ XLAT(IFLA_BRPORT_CONFIG_PENDING),
+ XLAT(IFLA_BRPORT_MESSAGE_AGE_TIMER),
+ XLAT(IFLA_BRPORT_FORWARD_DELAY_TIMER),
+ XLAT(IFLA_BRPORT_HOLD_TIMER),
+ XLAT(IFLA_BRPORT_FLUSH),
+ XLAT(IFLA_BRPORT_MULTICAST_ROUTER),
+ XLAT(IFLA_BRPORT_PAD),
+ XLAT(IFLA_BRPORT_MCAST_FLOOD),
+ XLAT(IFLA_BRPORT_MCAST_TO_UCAST),
+ XLAT(IFLA_BRPORT_VLAN_TUNNEL),
+ XLAT(IFLA_BRPORT_BCAST_FLOOD),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_ifla_brport_attrs.in b/xlat/rtnl_ifla_brport_attrs.in
new file mode 100644
index 0000000..e18e8c5
--- /dev/null
+++ b/xlat/rtnl_ifla_brport_attrs.in
@@ -0,0 +1,31 @@
+IFLA_BRPORT_UNSPEC		0
+IFLA_BRPORT_STATE		1
+IFLA_BRPORT_PRIORITY		2
+IFLA_BRPORT_COST		3
+IFLA_BRPORT_MODE		4
+IFLA_BRPORT_GUARD		5
+IFLA_BRPORT_PROTECT		6
+IFLA_BRPORT_FAST_LEAVE		7
+IFLA_BRPORT_LEARNING		8
+IFLA_BRPORT_UNICAST_FLOOD	9
+IFLA_BRPORT_PROXYARP		10
+IFLA_BRPORT_LEARNING_SYNC	11
+IFLA_BRPORT_PROXYARP_WIFI	12
+IFLA_BRPORT_ROOT_ID		13
+IFLA_BRPORT_BRIDGE_ID		14
+IFLA_BRPORT_DESIGNATED_PORT	15
+IFLA_BRPORT_DESIGNATED_COST	16
+IFLA_BRPORT_ID			17
+IFLA_BRPORT_NO			18
+IFLA_BRPORT_TOPOLOGY_CHANGE_ACK	19
+IFLA_BRPORT_CONFIG_PENDING	20
+IFLA_BRPORT_MESSAGE_AGE_TIMER	21
+IFLA_BRPORT_FORWARD_DELAY_TIMER	22
+IFLA_BRPORT_HOLD_TIMER		23
+IFLA_BRPORT_FLUSH		24
+IFLA_BRPORT_MULTICAST_ROUTER	25
+IFLA_BRPORT_PAD			26
+IFLA_BRPORT_MCAST_FLOOD		27
+IFLA_BRPORT_MCAST_TO_UCAST	28
+IFLA_BRPORT_VLAN_TUNNEL		29
+IFLA_BRPORT_BCAST_FLOOD		30
diff --git a/xlat/rtnl_ifla_info_attrs.h b/xlat/rtnl_ifla_info_attrs.h
new file mode 100644
index 0000000..66ed9c4
--- /dev/null
+++ b/xlat/rtnl_ifla_info_attrs.h
@@ -0,0 +1,38 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_info_attrs.in; do not edit. */
+#if !(defined(IFLA_INFO_UNSPEC) || (defined(HAVE_DECL_IFLA_INFO_UNSPEC) && HAVE_DECL_IFLA_INFO_UNSPEC))
+# define IFLA_INFO_UNSPEC 0
+#endif
+#if !(defined(IFLA_INFO_KIND) || (defined(HAVE_DECL_IFLA_INFO_KIND) && HAVE_DECL_IFLA_INFO_KIND))
+# define IFLA_INFO_KIND 1
+#endif
+#if !(defined(IFLA_INFO_DATA) || (defined(HAVE_DECL_IFLA_INFO_DATA) && HAVE_DECL_IFLA_INFO_DATA))
+# define IFLA_INFO_DATA 2
+#endif
+#if !(defined(IFLA_INFO_XSTATS) || (defined(HAVE_DECL_IFLA_INFO_XSTATS) && HAVE_DECL_IFLA_INFO_XSTATS))
+# define IFLA_INFO_XSTATS 3
+#endif
+#if !(defined(IFLA_INFO_SLAVE_KIND) || (defined(HAVE_DECL_IFLA_INFO_SLAVE_KIND) && HAVE_DECL_IFLA_INFO_SLAVE_KIND))
+# define IFLA_INFO_SLAVE_KIND 4
+#endif
+#if !(defined(IFLA_INFO_SLAVE_DATA) || (defined(HAVE_DECL_IFLA_INFO_SLAVE_DATA) && HAVE_DECL_IFLA_INFO_SLAVE_DATA))
+# define IFLA_INFO_SLAVE_DATA 5
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_ifla_info_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_ifla_info_attrs[] = {
+ XLAT(IFLA_INFO_UNSPEC),
+ XLAT(IFLA_INFO_KIND),
+ XLAT(IFLA_INFO_DATA),
+ XLAT(IFLA_INFO_XSTATS),
+ XLAT(IFLA_INFO_SLAVE_KIND),
+ XLAT(IFLA_INFO_SLAVE_DATA),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_ifla_info_attrs.in b/xlat/rtnl_ifla_info_attrs.in
new file mode 100644
index 0000000..61201d3
--- /dev/null
+++ b/xlat/rtnl_ifla_info_attrs.in
@@ -0,0 +1,6 @@
+IFLA_INFO_UNSPEC	0
+IFLA_INFO_KIND		1
+IFLA_INFO_DATA		2
+IFLA_INFO_XSTATS	3
+IFLA_INFO_SLAVE_KIND	4
+IFLA_INFO_SLAVE_DATA	5
diff --git a/xlat/rtnl_ifla_port_attrs.h b/xlat/rtnl_ifla_port_attrs.h
new file mode 100644
index 0000000..88cf635
--- /dev/null
+++ b/xlat/rtnl_ifla_port_attrs.h
@@ -0,0 +1,46 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_port_attrs.in; do not edit. */
+#if !(defined(IFLA_PORT_UNSPEC) || (defined(HAVE_DECL_IFLA_PORT_UNSPEC) && HAVE_DECL_IFLA_PORT_UNSPEC))
+# define IFLA_PORT_UNSPEC 0
+#endif
+#if !(defined(IFLA_PORT_VF) || (defined(HAVE_DECL_IFLA_PORT_VF) && HAVE_DECL_IFLA_PORT_VF))
+# define IFLA_PORT_VF 1
+#endif
+#if !(defined(IFLA_PORT_PROFILE) || (defined(HAVE_DECL_IFLA_PORT_PROFILE) && HAVE_DECL_IFLA_PORT_PROFILE))
+# define IFLA_PORT_PROFILE 2
+#endif
+#if !(defined(IFLA_PORT_VSI_TYPE) || (defined(HAVE_DECL_IFLA_PORT_VSI_TYPE) && HAVE_DECL_IFLA_PORT_VSI_TYPE))
+# define IFLA_PORT_VSI_TYPE 3
+#endif
+#if !(defined(IFLA_PORT_INSTANCE_UUID) || (defined(HAVE_DECL_IFLA_PORT_INSTANCE_UUID) && HAVE_DECL_IFLA_PORT_INSTANCE_UUID))
+# define IFLA_PORT_INSTANCE_UUID 4
+#endif
+#if !(defined(IFLA_PORT_HOST_UUID) || (defined(HAVE_DECL_IFLA_PORT_HOST_UUID) && HAVE_DECL_IFLA_PORT_HOST_UUID))
+# define IFLA_PORT_HOST_UUID 5
+#endif
+#if !(defined(IFLA_PORT_REQUEST) || (defined(HAVE_DECL_IFLA_PORT_REQUEST) && HAVE_DECL_IFLA_PORT_REQUEST))
+# define IFLA_PORT_REQUEST 6
+#endif
+#if !(defined(IFLA_PORT_RESPONSE) || (defined(HAVE_DECL_IFLA_PORT_RESPONSE) && HAVE_DECL_IFLA_PORT_RESPONSE))
+# define IFLA_PORT_RESPONSE 7
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_ifla_port_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_ifla_port_attrs[] = {
+ XLAT(IFLA_PORT_UNSPEC),
+ XLAT(IFLA_PORT_VF),
+ XLAT(IFLA_PORT_PROFILE),
+ XLAT(IFLA_PORT_VSI_TYPE),
+ XLAT(IFLA_PORT_INSTANCE_UUID),
+ XLAT(IFLA_PORT_HOST_UUID),
+ XLAT(IFLA_PORT_REQUEST),
+ XLAT(IFLA_PORT_RESPONSE),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_ifla_port_attrs.in b/xlat/rtnl_ifla_port_attrs.in
new file mode 100644
index 0000000..9079006
--- /dev/null
+++ b/xlat/rtnl_ifla_port_attrs.in
@@ -0,0 +1,8 @@
+IFLA_PORT_UNSPEC	0
+IFLA_PORT_VF		1
+IFLA_PORT_PROFILE	2
+IFLA_PORT_VSI_TYPE	3
+IFLA_PORT_INSTANCE_UUID	4
+IFLA_PORT_HOST_UUID	5
+IFLA_PORT_REQUEST	6
+IFLA_PORT_RESPONSE	7
diff --git a/xlat/rtnl_ifla_vf_port_attrs.h b/xlat/rtnl_ifla_vf_port_attrs.h
new file mode 100644
index 0000000..c4b9b42
--- /dev/null
+++ b/xlat/rtnl_ifla_vf_port_attrs.h
@@ -0,0 +1,22 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_vf_port_attrs.in; do not edit. */
+#if !(defined(IFLA_VF_PORT_UNSPEC) || (defined(HAVE_DECL_IFLA_VF_PORT_UNSPEC) && HAVE_DECL_IFLA_VF_PORT_UNSPEC))
+# define IFLA_VF_PORT_UNSPEC 0
+#endif
+#if !(defined(IFLA_VF_PORT) || (defined(HAVE_DECL_IFLA_VF_PORT) && HAVE_DECL_IFLA_VF_PORT))
+# define IFLA_VF_PORT 1
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_ifla_vf_port_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_ifla_vf_port_attrs[] = {
+ XLAT(IFLA_VF_PORT_UNSPEC),
+ XLAT(IFLA_VF_PORT),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_ifla_vf_port_attrs.in b/xlat/rtnl_ifla_vf_port_attrs.in
new file mode 100644
index 0000000..7f93051
--- /dev/null
+++ b/xlat/rtnl_ifla_vf_port_attrs.in
@@ -0,0 +1,2 @@
+IFLA_VF_PORT_UNSPEC	0
+IFLA_VF_PORT		1
diff --git a/xlat/rtnl_ifla_xdp_attrs.h b/xlat/rtnl_ifla_xdp_attrs.h
new file mode 100644
index 0000000..708f8ea
--- /dev/null
+++ b/xlat/rtnl_ifla_xdp_attrs.h
@@ -0,0 +1,34 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_xdp_attrs.in; do not edit. */
+#if !(defined(IFLA_XDP_UNSPEC) || (defined(HAVE_DECL_IFLA_XDP_UNSPEC) && HAVE_DECL_IFLA_XDP_UNSPEC))
+# define IFLA_XDP_UNSPEC 0
+#endif
+#if !(defined(IFLA_XDP_FD) || (defined(HAVE_DECL_IFLA_XDP_FD) && HAVE_DECL_IFLA_XDP_FD))
+# define IFLA_XDP_FD 1
+#endif
+#if !(defined(IFLA_XDP_ATTACHED) || (defined(HAVE_DECL_IFLA_XDP_ATTACHED) && HAVE_DECL_IFLA_XDP_ATTACHED))
+# define IFLA_XDP_ATTACHED 2
+#endif
+#if !(defined(IFLA_XDP_FLAGS) || (defined(HAVE_DECL_IFLA_XDP_FLAGS) && HAVE_DECL_IFLA_XDP_FLAGS))
+# define IFLA_XDP_FLAGS 3
+#endif
+#if !(defined(IFLA_XDP_PROG_ID) || (defined(HAVE_DECL_IFLA_XDP_PROG_ID) && HAVE_DECL_IFLA_XDP_PROG_ID))
+# define IFLA_XDP_PROG_ID 4
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_ifla_xdp_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_ifla_xdp_attrs[] = {
+ XLAT(IFLA_XDP_UNSPEC),
+ XLAT(IFLA_XDP_FD),
+ XLAT(IFLA_XDP_ATTACHED),
+ XLAT(IFLA_XDP_FLAGS),
+ XLAT(IFLA_XDP_PROG_ID),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_ifla_xdp_attrs.in b/xlat/rtnl_ifla_xdp_attrs.in
new file mode 100644
index 0000000..ef3f458
--- /dev/null
+++ b/xlat/rtnl_ifla_xdp_attrs.in
@@ -0,0 +1,5 @@
+IFLA_XDP_UNSPEC		0
+IFLA_XDP_FD		1
+IFLA_XDP_ATTACHED	2
+IFLA_XDP_FLAGS		3
+IFLA_XDP_PROG_ID	4
diff --git a/xlat/rtnl_link_attrs.h b/xlat/rtnl_link_attrs.h
new file mode 100644
index 0000000..e3f29ae
--- /dev/null
+++ b/xlat/rtnl_link_attrs.h
@@ -0,0 +1,194 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_link_attrs.in; do not edit. */
+#if !(defined(IFLA_UNSPEC) || (defined(HAVE_DECL_IFLA_UNSPEC) && HAVE_DECL_IFLA_UNSPEC))
+# define IFLA_UNSPEC 0
+#endif
+#if !(defined(IFLA_ADDRESS) || (defined(HAVE_DECL_IFLA_ADDRESS) && HAVE_DECL_IFLA_ADDRESS))
+# define IFLA_ADDRESS 1
+#endif
+#if !(defined(IFLA_BROADCAST) || (defined(HAVE_DECL_IFLA_BROADCAST) && HAVE_DECL_IFLA_BROADCAST))
+# define IFLA_BROADCAST 2
+#endif
+#if !(defined(IFLA_IFNAME) || (defined(HAVE_DECL_IFLA_IFNAME) && HAVE_DECL_IFLA_IFNAME))
+# define IFLA_IFNAME 3
+#endif
+#if !(defined(IFLA_MTU) || (defined(HAVE_DECL_IFLA_MTU) && HAVE_DECL_IFLA_MTU))
+# define IFLA_MTU 4
+#endif
+#if !(defined(IFLA_LINK) || (defined(HAVE_DECL_IFLA_LINK) && HAVE_DECL_IFLA_LINK))
+# define IFLA_LINK 5
+#endif
+#if !(defined(IFLA_QDISC) || (defined(HAVE_DECL_IFLA_QDISC) && HAVE_DECL_IFLA_QDISC))
+# define IFLA_QDISC 6
+#endif
+#if !(defined(IFLA_STATS) || (defined(HAVE_DECL_IFLA_STATS) && HAVE_DECL_IFLA_STATS))
+# define IFLA_STATS 7
+#endif
+#if !(defined(IFLA_COST) || (defined(HAVE_DECL_IFLA_COST) && HAVE_DECL_IFLA_COST))
+# define IFLA_COST 8
+#endif
+#if !(defined(IFLA_PRIORITY) || (defined(HAVE_DECL_IFLA_PRIORITY) && HAVE_DECL_IFLA_PRIORITY))
+# define IFLA_PRIORITY 9
+#endif
+#if !(defined(IFLA_MASTER) || (defined(HAVE_DECL_IFLA_MASTER) && HAVE_DECL_IFLA_MASTER))
+# define IFLA_MASTER 10
+#endif
+#if !(defined(IFLA_WIRELESS) || (defined(HAVE_DECL_IFLA_WIRELESS) && HAVE_DECL_IFLA_WIRELESS))
+# define IFLA_WIRELESS 11
+#endif
+#if !(defined(IFLA_PROTINFO) || (defined(HAVE_DECL_IFLA_PROTINFO) && HAVE_DECL_IFLA_PROTINFO))
+# define IFLA_PROTINFO 12
+#endif
+#if !(defined(IFLA_TXQLEN) || (defined(HAVE_DECL_IFLA_TXQLEN) && HAVE_DECL_IFLA_TXQLEN))
+# define IFLA_TXQLEN 13
+#endif
+#if !(defined(IFLA_MAP) || (defined(HAVE_DECL_IFLA_MAP) && HAVE_DECL_IFLA_MAP))
+# define IFLA_MAP 14
+#endif
+#if !(defined(IFLA_WEIGHT) || (defined(HAVE_DECL_IFLA_WEIGHT) && HAVE_DECL_IFLA_WEIGHT))
+# define IFLA_WEIGHT 15
+#endif
+#if !(defined(IFLA_OPERSTATE) || (defined(HAVE_DECL_IFLA_OPERSTATE) && HAVE_DECL_IFLA_OPERSTATE))
+# define IFLA_OPERSTATE 16
+#endif
+#if !(defined(IFLA_LINKMODE) || (defined(HAVE_DECL_IFLA_LINKMODE) && HAVE_DECL_IFLA_LINKMODE))
+# define IFLA_LINKMODE 17
+#endif
+#if !(defined(IFLA_LINKINFO) || (defined(HAVE_DECL_IFLA_LINKINFO) && HAVE_DECL_IFLA_LINKINFO))
+# define IFLA_LINKINFO 18
+#endif
+#if !(defined(IFLA_NET_NS_PID) || (defined(HAVE_DECL_IFLA_NET_NS_PID) && HAVE_DECL_IFLA_NET_NS_PID))
+# define IFLA_NET_NS_PID 19
+#endif
+#if !(defined(IFLA_IFALIAS) || (defined(HAVE_DECL_IFLA_IFALIAS) && HAVE_DECL_IFLA_IFALIAS))
+# define IFLA_IFALIAS 20
+#endif
+#if !(defined(IFLA_NUM_VF) || (defined(HAVE_DECL_IFLA_NUM_VF) && HAVE_DECL_IFLA_NUM_VF))
+# define IFLA_NUM_VF 21
+#endif
+#if !(defined(IFLA_VFINFO_LIST) || (defined(HAVE_DECL_IFLA_VFINFO_LIST) && HAVE_DECL_IFLA_VFINFO_LIST))
+# define IFLA_VFINFO_LIST 22
+#endif
+#if !(defined(IFLA_STATS64) || (defined(HAVE_DECL_IFLA_STATS64) && HAVE_DECL_IFLA_STATS64))
+# define IFLA_STATS64 23
+#endif
+#if !(defined(IFLA_VF_PORTS) || (defined(HAVE_DECL_IFLA_VF_PORTS) && HAVE_DECL_IFLA_VF_PORTS))
+# define IFLA_VF_PORTS 24
+#endif
+#if !(defined(IFLA_PORT_SELF) || (defined(HAVE_DECL_IFLA_PORT_SELF) && HAVE_DECL_IFLA_PORT_SELF))
+# define IFLA_PORT_SELF 25
+#endif
+#if !(defined(IFLA_AF_SPEC) || (defined(HAVE_DECL_IFLA_AF_SPEC) && HAVE_DECL_IFLA_AF_SPEC))
+# define IFLA_AF_SPEC 26
+#endif
+#if !(defined(IFLA_GROUP) || (defined(HAVE_DECL_IFLA_GROUP) && HAVE_DECL_IFLA_GROUP))
+# define IFLA_GROUP 27
+#endif
+#if !(defined(IFLA_NET_NS_FD) || (defined(HAVE_DECL_IFLA_NET_NS_FD) && HAVE_DECL_IFLA_NET_NS_FD))
+# define IFLA_NET_NS_FD 28
+#endif
+#if !(defined(IFLA_EXT_MASK) || (defined(HAVE_DECL_IFLA_EXT_MASK) && HAVE_DECL_IFLA_EXT_MASK))
+# define IFLA_EXT_MASK 29
+#endif
+#if !(defined(IFLA_PROMISCUITY) || (defined(HAVE_DECL_IFLA_PROMISCUITY) && HAVE_DECL_IFLA_PROMISCUITY))
+# define IFLA_PROMISCUITY 30
+#endif
+#if !(defined(IFLA_NUM_TX_QUEUES) || (defined(HAVE_DECL_IFLA_NUM_TX_QUEUES) && HAVE_DECL_IFLA_NUM_TX_QUEUES))
+# define IFLA_NUM_TX_QUEUES 31
+#endif
+#if !(defined(IFLA_NUM_RX_QUEUES) || (defined(HAVE_DECL_IFLA_NUM_RX_QUEUES) && HAVE_DECL_IFLA_NUM_RX_QUEUES))
+# define IFLA_NUM_RX_QUEUES 32
+#endif
+#if !(defined(IFLA_CARRIER) || (defined(HAVE_DECL_IFLA_CARRIER) && HAVE_DECL_IFLA_CARRIER))
+# define IFLA_CARRIER 33
+#endif
+#if !(defined(IFLA_PHYS_PORT_ID) || (defined(HAVE_DECL_IFLA_PHYS_PORT_ID) && HAVE_DECL_IFLA_PHYS_PORT_ID))
+# define IFLA_PHYS_PORT_ID 34
+#endif
+#if !(defined(IFLA_CARRIER_CHANGES) || (defined(HAVE_DECL_IFLA_CARRIER_CHANGES) && HAVE_DECL_IFLA_CARRIER_CHANGES))
+# define IFLA_CARRIER_CHANGES 35
+#endif
+#if !(defined(IFLA_PHYS_SWITCH_ID) || (defined(HAVE_DECL_IFLA_PHYS_SWITCH_ID) && HAVE_DECL_IFLA_PHYS_SWITCH_ID))
+# define IFLA_PHYS_SWITCH_ID 36
+#endif
+#if !(defined(IFLA_LINK_NETNSID) || (defined(HAVE_DECL_IFLA_LINK_NETNSID) && HAVE_DECL_IFLA_LINK_NETNSID))
+# define IFLA_LINK_NETNSID 37
+#endif
+#if !(defined(IFLA_PHYS_PORT_NAME) || (defined(HAVE_DECL_IFLA_PHYS_PORT_NAME) && HAVE_DECL_IFLA_PHYS_PORT_NAME))
+# define IFLA_PHYS_PORT_NAME 38
+#endif
+#if !(defined(IFLA_PROTO_DOWN) || (defined(HAVE_DECL_IFLA_PROTO_DOWN) && HAVE_DECL_IFLA_PROTO_DOWN))
+# define IFLA_PROTO_DOWN 39
+#endif
+#if !(defined(IFLA_GSO_MAX_SEGS) || (defined(HAVE_DECL_IFLA_GSO_MAX_SEGS) && HAVE_DECL_IFLA_GSO_MAX_SEGS))
+# define IFLA_GSO_MAX_SEGS 40
+#endif
+#if !(defined(IFLA_GSO_MAX_SIZE) || (defined(HAVE_DECL_IFLA_GSO_MAX_SIZE) && HAVE_DECL_IFLA_GSO_MAX_SIZE))
+# define IFLA_GSO_MAX_SIZE 41
+#endif
+#if !(defined(IFLA_PAD) || (defined(HAVE_DECL_IFLA_PAD) && HAVE_DECL_IFLA_PAD))
+# define IFLA_PAD 42
+#endif
+#if !(defined(IFLA_XDP) || (defined(HAVE_DECL_IFLA_XDP) && HAVE_DECL_IFLA_XDP))
+# define IFLA_XDP 43
+#endif
+#if !(defined(IFLA_EVENT) || (defined(HAVE_DECL_IFLA_EVENT) && HAVE_DECL_IFLA_EVENT))
+# define IFLA_EVENT 44
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_link_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_link_attrs[] = {
+ XLAT(IFLA_UNSPEC),
+ XLAT(IFLA_ADDRESS),
+ XLAT(IFLA_BROADCAST),
+ XLAT(IFLA_IFNAME),
+ XLAT(IFLA_MTU),
+ XLAT(IFLA_LINK),
+ XLAT(IFLA_QDISC),
+ XLAT(IFLA_STATS),
+ XLAT(IFLA_COST),
+ XLAT(IFLA_PRIORITY),
+ XLAT(IFLA_MASTER),
+ XLAT(IFLA_WIRELESS),
+ XLAT(IFLA_PROTINFO),
+ XLAT(IFLA_TXQLEN),
+ XLAT(IFLA_MAP),
+ XLAT(IFLA_WEIGHT),
+ XLAT(IFLA_OPERSTATE),
+ XLAT(IFLA_LINKMODE),
+ XLAT(IFLA_LINKINFO),
+ XLAT(IFLA_NET_NS_PID),
+ XLAT(IFLA_IFALIAS),
+ XLAT(IFLA_NUM_VF),
+ XLAT(IFLA_VFINFO_LIST),
+ XLAT(IFLA_STATS64),
+ XLAT(IFLA_VF_PORTS),
+ XLAT(IFLA_PORT_SELF),
+ XLAT(IFLA_AF_SPEC),
+ XLAT(IFLA_GROUP),
+ XLAT(IFLA_NET_NS_FD),
+ XLAT(IFLA_EXT_MASK),
+ XLAT(IFLA_PROMISCUITY),
+ XLAT(IFLA_NUM_TX_QUEUES),
+ XLAT(IFLA_NUM_RX_QUEUES),
+ XLAT(IFLA_CARRIER),
+ XLAT(IFLA_PHYS_PORT_ID),
+ XLAT(IFLA_CARRIER_CHANGES),
+ XLAT(IFLA_PHYS_SWITCH_ID),
+ XLAT(IFLA_LINK_NETNSID),
+ XLAT(IFLA_PHYS_PORT_NAME),
+ XLAT(IFLA_PROTO_DOWN),
+ XLAT(IFLA_GSO_MAX_SEGS),
+ XLAT(IFLA_GSO_MAX_SIZE),
+ XLAT(IFLA_PAD),
+ XLAT(IFLA_XDP),
+ XLAT(IFLA_EVENT),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_link_attrs.in b/xlat/rtnl_link_attrs.in
new file mode 100644
index 0000000..eb7f475
--- /dev/null
+++ b/xlat/rtnl_link_attrs.in
@@ -0,0 +1,45 @@
+IFLA_UNSPEC		0
+IFLA_ADDRESS		1
+IFLA_BROADCAST		2
+IFLA_IFNAME		3
+IFLA_MTU		4
+IFLA_LINK		5
+IFLA_QDISC		6
+IFLA_STATS		7
+IFLA_COST		8
+IFLA_PRIORITY		9
+IFLA_MASTER		10
+IFLA_WIRELESS		11
+IFLA_PROTINFO		12
+IFLA_TXQLEN		13
+IFLA_MAP		14
+IFLA_WEIGHT		15
+IFLA_OPERSTATE		16
+IFLA_LINKMODE		17
+IFLA_LINKINFO		18
+IFLA_NET_NS_PID		19
+IFLA_IFALIAS		20
+IFLA_NUM_VF		21
+IFLA_VFINFO_LIST	22
+IFLA_STATS64		23
+IFLA_VF_PORTS		24
+IFLA_PORT_SELF		25
+IFLA_AF_SPEC		26
+IFLA_GROUP		27
+IFLA_NET_NS_FD		28
+IFLA_EXT_MASK		29
+IFLA_PROMISCUITY	30
+IFLA_NUM_TX_QUEUES	31
+IFLA_NUM_RX_QUEUES	32
+IFLA_CARRIER		33
+IFLA_PHYS_PORT_ID	34
+IFLA_CARRIER_CHANGES	35
+IFLA_PHYS_SWITCH_ID	36
+IFLA_LINK_NETNSID	37
+IFLA_PHYS_PORT_NAME	38
+IFLA_PROTO_DOWN		39
+IFLA_GSO_MAX_SEGS	40
+IFLA_GSO_MAX_SIZE	41
+IFLA_PAD		42
+IFLA_XDP		43
+IFLA_EVENT		44
diff --git a/xlat/rtnl_mdb_attrs.h b/xlat/rtnl_mdb_attrs.h
new file mode 100644
index 0000000..6b56dee
--- /dev/null
+++ b/xlat/rtnl_mdb_attrs.h
@@ -0,0 +1,26 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_mdb_attrs.in; do not edit. */
+#if !(defined(MDBA_UNSPEC) || (defined(HAVE_DECL_MDBA_UNSPEC) && HAVE_DECL_MDBA_UNSPEC))
+# define MDBA_UNSPEC 0
+#endif
+#if !(defined(MDBA_MDB) || (defined(HAVE_DECL_MDBA_MDB) && HAVE_DECL_MDBA_MDB))
+# define MDBA_MDB 1
+#endif
+#if !(defined(MDBA_ROUTER) || (defined(HAVE_DECL_MDBA_ROUTER) && HAVE_DECL_MDBA_ROUTER))
+# define MDBA_ROUTER 2
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_mdb_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_mdb_attrs[] = {
+ XLAT(MDBA_UNSPEC),
+ XLAT(MDBA_MDB),
+ XLAT(MDBA_ROUTER),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_mdb_attrs.in b/xlat/rtnl_mdb_attrs.in
new file mode 100644
index 0000000..b804662
--- /dev/null
+++ b/xlat/rtnl_mdb_attrs.in
@@ -0,0 +1,3 @@
+MDBA_UNSPEC		0
+MDBA_MDB		1
+MDBA_ROUTER		2
diff --git a/xlat/rtnl_neigh_attrs.h b/xlat/rtnl_neigh_attrs.h
new file mode 100644
index 0000000..492ea42
--- /dev/null
+++ b/xlat/rtnl_neigh_attrs.h
@@ -0,0 +1,62 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_neigh_attrs.in; do not edit. */
+#if !(defined(NDA_UNSPEC) || (defined(HAVE_DECL_NDA_UNSPEC) && HAVE_DECL_NDA_UNSPEC))
+# define NDA_UNSPEC 0
+#endif
+#if !(defined(NDA_DST) || (defined(HAVE_DECL_NDA_DST) && HAVE_DECL_NDA_DST))
+# define NDA_DST 1
+#endif
+#if !(defined(NDA_LLADDR) || (defined(HAVE_DECL_NDA_LLADDR) && HAVE_DECL_NDA_LLADDR))
+# define NDA_LLADDR 2
+#endif
+#if !(defined(NDA_CACHEINFO) || (defined(HAVE_DECL_NDA_CACHEINFO) && HAVE_DECL_NDA_CACHEINFO))
+# define NDA_CACHEINFO 3
+#endif
+#if !(defined(NDA_PROBES) || (defined(HAVE_DECL_NDA_PROBES) && HAVE_DECL_NDA_PROBES))
+# define NDA_PROBES 4
+#endif
+#if !(defined(NDA_VLAN) || (defined(HAVE_DECL_NDA_VLAN) && HAVE_DECL_NDA_VLAN))
+# define NDA_VLAN 5
+#endif
+#if !(defined(NDA_PORT) || (defined(HAVE_DECL_NDA_PORT) && HAVE_DECL_NDA_PORT))
+# define NDA_PORT 6
+#endif
+#if !(defined(NDA_VNI) || (defined(HAVE_DECL_NDA_VNI) && HAVE_DECL_NDA_VNI))
+# define NDA_VNI 7
+#endif
+#if !(defined(NDA_IFINDEX) || (defined(HAVE_DECL_NDA_IFINDEX) && HAVE_DECL_NDA_IFINDEX))
+# define NDA_IFINDEX 8
+#endif
+#if !(defined(NDA_MASTER) || (defined(HAVE_DECL_NDA_MASTER) && HAVE_DECL_NDA_MASTER))
+# define NDA_MASTER 9
+#endif
+#if !(defined(NDA_LINK_NETNSID) || (defined(HAVE_DECL_NDA_LINK_NETNSID) && HAVE_DECL_NDA_LINK_NETNSID))
+# define NDA_LINK_NETNSID 10
+#endif
+#if !(defined(NDA_SRC_VNI) || (defined(HAVE_DECL_NDA_SRC_VNI) && HAVE_DECL_NDA_SRC_VNI))
+# define NDA_SRC_VNI 11
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_neigh_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_neigh_attrs[] = {
+ XLAT(NDA_UNSPEC),
+ XLAT(NDA_DST),
+ XLAT(NDA_LLADDR),
+ XLAT(NDA_CACHEINFO),
+ XLAT(NDA_PROBES),
+ XLAT(NDA_VLAN),
+ XLAT(NDA_PORT),
+ XLAT(NDA_VNI),
+ XLAT(NDA_IFINDEX),
+ XLAT(NDA_MASTER),
+ XLAT(NDA_LINK_NETNSID),
+ XLAT(NDA_SRC_VNI),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_neigh_attrs.in b/xlat/rtnl_neigh_attrs.in
new file mode 100644
index 0000000..fed013a
--- /dev/null
+++ b/xlat/rtnl_neigh_attrs.in
@@ -0,0 +1,12 @@
+NDA_UNSPEC		0
+NDA_DST			1
+NDA_LLADDR		2
+NDA_CACHEINFO		3
+NDA_PROBES		4
+NDA_VLAN		5
+NDA_PORT		6
+NDA_VNI			7
+NDA_IFINDEX		8
+NDA_MASTER		9
+NDA_LINK_NETNSID	10
+NDA_SRC_VNI		11
diff --git a/xlat/rtnl_neightbl_attrs.h b/xlat/rtnl_neightbl_attrs.h
new file mode 100644
index 0000000..748d8b7
--- /dev/null
+++ b/xlat/rtnl_neightbl_attrs.h
@@ -0,0 +1,54 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_neightbl_attrs.in; do not edit. */
+#if !(defined(NDTA_UNSPEC) || (defined(HAVE_DECL_NDTA_UNSPEC) && HAVE_DECL_NDTA_UNSPEC))
+# define NDTA_UNSPEC 0
+#endif
+#if !(defined(NDTA_NAME) || (defined(HAVE_DECL_NDTA_NAME) && HAVE_DECL_NDTA_NAME))
+# define NDTA_NAME 1
+#endif
+#if !(defined(NDTA_THRESH1) || (defined(HAVE_DECL_NDTA_THRESH1) && HAVE_DECL_NDTA_THRESH1))
+# define NDTA_THRESH1 2
+#endif
+#if !(defined(NDTA_THRESH2) || (defined(HAVE_DECL_NDTA_THRESH2) && HAVE_DECL_NDTA_THRESH2))
+# define NDTA_THRESH2 3
+#endif
+#if !(defined(NDTA_THRESH3) || (defined(HAVE_DECL_NDTA_THRESH3) && HAVE_DECL_NDTA_THRESH3))
+# define NDTA_THRESH3 4
+#endif
+#if !(defined(NDTA_CONFIG) || (defined(HAVE_DECL_NDTA_CONFIG) && HAVE_DECL_NDTA_CONFIG))
+# define NDTA_CONFIG 5
+#endif
+#if !(defined(NDTA_PARMS) || (defined(HAVE_DECL_NDTA_PARMS) && HAVE_DECL_NDTA_PARMS))
+# define NDTA_PARMS 6
+#endif
+#if !(defined(NDTA_STATS) || (defined(HAVE_DECL_NDTA_STATS) && HAVE_DECL_NDTA_STATS))
+# define NDTA_STATS 7
+#endif
+#if !(defined(NDTA_GC_INTERVAL) || (defined(HAVE_DECL_NDTA_GC_INTERVAL) && HAVE_DECL_NDTA_GC_INTERVAL))
+# define NDTA_GC_INTERVAL 8
+#endif
+#if !(defined(NDTA_PAD) || (defined(HAVE_DECL_NDTA_PAD) && HAVE_DECL_NDTA_PAD))
+# define NDTA_PAD 9
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_neightbl_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_neightbl_attrs[] = {
+ XLAT(NDTA_UNSPEC),
+ XLAT(NDTA_NAME),
+ XLAT(NDTA_THRESH1),
+ XLAT(NDTA_THRESH2),
+ XLAT(NDTA_THRESH3),
+ XLAT(NDTA_CONFIG),
+ XLAT(NDTA_PARMS),
+ XLAT(NDTA_STATS),
+ XLAT(NDTA_GC_INTERVAL),
+ XLAT(NDTA_PAD),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_neightbl_attrs.in b/xlat/rtnl_neightbl_attrs.in
new file mode 100644
index 0000000..ea840f6
--- /dev/null
+++ b/xlat/rtnl_neightbl_attrs.in
@@ -0,0 +1,10 @@
+NDTA_UNSPEC		0
+NDTA_NAME		1
+NDTA_THRESH1		2
+NDTA_THRESH2		3
+NDTA_THRESH3		4
+NDTA_CONFIG		5
+NDTA_PARMS		6
+NDTA_STATS		7
+NDTA_GC_INTERVAL	8
+NDTA_PAD		9
diff --git a/xlat/rtnl_neightbl_parms_attrs.h b/xlat/rtnl_neightbl_parms_attrs.h
new file mode 100644
index 0000000..f86166e
--- /dev/null
+++ b/xlat/rtnl_neightbl_parms_attrs.h
@@ -0,0 +1,90 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_neightbl_parms_attrs.in; do not edit. */
+#if !(defined(NDTPA_UNSPEC) || (defined(HAVE_DECL_NDTPA_UNSPEC) && HAVE_DECL_NDTPA_UNSPEC))
+# define NDTPA_UNSPEC 0
+#endif
+#if !(defined(NDTPA_IFINDEX) || (defined(HAVE_DECL_NDTPA_IFINDEX) && HAVE_DECL_NDTPA_IFINDEX))
+# define NDTPA_IFINDEX 1
+#endif
+#if !(defined(NDTPA_REFCNT) || (defined(HAVE_DECL_NDTPA_REFCNT) && HAVE_DECL_NDTPA_REFCNT))
+# define NDTPA_REFCNT 2
+#endif
+#if !(defined(NDTPA_REACHABLE_TIME) || (defined(HAVE_DECL_NDTPA_REACHABLE_TIME) && HAVE_DECL_NDTPA_REACHABLE_TIME))
+# define NDTPA_REACHABLE_TIME 3
+#endif
+#if !(defined(NDTPA_BASE_REACHABLE_TIME) || (defined(HAVE_DECL_NDTPA_BASE_REACHABLE_TIME) && HAVE_DECL_NDTPA_BASE_REACHABLE_TIME))
+# define NDTPA_BASE_REACHABLE_TIME 4
+#endif
+#if !(defined(NDTPA_RETRANS_TIME) || (defined(HAVE_DECL_NDTPA_RETRANS_TIME) && HAVE_DECL_NDTPA_RETRANS_TIME))
+# define NDTPA_RETRANS_TIME 5
+#endif
+#if !(defined(NDTPA_GC_STALETIME) || (defined(HAVE_DECL_NDTPA_GC_STALETIME) && HAVE_DECL_NDTPA_GC_STALETIME))
+# define NDTPA_GC_STALETIME 6
+#endif
+#if !(defined(NDTPA_DELAY_PROBE_TIME) || (defined(HAVE_DECL_NDTPA_DELAY_PROBE_TIME) && HAVE_DECL_NDTPA_DELAY_PROBE_TIME))
+# define NDTPA_DELAY_PROBE_TIME 7
+#endif
+#if !(defined(NDTPA_QUEUE_LEN) || (defined(HAVE_DECL_NDTPA_QUEUE_LEN) && HAVE_DECL_NDTPA_QUEUE_LEN))
+# define NDTPA_QUEUE_LEN 8
+#endif
+#if !(defined(NDTPA_APP_PROBES) || (defined(HAVE_DECL_NDTPA_APP_PROBES) && HAVE_DECL_NDTPA_APP_PROBES))
+# define NDTPA_APP_PROBES 9
+#endif
+#if !(defined(NDTPA_UCAST_PROBES) || (defined(HAVE_DECL_NDTPA_UCAST_PROBES) && HAVE_DECL_NDTPA_UCAST_PROBES))
+# define NDTPA_UCAST_PROBES 10
+#endif
+#if !(defined(NDTPA_MCAST_PROBES) || (defined(HAVE_DECL_NDTPA_MCAST_PROBES) && HAVE_DECL_NDTPA_MCAST_PROBES))
+# define NDTPA_MCAST_PROBES 11
+#endif
+#if !(defined(NDTPA_ANYCAST_DELAY) || (defined(HAVE_DECL_NDTPA_ANYCAST_DELAY) && HAVE_DECL_NDTPA_ANYCAST_DELAY))
+# define NDTPA_ANYCAST_DELAY 12
+#endif
+#if !(defined(NDTPA_PROXY_DELAY) || (defined(HAVE_DECL_NDTPA_PROXY_DELAY) && HAVE_DECL_NDTPA_PROXY_DELAY))
+# define NDTPA_PROXY_DELAY 13
+#endif
+#if !(defined(NDTPA_PROXY_QLEN) || (defined(HAVE_DECL_NDTPA_PROXY_QLEN) && HAVE_DECL_NDTPA_PROXY_QLEN))
+# define NDTPA_PROXY_QLEN 14
+#endif
+#if !(defined(NDTPA_LOCKTIME) || (defined(HAVE_DECL_NDTPA_LOCKTIME) && HAVE_DECL_NDTPA_LOCKTIME))
+# define NDTPA_LOCKTIME 15
+#endif
+#if !(defined(NDTPA_QUEUE_LENBYTES) || (defined(HAVE_DECL_NDTPA_QUEUE_LENBYTES) && HAVE_DECL_NDTPA_QUEUE_LENBYTES))
+# define NDTPA_QUEUE_LENBYTES 16
+#endif
+#if !(defined(NDTPA_MCAST_REPROBES) || (defined(HAVE_DECL_NDTPA_MCAST_REPROBES) && HAVE_DECL_NDTPA_MCAST_REPROBES))
+# define NDTPA_MCAST_REPROBES 17
+#endif
+#if !(defined(NDTPA_PAD) || (defined(HAVE_DECL_NDTPA_PAD) && HAVE_DECL_NDTPA_PAD))
+# define NDTPA_PAD 18
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_neightbl_parms_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_neightbl_parms_attrs[] = {
+ XLAT(NDTPA_UNSPEC),
+ XLAT(NDTPA_IFINDEX),
+ XLAT(NDTPA_REFCNT),
+ XLAT(NDTPA_REACHABLE_TIME),
+ XLAT(NDTPA_BASE_REACHABLE_TIME),
+ XLAT(NDTPA_RETRANS_TIME),
+ XLAT(NDTPA_GC_STALETIME),
+ XLAT(NDTPA_DELAY_PROBE_TIME),
+ XLAT(NDTPA_QUEUE_LEN),
+ XLAT(NDTPA_APP_PROBES),
+ XLAT(NDTPA_UCAST_PROBES),
+ XLAT(NDTPA_MCAST_PROBES),
+ XLAT(NDTPA_ANYCAST_DELAY),
+ XLAT(NDTPA_PROXY_DELAY),
+ XLAT(NDTPA_PROXY_QLEN),
+ XLAT(NDTPA_LOCKTIME),
+ XLAT(NDTPA_QUEUE_LENBYTES),
+ XLAT(NDTPA_MCAST_REPROBES),
+ XLAT(NDTPA_PAD),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_neightbl_parms_attrs.in b/xlat/rtnl_neightbl_parms_attrs.in
new file mode 100644
index 0000000..9fcbff0
--- /dev/null
+++ b/xlat/rtnl_neightbl_parms_attrs.in
@@ -0,0 +1,19 @@
+NDTPA_UNSPEC			0
+NDTPA_IFINDEX			1
+NDTPA_REFCNT			2
+NDTPA_REACHABLE_TIME		3
+NDTPA_BASE_REACHABLE_TIME	4
+NDTPA_RETRANS_TIME		5
+NDTPA_GC_STALETIME		6
+NDTPA_DELAY_PROBE_TIME		7
+NDTPA_QUEUE_LEN			8
+NDTPA_APP_PROBES		9
+NDTPA_UCAST_PROBES		10
+NDTPA_MCAST_PROBES		11
+NDTPA_ANYCAST_DELAY		12
+NDTPA_PROXY_DELAY		13
+NDTPA_PROXY_QLEN		14
+NDTPA_LOCKTIME			15
+NDTPA_QUEUE_LENBYTES		16
+NDTPA_MCAST_REPROBES		17
+NDTPA_PAD			18
diff --git a/xlat/rtnl_netconf_attrs.h b/xlat/rtnl_netconf_attrs.h
new file mode 100644
index 0000000..3115d7a
--- /dev/null
+++ b/xlat/rtnl_netconf_attrs.h
@@ -0,0 +1,46 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_netconf_attrs.in; do not edit. */
+#if !(defined(NETCONFA_UNSPEC) || (defined(HAVE_DECL_NETCONFA_UNSPEC) && HAVE_DECL_NETCONFA_UNSPEC))
+# define NETCONFA_UNSPEC 0
+#endif
+#if !(defined(NETCONFA_IFINDEX) || (defined(HAVE_DECL_NETCONFA_IFINDEX) && HAVE_DECL_NETCONFA_IFINDEX))
+# define NETCONFA_IFINDEX 1
+#endif
+#if !(defined(NETCONFA_FORWARDING) || (defined(HAVE_DECL_NETCONFA_FORWARDING) && HAVE_DECL_NETCONFA_FORWARDING))
+# define NETCONFA_FORWARDING 2
+#endif
+#if !(defined(NETCONFA_RP_FILTER) || (defined(HAVE_DECL_NETCONFA_RP_FILTER) && HAVE_DECL_NETCONFA_RP_FILTER))
+# define NETCONFA_RP_FILTER 3
+#endif
+#if !(defined(NETCONFA_MC_FORWARDING) || (defined(HAVE_DECL_NETCONFA_MC_FORWARDING) && HAVE_DECL_NETCONFA_MC_FORWARDING))
+# define NETCONFA_MC_FORWARDING 4
+#endif
+#if !(defined(NETCONFA_PROXY_NEIGH) || (defined(HAVE_DECL_NETCONFA_PROXY_NEIGH) && HAVE_DECL_NETCONFA_PROXY_NEIGH))
+# define NETCONFA_PROXY_NEIGH 5
+#endif
+#if !(defined(NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) || (defined(HAVE_DECL_NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) && HAVE_DECL_NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN))
+# define NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN 6
+#endif
+#if !(defined(NETCONFA_INPUT) || (defined(HAVE_DECL_NETCONFA_INPUT) && HAVE_DECL_NETCONFA_INPUT))
+# define NETCONFA_INPUT 7
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_netconf_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_netconf_attrs[] = {
+ XLAT(NETCONFA_UNSPEC),
+ XLAT(NETCONFA_IFINDEX),
+ XLAT(NETCONFA_FORWARDING),
+ XLAT(NETCONFA_RP_FILTER),
+ XLAT(NETCONFA_MC_FORWARDING),
+ XLAT(NETCONFA_PROXY_NEIGH),
+ XLAT(NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN),
+ XLAT(NETCONFA_INPUT),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_netconf_attrs.in b/xlat/rtnl_netconf_attrs.in
new file mode 100644
index 0000000..b376b78
--- /dev/null
+++ b/xlat/rtnl_netconf_attrs.in
@@ -0,0 +1,8 @@
+NETCONFA_UNSPEC				0
+NETCONFA_IFINDEX			1
+NETCONFA_FORWARDING			2
+NETCONFA_RP_FILTER			3
+NETCONFA_MC_FORWARDING			4
+NETCONFA_PROXY_NEIGH			5
+NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN	6
+NETCONFA_INPUT				7
diff --git a/xlat/rtnl_nsid_attrs.h b/xlat/rtnl_nsid_attrs.h
new file mode 100644
index 0000000..8b1486a
--- /dev/null
+++ b/xlat/rtnl_nsid_attrs.h
@@ -0,0 +1,34 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_nsid_attrs.in; do not edit. */
+#if !(defined(NETNSA_NSID_NOT_ASSIGNED) || (defined(HAVE_DECL_NETNSA_NSID_NOT_ASSIGNED) && HAVE_DECL_NETNSA_NSID_NOT_ASSIGNED))
+# define NETNSA_NSID_NOT_ASSIGNED -1
+#endif
+#if !(defined(NETNSA_NONE) || (defined(HAVE_DECL_NETNSA_NONE) && HAVE_DECL_NETNSA_NONE))
+# define NETNSA_NONE 0
+#endif
+#if !(defined(NETNSA_NSID) || (defined(HAVE_DECL_NETNSA_NSID) && HAVE_DECL_NETNSA_NSID))
+# define NETNSA_NSID 1
+#endif
+#if !(defined(NETNSA_PID) || (defined(HAVE_DECL_NETNSA_PID) && HAVE_DECL_NETNSA_PID))
+# define NETNSA_PID 2
+#endif
+#if !(defined(NETNSA_FD) || (defined(HAVE_DECL_NETNSA_FD) && HAVE_DECL_NETNSA_FD))
+# define NETNSA_FD 3
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_nsid_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_nsid_attrs[] = {
+ XLAT(NETNSA_NSID_NOT_ASSIGNED),
+ XLAT(NETNSA_NONE),
+ XLAT(NETNSA_NSID),
+ XLAT(NETNSA_PID),
+ XLAT(NETNSA_FD),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_nsid_attrs.in b/xlat/rtnl_nsid_attrs.in
new file mode 100644
index 0000000..f5b01bf
--- /dev/null
+++ b/xlat/rtnl_nsid_attrs.in
@@ -0,0 +1,5 @@
+NETNSA_NSID_NOT_ASSIGNED	-1
+NETNSA_NONE			0
+NETNSA_NSID			1
+NETNSA_PID			2
+NETNSA_FD			3
diff --git a/xlat/rtnl_route_attrs.h b/xlat/rtnl_route_attrs.h
new file mode 100644
index 0000000..82b5e1f
--- /dev/null
+++ b/xlat/rtnl_route_attrs.h
@@ -0,0 +1,122 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_route_attrs.in; do not edit. */
+#if !(defined(RTA_UNSPEC) || (defined(HAVE_DECL_RTA_UNSPEC) && HAVE_DECL_RTA_UNSPEC))
+# define RTA_UNSPEC 0
+#endif
+#if !(defined(RTA_DST) || (defined(HAVE_DECL_RTA_DST) && HAVE_DECL_RTA_DST))
+# define RTA_DST 1
+#endif
+#if !(defined(RTA_SRC) || (defined(HAVE_DECL_RTA_SRC) && HAVE_DECL_RTA_SRC))
+# define RTA_SRC 2
+#endif
+#if !(defined(RTA_IIF) || (defined(HAVE_DECL_RTA_IIF) && HAVE_DECL_RTA_IIF))
+# define RTA_IIF 3
+#endif
+#if !(defined(RTA_OIF) || (defined(HAVE_DECL_RTA_OIF) && HAVE_DECL_RTA_OIF))
+# define RTA_OIF 4
+#endif
+#if !(defined(RTA_GATEWAY) || (defined(HAVE_DECL_RTA_GATEWAY) && HAVE_DECL_RTA_GATEWAY))
+# define RTA_GATEWAY 5
+#endif
+#if !(defined(RTA_PRIORITY) || (defined(HAVE_DECL_RTA_PRIORITY) && HAVE_DECL_RTA_PRIORITY))
+# define RTA_PRIORITY 6
+#endif
+#if !(defined(RTA_PREFSRC) || (defined(HAVE_DECL_RTA_PREFSRC) && HAVE_DECL_RTA_PREFSRC))
+# define RTA_PREFSRC 7
+#endif
+#if !(defined(RTA_METRICS) || (defined(HAVE_DECL_RTA_METRICS) && HAVE_DECL_RTA_METRICS))
+# define RTA_METRICS 8
+#endif
+#if !(defined(RTA_MULTIPATH) || (defined(HAVE_DECL_RTA_MULTIPATH) && HAVE_DECL_RTA_MULTIPATH))
+# define RTA_MULTIPATH 9
+#endif
+#if !(defined(RTA_PROTOINFO) || (defined(HAVE_DECL_RTA_PROTOINFO) && HAVE_DECL_RTA_PROTOINFO))
+# define RTA_PROTOINFO 10
+#endif
+#if !(defined(RTA_FLOW) || (defined(HAVE_DECL_RTA_FLOW) && HAVE_DECL_RTA_FLOW))
+# define RTA_FLOW 11
+#endif
+#if !(defined(RTA_CACHEINFO) || (defined(HAVE_DECL_RTA_CACHEINFO) && HAVE_DECL_RTA_CACHEINFO))
+# define RTA_CACHEINFO 12
+#endif
+#if !(defined(RTA_SESSION) || (defined(HAVE_DECL_RTA_SESSION) && HAVE_DECL_RTA_SESSION))
+# define RTA_SESSION 13
+#endif
+#if !(defined(RTA_MP_ALGO) || (defined(HAVE_DECL_RTA_MP_ALGO) && HAVE_DECL_RTA_MP_ALGO))
+# define RTA_MP_ALGO 14
+#endif
+#if !(defined(RTA_TABLE) || (defined(HAVE_DECL_RTA_TABLE) && HAVE_DECL_RTA_TABLE))
+# define RTA_TABLE 15
+#endif
+#if !(defined(RTA_MARK) || (defined(HAVE_DECL_RTA_MARK) && HAVE_DECL_RTA_MARK))
+# define RTA_MARK 16
+#endif
+#if !(defined(RTA_MFC_STATS) || (defined(HAVE_DECL_RTA_MFC_STATS) && HAVE_DECL_RTA_MFC_STATS))
+# define RTA_MFC_STATS 17
+#endif
+#if !(defined(RTA_VIA) || (defined(HAVE_DECL_RTA_VIA) && HAVE_DECL_RTA_VIA))
+# define RTA_VIA 18
+#endif
+#if !(defined(RTA_NEWDST) || (defined(HAVE_DECL_RTA_NEWDST) && HAVE_DECL_RTA_NEWDST))
+# define RTA_NEWDST 19
+#endif
+#if !(defined(RTA_PREF) || (defined(HAVE_DECL_RTA_PREF) && HAVE_DECL_RTA_PREF))
+# define RTA_PREF 20
+#endif
+#if !(defined(RTA_ENCAP_TYPE) || (defined(HAVE_DECL_RTA_ENCAP_TYPE) && HAVE_DECL_RTA_ENCAP_TYPE))
+# define RTA_ENCAP_TYPE 21
+#endif
+#if !(defined(RTA_ENCAP) || (defined(HAVE_DECL_RTA_ENCAP) && HAVE_DECL_RTA_ENCAP))
+# define RTA_ENCAP 22
+#endif
+#if !(defined(RTA_EXPIRES) || (defined(HAVE_DECL_RTA_EXPIRES) && HAVE_DECL_RTA_EXPIRES))
+# define RTA_EXPIRES 23
+#endif
+#if !(defined(RTA_PAD) || (defined(HAVE_DECL_RTA_PAD) && HAVE_DECL_RTA_PAD))
+# define RTA_PAD 24
+#endif
+#if !(defined(RTA_UID) || (defined(HAVE_DECL_RTA_UID) && HAVE_DECL_RTA_UID))
+# define RTA_UID 25
+#endif
+#if !(defined(RTA_TTL_PROPAGATE) || (defined(HAVE_DECL_RTA_TTL_PROPAGATE) && HAVE_DECL_RTA_TTL_PROPAGATE))
+# define RTA_TTL_PROPAGATE 26
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_route_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_route_attrs[] = {
+ XLAT(RTA_UNSPEC),
+ XLAT(RTA_DST),
+ XLAT(RTA_SRC),
+ XLAT(RTA_IIF),
+ XLAT(RTA_OIF),
+ XLAT(RTA_GATEWAY),
+ XLAT(RTA_PRIORITY),
+ XLAT(RTA_PREFSRC),
+ XLAT(RTA_METRICS),
+ XLAT(RTA_MULTIPATH),
+ XLAT(RTA_PROTOINFO),
+ XLAT(RTA_FLOW),
+ XLAT(RTA_CACHEINFO),
+ XLAT(RTA_SESSION),
+ XLAT(RTA_MP_ALGO),
+ XLAT(RTA_TABLE),
+ XLAT(RTA_MARK),
+ XLAT(RTA_MFC_STATS),
+ XLAT(RTA_VIA),
+ XLAT(RTA_NEWDST),
+ XLAT(RTA_PREF),
+ XLAT(RTA_ENCAP_TYPE),
+ XLAT(RTA_ENCAP),
+ XLAT(RTA_EXPIRES),
+ XLAT(RTA_PAD),
+ XLAT(RTA_UID),
+ XLAT(RTA_TTL_PROPAGATE),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_route_attrs.in b/xlat/rtnl_route_attrs.in
new file mode 100644
index 0000000..f5fa559
--- /dev/null
+++ b/xlat/rtnl_route_attrs.in
@@ -0,0 +1,27 @@
+RTA_UNSPEC		0
+RTA_DST			1
+RTA_SRC			2
+RTA_IIF			3
+RTA_OIF			4
+RTA_GATEWAY		5
+RTA_PRIORITY		6
+RTA_PREFSRC		7
+RTA_METRICS		8
+RTA_MULTIPATH		9
+RTA_PROTOINFO		10
+RTA_FLOW		11
+RTA_CACHEINFO		12
+RTA_SESSION		13
+RTA_MP_ALGO		14
+RTA_TABLE		15
+RTA_MARK		16
+RTA_MFC_STATS		17
+RTA_VIA			18
+RTA_NEWDST		19
+RTA_PREF		20
+RTA_ENCAP_TYPE		21
+RTA_ENCAP		22
+RTA_EXPIRES		23
+RTA_PAD			24
+RTA_UID			25
+RTA_TTL_PROPAGATE	26
diff --git a/xlat/rtnl_rta_metrics_attrs.h b/xlat/rtnl_rta_metrics_attrs.h
new file mode 100644
index 0000000..b395ca3
--- /dev/null
+++ b/xlat/rtnl_rta_metrics_attrs.h
@@ -0,0 +1,82 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_rta_metrics_attrs.in; do not edit. */
+#if !(defined(RTAX_UNSPEC) || (defined(HAVE_DECL_RTAX_UNSPEC) && HAVE_DECL_RTAX_UNSPEC))
+# define RTAX_UNSPEC 0
+#endif
+#if !(defined(RTAX_LOCK) || (defined(HAVE_DECL_RTAX_LOCK) && HAVE_DECL_RTAX_LOCK))
+# define RTAX_LOCK 1
+#endif
+#if !(defined(RTAX_MTU) || (defined(HAVE_DECL_RTAX_MTU) && HAVE_DECL_RTAX_MTU))
+# define RTAX_MTU 2
+#endif
+#if !(defined(RTAX_WINDOW) || (defined(HAVE_DECL_RTAX_WINDOW) && HAVE_DECL_RTAX_WINDOW))
+# define RTAX_WINDOW 3
+#endif
+#if !(defined(RTAX_RTT) || (defined(HAVE_DECL_RTAX_RTT) && HAVE_DECL_RTAX_RTT))
+# define RTAX_RTT 4
+#endif
+#if !(defined(RTAX_RTTVAR) || (defined(HAVE_DECL_RTAX_RTTVAR) && HAVE_DECL_RTAX_RTTVAR))
+# define RTAX_RTTVAR 5
+#endif
+#if !(defined(RTAX_SSTHRESH) || (defined(HAVE_DECL_RTAX_SSTHRESH) && HAVE_DECL_RTAX_SSTHRESH))
+# define RTAX_SSTHRESH 6
+#endif
+#if !(defined(RTAX_CWND) || (defined(HAVE_DECL_RTAX_CWND) && HAVE_DECL_RTAX_CWND))
+# define RTAX_CWND 7
+#endif
+#if !(defined(RTAX_ADVMSS) || (defined(HAVE_DECL_RTAX_ADVMSS) && HAVE_DECL_RTAX_ADVMSS))
+# define RTAX_ADVMSS 8
+#endif
+#if !(defined(RTAX_REORDERING) || (defined(HAVE_DECL_RTAX_REORDERING) && HAVE_DECL_RTAX_REORDERING))
+# define RTAX_REORDERING 9
+#endif
+#if !(defined(RTAX_HOPLIMIT) || (defined(HAVE_DECL_RTAX_HOPLIMIT) && HAVE_DECL_RTAX_HOPLIMIT))
+# define RTAX_HOPLIMIT 10
+#endif
+#if !(defined(RTAX_INITCWND) || (defined(HAVE_DECL_RTAX_INITCWND) && HAVE_DECL_RTAX_INITCWND))
+# define RTAX_INITCWND 11
+#endif
+#if !(defined(RTAX_FEATURES) || (defined(HAVE_DECL_RTAX_FEATURES) && HAVE_DECL_RTAX_FEATURES))
+# define RTAX_FEATURES 12
+#endif
+#if !(defined(RTAX_RTO_MIN) || (defined(HAVE_DECL_RTAX_RTO_MIN) && HAVE_DECL_RTAX_RTO_MIN))
+# define RTAX_RTO_MIN 13
+#endif
+#if !(defined(RTAX_INITRWND) || (defined(HAVE_DECL_RTAX_INITRWND) && HAVE_DECL_RTAX_INITRWND))
+# define RTAX_INITRWND 14
+#endif
+#if !(defined(RTAX_QUICKACK) || (defined(HAVE_DECL_RTAX_QUICKACK) && HAVE_DECL_RTAX_QUICKACK))
+# define RTAX_QUICKACK 15
+#endif
+#if !(defined(RTAX_CC_ALGO) || (defined(HAVE_DECL_RTAX_CC_ALGO) && HAVE_DECL_RTAX_CC_ALGO))
+# define RTAX_CC_ALGO 16
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_rta_metrics_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_rta_metrics_attrs[] = {
+ XLAT(RTAX_UNSPEC),
+ XLAT(RTAX_LOCK),
+ XLAT(RTAX_MTU),
+ XLAT(RTAX_WINDOW),
+ XLAT(RTAX_RTT),
+ XLAT(RTAX_RTTVAR),
+ XLAT(RTAX_SSTHRESH),
+ XLAT(RTAX_CWND),
+ XLAT(RTAX_ADVMSS),
+ XLAT(RTAX_REORDERING),
+ XLAT(RTAX_HOPLIMIT),
+ XLAT(RTAX_INITCWND),
+ XLAT(RTAX_FEATURES),
+ XLAT(RTAX_RTO_MIN),
+ XLAT(RTAX_INITRWND),
+ XLAT(RTAX_QUICKACK),
+ XLAT(RTAX_CC_ALGO),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_rta_metrics_attrs.in b/xlat/rtnl_rta_metrics_attrs.in
new file mode 100644
index 0000000..2a68333
--- /dev/null
+++ b/xlat/rtnl_rta_metrics_attrs.in
@@ -0,0 +1,17 @@
+RTAX_UNSPEC	0
+RTAX_LOCK	1
+RTAX_MTU	2
+RTAX_WINDOW	3
+RTAX_RTT	4
+RTAX_RTTVAR	5
+RTAX_SSTHRESH	6
+RTAX_CWND	7
+RTAX_ADVMSS	8
+RTAX_REORDERING	9
+RTAX_HOPLIMIT	10
+RTAX_INITCWND	11
+RTAX_FEATURES	12
+RTAX_RTO_MIN	13
+RTAX_INITRWND	14
+RTAX_QUICKACK	15
+RTAX_CC_ALGO	16
diff --git a/xlat/rtnl_rule_attrs.h b/xlat/rtnl_rule_attrs.h
new file mode 100644
index 0000000..c9680ec
--- /dev/null
+++ b/xlat/rtnl_rule_attrs.h
@@ -0,0 +1,98 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_rule_attrs.in; do not edit. */
+#if !(defined(FRA_UNSPEC) || (defined(HAVE_DECL_FRA_UNSPEC) && HAVE_DECL_FRA_UNSPEC))
+# define FRA_UNSPEC 0
+#endif
+#if !(defined(FRA_DST) || (defined(HAVE_DECL_FRA_DST) && HAVE_DECL_FRA_DST))
+# define FRA_DST 1
+#endif
+#if !(defined(FRA_SRC) || (defined(HAVE_DECL_FRA_SRC) && HAVE_DECL_FRA_SRC))
+# define FRA_SRC 2
+#endif
+#if !(defined(FRA_IIFNAME) || (defined(HAVE_DECL_FRA_IIFNAME) && HAVE_DECL_FRA_IIFNAME))
+# define FRA_IIFNAME 3
+#endif
+#if !(defined(FRA_GOTO) || (defined(HAVE_DECL_FRA_GOTO) && HAVE_DECL_FRA_GOTO))
+# define FRA_GOTO 4
+#endif
+#if !(defined(FRA_UNUSED2) || (defined(HAVE_DECL_FRA_UNUSED2) && HAVE_DECL_FRA_UNUSED2))
+# define FRA_UNUSED2 5
+#endif
+#if !(defined(FRA_PRIORITY) || (defined(HAVE_DECL_FRA_PRIORITY) && HAVE_DECL_FRA_PRIORITY))
+# define FRA_PRIORITY 6
+#endif
+#if !(defined(FRA_UNUSED3) || (defined(HAVE_DECL_FRA_UNUSED3) && HAVE_DECL_FRA_UNUSED3))
+# define FRA_UNUSED3 7
+#endif
+#if !(defined(FRA_UNUSED4) || (defined(HAVE_DECL_FRA_UNUSED4) && HAVE_DECL_FRA_UNUSED4))
+# define FRA_UNUSED4 8
+#endif
+#if !(defined(FRA_UNUSED5) || (defined(HAVE_DECL_FRA_UNUSED5) && HAVE_DECL_FRA_UNUSED5))
+# define FRA_UNUSED5 9
+#endif
+#if !(defined(FRA_FWMARK) || (defined(HAVE_DECL_FRA_FWMARK) && HAVE_DECL_FRA_FWMARK))
+# define FRA_FWMARK 10
+#endif
+#if !(defined(FRA_FLOW) || (defined(HAVE_DECL_FRA_FLOW) && HAVE_DECL_FRA_FLOW))
+# define FRA_FLOW 11
+#endif
+#if !(defined(FRA_TUN_ID) || (defined(HAVE_DECL_FRA_TUN_ID) && HAVE_DECL_FRA_TUN_ID))
+# define FRA_TUN_ID 12
+#endif
+#if !(defined(FRA_SUPPRESS_IFGROUP) || (defined(HAVE_DECL_FRA_SUPPRESS_IFGROUP) && HAVE_DECL_FRA_SUPPRESS_IFGROUP))
+# define FRA_SUPPRESS_IFGROUP 13
+#endif
+#if !(defined(FRA_SUPPRESS_PREFIXLEN) || (defined(HAVE_DECL_FRA_SUPPRESS_PREFIXLEN) && HAVE_DECL_FRA_SUPPRESS_PREFIXLEN))
+# define FRA_SUPPRESS_PREFIXLEN 14
+#endif
+#if !(defined(FRA_TABLE) || (defined(HAVE_DECL_FRA_TABLE) && HAVE_DECL_FRA_TABLE))
+# define FRA_TABLE 15
+#endif
+#if !(defined(FRA_FWMASK) || (defined(HAVE_DECL_FRA_FWMASK) && HAVE_DECL_FRA_FWMASK))
+# define FRA_FWMASK 16
+#endif
+#if !(defined(FRA_OIFNAME) || (defined(HAVE_DECL_FRA_OIFNAME) && HAVE_DECL_FRA_OIFNAME))
+# define FRA_OIFNAME 17
+#endif
+#if !(defined(FRA_PAD) || (defined(HAVE_DECL_FRA_PAD) && HAVE_DECL_FRA_PAD))
+# define FRA_PAD 18
+#endif
+#if !(defined(FRA_L3MDEV) || (defined(HAVE_DECL_FRA_L3MDEV) && HAVE_DECL_FRA_L3MDEV))
+# define FRA_L3MDEV 19
+#endif
+#if !(defined(FRA_UID_RANGE) || (defined(HAVE_DECL_FRA_UID_RANGE) && HAVE_DECL_FRA_UID_RANGE))
+# define FRA_UID_RANGE 20
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_rule_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_rule_attrs[] = {
+ XLAT(FRA_UNSPEC),
+ XLAT(FRA_DST),
+ XLAT(FRA_SRC),
+ XLAT(FRA_IIFNAME),
+ XLAT(FRA_GOTO),
+ XLAT(FRA_UNUSED2),
+ XLAT(FRA_PRIORITY),
+ XLAT(FRA_UNUSED3),
+ XLAT(FRA_UNUSED4),
+ XLAT(FRA_UNUSED5),
+ XLAT(FRA_FWMARK),
+ XLAT(FRA_FLOW),
+ XLAT(FRA_TUN_ID),
+ XLAT(FRA_SUPPRESS_IFGROUP),
+ XLAT(FRA_SUPPRESS_PREFIXLEN),
+ XLAT(FRA_TABLE),
+ XLAT(FRA_FWMASK),
+ XLAT(FRA_OIFNAME),
+ XLAT(FRA_PAD),
+ XLAT(FRA_L3MDEV),
+ XLAT(FRA_UID_RANGE),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_rule_attrs.in b/xlat/rtnl_rule_attrs.in
new file mode 100644
index 0000000..971f118
--- /dev/null
+++ b/xlat/rtnl_rule_attrs.in
@@ -0,0 +1,21 @@
+FRA_UNSPEC		0
+FRA_DST			1
+FRA_SRC			2
+FRA_IIFNAME		3
+FRA_GOTO		4
+FRA_UNUSED2		5
+FRA_PRIORITY		6
+FRA_UNUSED3		7
+FRA_UNUSED4		8
+FRA_UNUSED5		9
+FRA_FWMARK		10
+FRA_FLOW		11
+FRA_TUN_ID		12
+FRA_SUPPRESS_IFGROUP	13
+FRA_SUPPRESS_PREFIXLEN	14
+FRA_TABLE		15
+FRA_FWMASK		16
+FRA_OIFNAME		17
+FRA_PAD			18
+FRA_L3MDEV		19
+FRA_UID_RANGE		20
diff --git a/xlat/rtnl_tc_action_attrs.h b/xlat/rtnl_tc_action_attrs.h
new file mode 100644
index 0000000..d950089
--- /dev/null
+++ b/xlat/rtnl_tc_action_attrs.h
@@ -0,0 +1,42 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_tc_action_attrs.in; do not edit. */
+#if !(defined(TCA_ACT_UNSPEC) || (defined(HAVE_DECL_TCA_ACT_UNSPEC) && HAVE_DECL_TCA_ACT_UNSPEC))
+# define TCA_ACT_UNSPEC 0
+#endif
+#if !(defined(TCA_ACT_KIND) || (defined(HAVE_DECL_TCA_ACT_KIND) && HAVE_DECL_TCA_ACT_KIND))
+# define TCA_ACT_KIND 1
+#endif
+#if !(defined(TCA_ACT_OPTIONS) || (defined(HAVE_DECL_TCA_ACT_OPTIONS) && HAVE_DECL_TCA_ACT_OPTIONS))
+# define TCA_ACT_OPTIONS 2
+#endif
+#if !(defined(TCA_ACT_INDEX) || (defined(HAVE_DECL_TCA_ACT_INDEX) && HAVE_DECL_TCA_ACT_INDEX))
+# define TCA_ACT_INDEX 3
+#endif
+#if !(defined(TCA_ACT_STATS) || (defined(HAVE_DECL_TCA_ACT_STATS) && HAVE_DECL_TCA_ACT_STATS))
+# define TCA_ACT_STATS 4
+#endif
+#if !(defined(TCA_ACT_PAD) || (defined(HAVE_DECL_TCA_ACT_PAD) && HAVE_DECL_TCA_ACT_PAD))
+# define TCA_ACT_PAD 5
+#endif
+#if !(defined(TCA_ACT_COOKIE) || (defined(HAVE_DECL_TCA_ACT_COOKIE) && HAVE_DECL_TCA_ACT_COOKIE))
+# define TCA_ACT_COOKIE 6
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_tc_action_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_tc_action_attrs[] = {
+ XLAT(TCA_ACT_UNSPEC),
+ XLAT(TCA_ACT_KIND),
+ XLAT(TCA_ACT_OPTIONS),
+ XLAT(TCA_ACT_INDEX),
+ XLAT(TCA_ACT_STATS),
+ XLAT(TCA_ACT_PAD),
+ XLAT(TCA_ACT_COOKIE),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_tc_action_attrs.in b/xlat/rtnl_tc_action_attrs.in
new file mode 100644
index 0000000..ebb3dd4
--- /dev/null
+++ b/xlat/rtnl_tc_action_attrs.in
@@ -0,0 +1,7 @@
+TCA_ACT_UNSPEC		0
+TCA_ACT_KIND		1
+TCA_ACT_OPTIONS		2
+TCA_ACT_INDEX		3
+TCA_ACT_STATS		4
+TCA_ACT_PAD		5
+TCA_ACT_COOKIE		6
diff --git a/xlat/rtnl_tc_attrs.h b/xlat/rtnl_tc_attrs.h
new file mode 100644
index 0000000..506b5eb
--- /dev/null
+++ b/xlat/rtnl_tc_attrs.h
@@ -0,0 +1,62 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_tc_attrs.in; do not edit. */
+#if !(defined(TCA_UNSPEC) || (defined(HAVE_DECL_TCA_UNSPEC) && HAVE_DECL_TCA_UNSPEC))
+# define TCA_UNSPEC 0
+#endif
+#if !(defined(TCA_KIND) || (defined(HAVE_DECL_TCA_KIND) && HAVE_DECL_TCA_KIND))
+# define TCA_KIND 1
+#endif
+#if !(defined(TCA_OPTIONS) || (defined(HAVE_DECL_TCA_OPTIONS) && HAVE_DECL_TCA_OPTIONS))
+# define TCA_OPTIONS 2
+#endif
+#if !(defined(TCA_STATS) || (defined(HAVE_DECL_TCA_STATS) && HAVE_DECL_TCA_STATS))
+# define TCA_STATS 3
+#endif
+#if !(defined(TCA_XSTATS) || (defined(HAVE_DECL_TCA_XSTATS) && HAVE_DECL_TCA_XSTATS))
+# define TCA_XSTATS 4
+#endif
+#if !(defined(TCA_RATE) || (defined(HAVE_DECL_TCA_RATE) && HAVE_DECL_TCA_RATE))
+# define TCA_RATE 5
+#endif
+#if !(defined(TCA_FCNT) || (defined(HAVE_DECL_TCA_FCNT) && HAVE_DECL_TCA_FCNT))
+# define TCA_FCNT 6
+#endif
+#if !(defined(TCA_STATS2) || (defined(HAVE_DECL_TCA_STATS2) && HAVE_DECL_TCA_STATS2))
+# define TCA_STATS2 7
+#endif
+#if !(defined(TCA_STAB) || (defined(HAVE_DECL_TCA_STAB) && HAVE_DECL_TCA_STAB))
+# define TCA_STAB 8
+#endif
+#if !(defined(TCA_PAD) || (defined(HAVE_DECL_TCA_PAD) && HAVE_DECL_TCA_PAD))
+# define TCA_PAD 9
+#endif
+#if !(defined(TCA_DUMP_INVISIBLE) || (defined(HAVE_DECL_TCA_DUMP_INVISIBLE) && HAVE_DECL_TCA_DUMP_INVISIBLE))
+# define TCA_DUMP_INVISIBLE 10
+#endif
+#if !(defined(TCA_CHAIN) || (defined(HAVE_DECL_TCA_CHAIN) && HAVE_DECL_TCA_CHAIN))
+# define TCA_CHAIN 11
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat rtnl_tc_attrs in mpers mode
+
+#else
+
+static
+const struct xlat rtnl_tc_attrs[] = {
+ XLAT(TCA_UNSPEC),
+ XLAT(TCA_KIND),
+ XLAT(TCA_OPTIONS),
+ XLAT(TCA_STATS),
+ XLAT(TCA_XSTATS),
+ XLAT(TCA_RATE),
+ XLAT(TCA_FCNT),
+ XLAT(TCA_STATS2),
+ XLAT(TCA_STAB),
+ XLAT(TCA_PAD),
+ XLAT(TCA_DUMP_INVISIBLE),
+ XLAT(TCA_CHAIN),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/rtnl_tc_attrs.in b/xlat/rtnl_tc_attrs.in
new file mode 100644
index 0000000..27f39e9
--- /dev/null
+++ b/xlat/rtnl_tc_attrs.in
@@ -0,0 +1,12 @@
+TCA_UNSPEC		0
+TCA_KIND		1
+TCA_OPTIONS		2
+TCA_STATS		3
+TCA_XSTATS		4
+TCA_RATE		5
+TCA_FCNT		6
+TCA_STATS2		7
+TCA_STAB		8
+TCA_PAD			9
+TCA_DUMP_INVISIBLE	10
+TCA_CHAIN		11
diff --git a/xlat/rwf_flags.h b/xlat/rwf_flags.h
index cd5cfdc..ffcbfc1 100644
--- a/xlat/rwf_flags.h
+++ b/xlat/rwf_flags.h
@@ -8,6 +8,9 @@
 #if !(defined(RWF_SYNC) || (defined(HAVE_DECL_RWF_SYNC) && HAVE_DECL_RWF_SYNC))
 # define RWF_SYNC 4
 #endif
+#if !(defined(RWF_NOWAIT) || (defined(HAVE_DECL_RWF_NOWAIT) && HAVE_DECL_RWF_NOWAIT))
+# define RWF_NOWAIT 8
+#endif
 
 #ifdef IN_MPERS
 
@@ -20,6 +23,7 @@
  XLAT(RWF_HIPRI),
  XLAT(RWF_DSYNC),
  XLAT(RWF_SYNC),
+ XLAT(RWF_NOWAIT),
  XLAT_END
 };
 
diff --git a/xlat/rwf_flags.in b/xlat/rwf_flags.in
index 2e75445..34b2eb1 100644
--- a/xlat/rwf_flags.in
+++ b/xlat/rwf_flags.in
@@ -1,3 +1,4 @@
 RWF_HIPRI	1
 RWF_DSYNC	2
 RWF_SYNC	4
+RWF_NOWAIT	8
diff --git a/xlat/scmvals.h b/xlat/scmvals.h
index 5f7c66a..da66af7 100644
--- a/xlat/scmvals.h
+++ b/xlat/scmvals.h
@@ -53,6 +53,15 @@
 #  define SCM_TIMESTAMPING_OPT_STATS 54
 # endif
 #endif
+#ifndef SCM_TIMESTAMPING_PKTINFO
+# if defined HPPA
+#  define SCM_TIMESTAMPING_PKTINFO 0x4033
+# elif defined SPARC || defined SPARC64
+#  define SCM_TIMESTAMPING_PKTINFO 0x003c
+# else
+#  define SCM_TIMESTAMPING_PKTINFO 58
+# endif
+#endif
 
 #ifdef IN_MPERS
 
@@ -130,6 +139,19 @@
 #if defined(SCM_TIMESTAMPING_OPT_STATS) || (defined(HAVE_DECL_SCM_TIMESTAMPING_OPT_STATS) && HAVE_DECL_SCM_TIMESTAMPING_OPT_STATS)
   XLAT(SCM_TIMESTAMPING_OPT_STATS),
 #endif
+
+#ifndef SCM_TIMESTAMPING_PKTINFO
+# if defined HPPA
+#  define SCM_TIMESTAMPING_PKTINFO 0x4033
+# elif defined SPARC || defined SPARC64
+#  define SCM_TIMESTAMPING_PKTINFO 0x003c
+# else
+#  define SCM_TIMESTAMPING_PKTINFO 58
+# endif
+#endif
+#if defined(SCM_TIMESTAMPING_PKTINFO) || (defined(HAVE_DECL_SCM_TIMESTAMPING_PKTINFO) && HAVE_DECL_SCM_TIMESTAMPING_PKTINFO)
+  XLAT(SCM_TIMESTAMPING_PKTINFO),
+#endif
  XLAT_END
 };
 
diff --git a/xlat/scmvals.in b/xlat/scmvals.in
index 699068f..ae9999c 100644
--- a/xlat/scmvals.in
+++ b/xlat/scmvals.in
@@ -56,3 +56,14 @@
 # endif
 #endif
 SCM_TIMESTAMPING_OPT_STATS
+
+#ifndef SCM_TIMESTAMPING_PKTINFO
+# if defined HPPA
+#  define SCM_TIMESTAMPING_PKTINFO 0x4033
+# elif defined SPARC || defined SPARC64
+#  define SCM_TIMESTAMPING_PKTINFO 0x003c
+# else
+#  define SCM_TIMESTAMPING_PKTINFO 58
+# endif
+#endif
+SCM_TIMESTAMPING_PKTINFO
diff --git a/xlat/skf_ad.h b/xlat/skf_ad.h
new file mode 100644
index 0000000..23b157f
--- /dev/null
+++ b/xlat/skf_ad.h
@@ -0,0 +1,78 @@
+/* Generated by ./xlat/gen.sh from ./xlat/skf_ad.in; do not edit. */
+#if !(defined(SKF_AD_PROTOCOL) || (defined(HAVE_DECL_SKF_AD_PROTOCOL) && HAVE_DECL_SKF_AD_PROTOCOL))
+# define SKF_AD_PROTOCOL 0
+#endif
+#if !(defined(SKF_AD_PKTTYPE) || (defined(HAVE_DECL_SKF_AD_PKTTYPE) && HAVE_DECL_SKF_AD_PKTTYPE))
+# define SKF_AD_PKTTYPE 4
+#endif
+#if !(defined(SKF_AD_IFINDEX) || (defined(HAVE_DECL_SKF_AD_IFINDEX) && HAVE_DECL_SKF_AD_IFINDEX))
+# define SKF_AD_IFINDEX 8
+#endif
+#if !(defined(SKF_AD_NLATTR) || (defined(HAVE_DECL_SKF_AD_NLATTR) && HAVE_DECL_SKF_AD_NLATTR))
+# define SKF_AD_NLATTR 12
+#endif
+#if !(defined(SKF_AD_NLATTR_NEST) || (defined(HAVE_DECL_SKF_AD_NLATTR_NEST) && HAVE_DECL_SKF_AD_NLATTR_NEST))
+# define SKF_AD_NLATTR_NEST 16
+#endif
+#if !(defined(SKF_AD_MARK) || (defined(HAVE_DECL_SKF_AD_MARK) && HAVE_DECL_SKF_AD_MARK))
+# define SKF_AD_MARK 20
+#endif
+#if !(defined(SKF_AD_QUEUE) || (defined(HAVE_DECL_SKF_AD_QUEUE) && HAVE_DECL_SKF_AD_QUEUE))
+# define SKF_AD_QUEUE 24
+#endif
+#if !(defined(SKF_AD_HATYPE) || (defined(HAVE_DECL_SKF_AD_HATYPE) && HAVE_DECL_SKF_AD_HATYPE))
+# define SKF_AD_HATYPE 28
+#endif
+#if !(defined(SKF_AD_RXHASH) || (defined(HAVE_DECL_SKF_AD_RXHASH) && HAVE_DECL_SKF_AD_RXHASH))
+# define SKF_AD_RXHASH 32
+#endif
+#if !(defined(SKF_AD_CPU) || (defined(HAVE_DECL_SKF_AD_CPU) && HAVE_DECL_SKF_AD_CPU))
+# define SKF_AD_CPU 36
+#endif
+#if !(defined(SKF_AD_ALU_XOR_X) || (defined(HAVE_DECL_SKF_AD_ALU_XOR_X) && HAVE_DECL_SKF_AD_ALU_XOR_X))
+# define SKF_AD_ALU_XOR_X 40
+#endif
+#if !(defined(SKF_AD_VLAN_TAG) || (defined(HAVE_DECL_SKF_AD_VLAN_TAG) && HAVE_DECL_SKF_AD_VLAN_TAG))
+# define SKF_AD_VLAN_TAG 44
+#endif
+#if !(defined(SKF_AD_VLAN_TAG_PRESENT) || (defined(HAVE_DECL_SKF_AD_VLAN_TAG_PRESENT) && HAVE_DECL_SKF_AD_VLAN_TAG_PRESENT))
+# define SKF_AD_VLAN_TAG_PRESENT 48
+#endif
+#if !(defined(SKF_AD_PAY_OFFSET) || (defined(HAVE_DECL_SKF_AD_PAY_OFFSET) && HAVE_DECL_SKF_AD_PAY_OFFSET))
+# define SKF_AD_PAY_OFFSET 52
+#endif
+#if !(defined(SKF_AD_RANDOM) || (defined(HAVE_DECL_SKF_AD_RANDOM) && HAVE_DECL_SKF_AD_RANDOM))
+# define SKF_AD_RANDOM 56
+#endif
+#if !(defined(SKF_AD_VLAN_TPID) || (defined(HAVE_DECL_SKF_AD_VLAN_TPID) && HAVE_DECL_SKF_AD_VLAN_TPID))
+# define SKF_AD_VLAN_TPID 60
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat skf_ad in mpers mode
+
+#else
+
+static
+const struct xlat skf_ad[] = {
+ XLAT(SKF_AD_PROTOCOL),
+ XLAT(SKF_AD_PKTTYPE),
+ XLAT(SKF_AD_IFINDEX),
+ XLAT(SKF_AD_NLATTR),
+ XLAT(SKF_AD_NLATTR_NEST),
+ XLAT(SKF_AD_MARK),
+ XLAT(SKF_AD_QUEUE),
+ XLAT(SKF_AD_HATYPE),
+ XLAT(SKF_AD_RXHASH),
+ XLAT(SKF_AD_CPU),
+ XLAT(SKF_AD_ALU_XOR_X),
+ XLAT(SKF_AD_VLAN_TAG),
+ XLAT(SKF_AD_VLAN_TAG_PRESENT),
+ XLAT(SKF_AD_PAY_OFFSET),
+ XLAT(SKF_AD_RANDOM),
+ XLAT(SKF_AD_VLAN_TPID),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/skf_ad.in b/xlat/skf_ad.in
new file mode 100644
index 0000000..d083c63
--- /dev/null
+++ b/xlat/skf_ad.in
@@ -0,0 +1,16 @@
+SKF_AD_PROTOCOL 0
+SKF_AD_PKTTYPE 	4
+SKF_AD_IFINDEX 	8
+SKF_AD_NLATTR	12
+SKF_AD_NLATTR_NEST	16
+SKF_AD_MARK 	20
+SKF_AD_QUEUE	24
+SKF_AD_HATYPE	28
+SKF_AD_RXHASH	32
+SKF_AD_CPU	36
+SKF_AD_ALU_XOR_X	40
+SKF_AD_VLAN_TAG	44
+SKF_AD_VLAN_TAG_PRESENT 48
+SKF_AD_PAY_OFFSET	52
+SKF_AD_RANDOM	56
+SKF_AD_VLAN_TPID	60
diff --git a/xlat/smc_link_group_roles.h b/xlat/smc_link_group_roles.h
new file mode 100644
index 0000000..a52e853
--- /dev/null
+++ b/xlat/smc_link_group_roles.h
@@ -0,0 +1,22 @@
+/* Generated by ./xlat/gen.sh from ./xlat/smc_link_group_roles.in; do not edit. */
+#if !(defined(SMC_CLNT) || (defined(HAVE_DECL_SMC_CLNT) && HAVE_DECL_SMC_CLNT))
+# define SMC_CLNT 0
+#endif
+#if !(defined(SMC_SERV) || (defined(HAVE_DECL_SMC_SERV) && HAVE_DECL_SMC_SERV))
+# define SMC_SERV 1
+#endif
+
+#ifdef IN_MPERS
+
+# error static const struct xlat smc_link_group_roles in mpers mode
+
+#else
+
+static
+const struct xlat smc_link_group_roles[] = {
+ XLAT(SMC_CLNT),
+ XLAT(SMC_SERV),
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/smc_link_group_roles.in b/xlat/smc_link_group_roles.in
new file mode 100644
index 0000000..d1cc06d
--- /dev/null
+++ b/xlat/smc_link_group_roles.in
@@ -0,0 +1,2 @@
+SMC_CLNT	0
+SMC_SERV	1
diff --git a/xlat/sockipv6options.h b/xlat/sockipv6options.h
index dd201a9..f3fa4cc 100644
--- a/xlat/sockipv6options.h
+++ b/xlat/sockipv6options.h
@@ -95,6 +95,27 @@
 #if defined(IPV6_HDRINCL) || (defined(HAVE_DECL_IPV6_HDRINCL) && HAVE_DECL_IPV6_HDRINCL)
   XLAT(IPV6_HDRINCL),
 #endif
+#if defined(MCAST_JOIN_GROUP) || (defined(HAVE_DECL_MCAST_JOIN_GROUP) && HAVE_DECL_MCAST_JOIN_GROUP)
+  XLAT(MCAST_JOIN_GROUP),
+#endif
+#if defined(MCAST_BLOCK_SOURCE) || (defined(HAVE_DECL_MCAST_BLOCK_SOURCE) && HAVE_DECL_MCAST_BLOCK_SOURCE)
+  XLAT(MCAST_BLOCK_SOURCE),
+#endif
+#if defined(MCAST_UNBLOCK_SOURCE) || (defined(HAVE_DECL_MCAST_UNBLOCK_SOURCE) && HAVE_DECL_MCAST_UNBLOCK_SOURCE)
+  XLAT(MCAST_UNBLOCK_SOURCE),
+#endif
+#if defined(MCAST_LEAVE_GROUP) || (defined(HAVE_DECL_MCAST_LEAVE_GROUP) && HAVE_DECL_MCAST_LEAVE_GROUP)
+  XLAT(MCAST_LEAVE_GROUP),
+#endif
+#if defined(MCAST_JOIN_SOURCE_GROUP) || (defined(HAVE_DECL_MCAST_JOIN_SOURCE_GROUP) && HAVE_DECL_MCAST_JOIN_SOURCE_GROUP)
+  XLAT(MCAST_JOIN_SOURCE_GROUP),
+#endif
+#if defined(MCAST_LEAVE_SOURCE_GROUP) || (defined(HAVE_DECL_MCAST_LEAVE_SOURCE_GROUP) && HAVE_DECL_MCAST_LEAVE_SOURCE_GROUP)
+  XLAT(MCAST_LEAVE_SOURCE_GROUP),
+#endif
+#if defined(MCAST_MSFILTER) || (defined(HAVE_DECL_MCAST_MSFILTER) && HAVE_DECL_MCAST_MSFILTER)
+  XLAT(MCAST_MSFILTER),
+#endif
 #if defined(IPV6_RECVPKTINFO) || (defined(HAVE_DECL_IPV6_RECVPKTINFO) && HAVE_DECL_IPV6_RECVPKTINFO)
   XLAT(IPV6_RECVPKTINFO),
 #endif
diff --git a/xlat/sockipv6options.in b/xlat/sockipv6options.in
index 56e2721..76b5e8b 100644
--- a/xlat/sockipv6options.in
+++ b/xlat/sockipv6options.in
@@ -27,6 +27,13 @@
 IPV6_IPSEC_POLICY
 IPV6_XFRM_POLICY
 IPV6_HDRINCL
+MCAST_JOIN_GROUP
+MCAST_BLOCK_SOURCE
+MCAST_UNBLOCK_SOURCE
+MCAST_LEAVE_GROUP
+MCAST_JOIN_SOURCE_GROUP
+MCAST_LEAVE_SOURCE_GROUP
+MCAST_MSFILTER
 IPV6_RECVPKTINFO
 IPV6_PKTINFO
 IPV6_RECVHOPLIMIT
diff --git a/xlat/sockoptions.h b/xlat/sockoptions.h
index 715ffe7..20a7e6d 100644
--- a/xlat/sockoptions.h
+++ b/xlat/sockoptions.h
@@ -182,6 +182,9 @@
 #if defined(SO_COOKIE) || (defined(HAVE_DECL_SO_COOKIE) && HAVE_DECL_SO_COOKIE)
   XLAT(SO_COOKIE),
 #endif
+#if defined(SO_PEERGROUPS) || (defined(HAVE_DECL_SO_PEERGROUPS) && HAVE_DECL_SO_PEERGROUPS)
+  XLAT(SO_PEERGROUPS),
+#endif
 
 #if defined(SO_ALLRAW) || (defined(HAVE_DECL_SO_ALLRAW) && HAVE_DECL_SO_ALLRAW)
   XLAT(SO_ALLRAW),
diff --git a/xlat/sockoptions.in b/xlat/sockoptions.in
index 5a0bb87..2471795 100644
--- a/xlat/sockoptions.in
+++ b/xlat/sockoptions.in
@@ -56,6 +56,7 @@
 SO_MEMINFO
 SO_INCOMING_NAPI_ID
 SO_COOKIE
+SO_PEERGROUPS
 
 SO_ALLRAW
 SO_ICS
diff --git a/xlat/tcp_state_flags.h b/xlat/tcp_state_flags.h
index 265fff3..2062655 100644
--- a/xlat/tcp_state_flags.h
+++ b/xlat/tcp_state_flags.h
@@ -1,12 +1,7 @@
 /* Generated by ./xlat/gen.sh from ./xlat/tcp_state_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#ifndef IN_MPERS
 
-# error static const struct xlat tcp_state_flags in mpers mode
-
-#else
-
-static
 const struct xlat tcp_state_flags[] = {
 /* this file should be included after xlat/tcp_states.h */
 #if defined(TCP_ESTABLISHED) || (defined(HAVE_DECL_TCP_ESTABLISHED) && HAVE_DECL_TCP_ESTABLISHED)
diff --git a/xlat/tcp_states.h b/xlat/tcp_states.h
index cf74abb..3559240 100644
--- a/xlat/tcp_states.h
+++ b/xlat/tcp_states.h
@@ -36,13 +36,8 @@
 # define TCP_NEW_SYN_RECV 12
 #endif
 
-#ifdef IN_MPERS
+#ifndef IN_MPERS
 
-# error static const struct xlat tcp_states in mpers mode
-
-#else
-
-static
 const struct xlat tcp_states[] = {
  XLAT(TCP_ESTABLISHED),
  XLAT(TCP_SYN_SENT),
diff --git a/xlat/uffd_api_features.h b/xlat/uffd_api_features.h
new file mode 100644
index 0000000..5c856f4
--- /dev/null
+++ b/xlat/uffd_api_features.h
@@ -0,0 +1,38 @@
+/* Generated by ./xlat/gen.sh from ./xlat/uffd_api_features.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat uffd_api_features in mpers mode
+
+#else
+
+static
+const struct xlat uffd_api_features[] = {
+#if defined(UFFD_FEATURE_PAGEFAULT_FLAG_WP) || (defined(HAVE_DECL_UFFD_FEATURE_PAGEFAULT_FLAG_WP) && HAVE_DECL_UFFD_FEATURE_PAGEFAULT_FLAG_WP)
+  XLAT_TYPE(uint64_t, UFFD_FEATURE_PAGEFAULT_FLAG_WP),
+#endif
+#if defined(UFFD_FEATURE_EVENT_FORK) || (defined(HAVE_DECL_UFFD_FEATURE_EVENT_FORK) && HAVE_DECL_UFFD_FEATURE_EVENT_FORK)
+  XLAT_TYPE(uint64_t, UFFD_FEATURE_EVENT_FORK),
+#endif
+#if defined(UFFD_FEATURE_EVENT_REMAP) || (defined(HAVE_DECL_UFFD_FEATURE_EVENT_REMAP) && HAVE_DECL_UFFD_FEATURE_EVENT_REMAP)
+  XLAT_TYPE(uint64_t, UFFD_FEATURE_EVENT_REMAP),
+#endif
+#if defined(UFFD_FEATURE_EVENT_REMOVE) || (defined(HAVE_DECL_UFFD_FEATURE_EVENT_REMOVE) && HAVE_DECL_UFFD_FEATURE_EVENT_REMOVE)
+  XLAT_TYPE(uint64_t, UFFD_FEATURE_EVENT_REMOVE),
+#endif
+#if defined(UFFD_FEATURE_MISSING_HUGETLBFS) || (defined(HAVE_DECL_UFFD_FEATURE_MISSING_HUGETLBFS) && HAVE_DECL_UFFD_FEATURE_MISSING_HUGETLBFS)
+  XLAT_TYPE(uint64_t, UFFD_FEATURE_MISSING_HUGETLBFS),
+#endif
+#if defined(UFFD_FEATURE_MISSING_SHMEM) || (defined(HAVE_DECL_UFFD_FEATURE_MISSING_SHMEM) && HAVE_DECL_UFFD_FEATURE_MISSING_SHMEM)
+  XLAT_TYPE(uint64_t, UFFD_FEATURE_MISSING_SHMEM),
+#endif
+#if defined(UFFD_FEATURE_EVENT_UNMAP) || (defined(HAVE_DECL_UFFD_FEATURE_EVENT_UNMAP) && HAVE_DECL_UFFD_FEATURE_EVENT_UNMAP)
+  XLAT_TYPE(uint64_t, UFFD_FEATURE_EVENT_UNMAP),
+#endif
+#if defined(UFFD_FEATURE_EVENT_EXIT) || (defined(HAVE_DECL_UFFD_FEATURE_EVENT_EXIT) && HAVE_DECL_UFFD_FEATURE_EVENT_EXIT)
+  XLAT_TYPE(uint64_t, UFFD_FEATURE_EVENT_EXIT),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/uffd_api_features.in b/xlat/uffd_api_features.in
new file mode 100644
index 0000000..8b1ea97
--- /dev/null
+++ b/xlat/uffd_api_features.in
@@ -0,0 +1,9 @@
+#val_type uint64_t
+UFFD_FEATURE_PAGEFAULT_FLAG_WP
+UFFD_FEATURE_EVENT_FORK
+UFFD_FEATURE_EVENT_REMAP
+UFFD_FEATURE_EVENT_REMOVE
+UFFD_FEATURE_MISSING_HUGETLBFS
+UFFD_FEATURE_MISSING_SHMEM
+UFFD_FEATURE_EVENT_UNMAP
+UFFD_FEATURE_EVENT_EXIT
diff --git a/xlat/xdp_flags.h b/xlat/xdp_flags.h
new file mode 100644
index 0000000..2ebe172
--- /dev/null
+++ b/xlat/xdp_flags.h
@@ -0,0 +1,29 @@
+/* Generated by ./xlat/gen.sh from ./xlat/xdp_flags.in; do not edit. */
+
+#ifdef IN_MPERS
+
+# error static const struct xlat xdp_flags in mpers mode
+
+#else
+
+static
+const struct xlat xdp_flags[] = {
+#if defined(XDP_FLAGS_MODES) || (defined(HAVE_DECL_XDP_FLAGS_MODES) && HAVE_DECL_XDP_FLAGS_MODES)
+  XLAT(XDP_FLAGS_MODES),
+#endif
+#if defined(XDP_FLAGS_UPDATE_IF_NOEXIST) || (defined(HAVE_DECL_XDP_FLAGS_UPDATE_IF_NOEXIST) && HAVE_DECL_XDP_FLAGS_UPDATE_IF_NOEXIST)
+  XLAT(XDP_FLAGS_UPDATE_IF_NOEXIST),
+#endif
+#if defined(XDP_FLAGS_SKB_MODE) || (defined(HAVE_DECL_XDP_FLAGS_SKB_MODE) && HAVE_DECL_XDP_FLAGS_SKB_MODE)
+  XLAT(XDP_FLAGS_SKB_MODE),
+#endif
+#if defined(XDP_FLAGS_DRV_MODE) || (defined(HAVE_DECL_XDP_FLAGS_DRV_MODE) && HAVE_DECL_XDP_FLAGS_DRV_MODE)
+  XLAT(XDP_FLAGS_DRV_MODE),
+#endif
+#if defined(XDP_FLAGS_HW_MODE) || (defined(HAVE_DECL_XDP_FLAGS_HW_MODE) && HAVE_DECL_XDP_FLAGS_HW_MODE)
+  XLAT(XDP_FLAGS_HW_MODE),
+#endif
+ XLAT_END
+};
+
+#endif /* !IN_MPERS */
diff --git a/xlat/xdp_flags.in b/xlat/xdp_flags.in
new file mode 100644
index 0000000..b804de2
--- /dev/null
+++ b/xlat/xdp_flags.in
@@ -0,0 +1,5 @@
+XDP_FLAGS_MODES
+XDP_FLAGS_UPDATE_IF_NOEXIST
+XDP_FLAGS_SKB_MODE
+XDP_FLAGS_DRV_MODE
+XDP_FLAGS_HW_MODE
diff --git a/xmalloc.c b/xmalloc.c
index 43e93eb..8ec475a 100644
--- a/xmalloc.c
+++ b/xmalloc.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -25,11 +26,20 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "defs.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
 
-static void die_out_of_memory(void)
+#include <stdlib.h>
+#include <string.h>
+
+#include "error_prints.h"
+#include "xmalloc.h"
+
+static void
+die_out_of_memory(void)
 {
-	static bool recursed;
+	static int recursed;
 
 	if (recursed)
 		exit(1);
@@ -38,7 +48,8 @@
 	error_msg_and_die("Out of memory");
 }
 
-void *xmalloc(size_t size)
+void *
+xmalloc(size_t size)
 {
 	void *p = malloc(size);
 
@@ -48,7 +59,8 @@
 	return p;
 }
 
-void *xcalloc(size_t nmemb, size_t size)
+void *
+xcalloc(size_t nmemb, size_t size)
 {
 	void *p = calloc(nmemb, size);
 
@@ -60,7 +72,8 @@
 
 #define HALF_SIZE_T	(((size_t) 1) << (sizeof(size_t) * 4))
 
-void *xreallocarray(void *ptr, size_t nmemb, size_t size)
+void *
+xreallocarray(void *ptr, size_t nmemb, size_t size)
 {
 	size_t bytes = nmemb * size;
 
@@ -76,8 +89,12 @@
 	return p;
 }
 
-char *xstrdup(const char *str)
+char *
+xstrdup(const char *str)
 {
+	if (!str)
+		return NULL;
+
 	char *p = strdup(str);
 
 	if (!p)
@@ -86,10 +103,14 @@
 	return p;
 }
 
-char *xstrndup(const char *str, size_t n)
+char *
+xstrndup(const char *str, size_t n)
 {
 	char *p;
 
+	if (!str)
+		return NULL;
+
 #ifdef HAVE_STRNDUP
 	p = strndup(str, n);
 #else
diff --git a/xmalloc.h b/xmalloc.h
new file mode 100644
index 0000000..d1feeb9
--- /dev/null
+++ b/xmalloc.h
@@ -0,0 +1,54 @@
+/*
+ * This file contains wrapper functions working with memory allocations,
+ * they just terminate the program in case of memory allocation failure.
+ * These functions can be used by various binaries included in the strace
+ * package.
+ *
+ * Copyright (c) 2001-2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_XMALLOC_H
+#define STRACE_XMALLOC_H
+
+#include <stddef.h>
+#include "gcc_compat.h"
+
+void *xcalloc(size_t nmemb, size_t size)
+	ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((1, 2));
+void *xmalloc(size_t size) ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((1));
+void *xreallocarray(void *ptr, size_t nmemb, size_t size)
+	ATTRIBUTE_ALLOC_SIZE((2, 3));
+
+/*
+ * Note that the following two functions return NULL when NULL is specified
+ * and not when allocation is failed, since, as the "x" prefix implies,
+ * the allocation failure leads to program termination, so we may re-purpose
+ * this return value and simplify the idiom "str ? xstrdup(str) : NULL".
+ */
+char *xstrdup(const char *str) ATTRIBUTE_MALLOC;
+char *xstrndup(const char *str, size_t n) ATTRIBUTE_MALLOC;
+
+#endif /* !STRACE_XMALLOC_H */