Update strace to 4.19.
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.
Bug: N/A
Test: strace date
Change-Id: Idd0ba3efc3fe14dad8aa7b3859045b00d4e6749d
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 */